forked from Telodendria/Telodendria
[ADD/WIP] Start adding room ID -> alias relation
This commit is contained in:
parent
c1933a2184
commit
48ffd86553
2 changed files with 29 additions and 8 deletions
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include <Routes.h>
|
#include <Routes.h>
|
||||||
|
|
||||||
|
#include <Cytoplasm/Memory.h>
|
||||||
#include <Cytoplasm/Json.h>
|
#include <Cytoplasm/Json.h>
|
||||||
#include <Cytoplasm/Str.h>
|
#include <Cytoplasm/Str.h>
|
||||||
|
|
||||||
|
@ -35,7 +36,7 @@
|
||||||
ROUTE_IMPL(RouteAliasDirectory, path, argp)
|
ROUTE_IMPL(RouteAliasDirectory, path, argp)
|
||||||
{
|
{
|
||||||
RouteArgs *args = argp;
|
RouteArgs *args = argp;
|
||||||
char *alias = ArrayGet(path, 0);
|
char *alias = HttpUrlDecode(ArrayGet(path, 0));
|
||||||
|
|
||||||
HashMap *request = NULL;
|
HashMap *request = NULL;
|
||||||
HashMap *response;
|
HashMap *response;
|
||||||
|
@ -43,7 +44,9 @@ ROUTE_IMPL(RouteAliasDirectory, path, argp)
|
||||||
Db *db = args->matrixArgs->db;
|
Db *db = args->matrixArgs->db;
|
||||||
DbRef *ref = NULL;
|
DbRef *ref = NULL;
|
||||||
HashMap *aliases;
|
HashMap *aliases;
|
||||||
|
HashMap *idObject;
|
||||||
JsonValue *val;
|
JsonValue *val;
|
||||||
|
Array *arr;
|
||||||
|
|
||||||
char *token;
|
char *token;
|
||||||
char *msg;
|
char *msg;
|
||||||
|
@ -67,6 +70,7 @@ ROUTE_IMPL(RouteAliasDirectory, path, argp)
|
||||||
|
|
||||||
if (!ParseCommonID(alias, &aliasID) || aliasID.sigil != '#')
|
if (!ParseCommonID(alias, &aliasID) || aliasID.sigil != '#')
|
||||||
{
|
{
|
||||||
|
Log(LOG_INFO, "sigil: ' %c '", aliasID.sigil);
|
||||||
msg = "Invalid room alias.";
|
msg = "Invalid room alias.";
|
||||||
HttpResponseStatus(args->context, HTTP_BAD_REQUEST);
|
HttpResponseStatus(args->context, HTTP_BAD_REQUEST);
|
||||||
response = MatrixErrorCreate(M_INVALID_PARAM, msg);
|
response = MatrixErrorCreate(M_INVALID_PARAM, msg);
|
||||||
|
@ -120,14 +124,17 @@ ROUTE_IMPL(RouteAliasDirectory, path, argp)
|
||||||
if (HttpRequestMethodGet(args->context) == HTTP_PUT)
|
if (HttpRequestMethodGet(args->context) == HTTP_PUT)
|
||||||
{
|
{
|
||||||
HashMap *newAlias;
|
HashMap *newAlias;
|
||||||
|
char *id;
|
||||||
|
|
||||||
/* Check for server name.
|
/* Check for server name.
|
||||||
* TODO: Take the port into account, that might need a
|
* TODO: Take the port into account, that might need a
|
||||||
* refactor for it to use a ServerPart */
|
* refactor for it to use a ServerPart */
|
||||||
if (!StrEquals(aliasID.server.hostname, config->serverName))
|
if (!StrEquals(aliasID.server.hostname, config->serverName))
|
||||||
{
|
{
|
||||||
|
Log(LOG_INFO, "'%s' != '%s'", aliasID.server.hostname, config->serverName);
|
||||||
|
msg = "Invalid server name.";
|
||||||
HttpResponseStatus(args->context, HTTP_BAD_REQUEST);
|
HttpResponseStatus(args->context, HTTP_BAD_REQUEST);
|
||||||
response = MatrixErrorCreate(M_INVALID_PARAM, "Invalid servername");
|
response = MatrixErrorCreate(M_INVALID_PARAM, msg);
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,16 +153,15 @@ ROUTE_IMPL(RouteAliasDirectory, path, argp)
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!JsonValueAsString(HashMapGet(request, "room_id")))
|
id = JsonValueAsString(HashMapGet(request, "room_id"));
|
||||||
|
if (!id)
|
||||||
{
|
{
|
||||||
HttpResponseStatus(args->context, HTTP_BAD_REQUEST);
|
HttpResponseStatus(args->context, HTTP_BAD_REQUEST);
|
||||||
response = MatrixErrorCreate(M_BAD_JSON, "Missing or invalid room_id.");
|
response = MatrixErrorCreate(M_BAD_JSON, "Missing or invalid room_id.");
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Validate room ID to make sure it is well
|
if (!ParseCommonID(id, &roomID) || roomID.sigil != '!')
|
||||||
* formed. */
|
|
||||||
if (!ParseCommonID(JsonValueAsString(HashMapGet(request, "room_id")), &roomID) || aliasID.sigil != '!')
|
|
||||||
{
|
{
|
||||||
msg = "Invalid room ID.";
|
msg = "Invalid room ID.";
|
||||||
HttpResponseStatus(args->context, HTTP_BAD_REQUEST);
|
HttpResponseStatus(args->context, HTTP_BAD_REQUEST);
|
||||||
|
@ -165,10 +171,22 @@ ROUTE_IMPL(RouteAliasDirectory, path, argp)
|
||||||
|
|
||||||
newAlias = HashMapCreate();
|
newAlias = HashMapCreate();
|
||||||
HashMapSet(newAlias, "createdBy", JsonValueString(UserGetName(user)));
|
HashMapSet(newAlias, "createdBy", JsonValueString(UserGetName(user)));
|
||||||
HashMapSet(newAlias, "id", JsonValueDuplicate(HashMapGet(request, "room_id")));
|
HashMapSet(newAlias, "id", JsonValueString(id));
|
||||||
HashMapSet(newAlias, "servers", JsonValueArray(ArrayCreate()));
|
HashMapSet(newAlias, "servers", JsonValueArray(ArrayCreate()));
|
||||||
|
|
||||||
JsonSet(aliases, JsonValueObject(newAlias), 2, "alias", alias);
|
JsonSet(aliases, JsonValueObject(newAlias), 2, "alias", alias);
|
||||||
|
|
||||||
|
if (!(idObject = JsonValueAsObject(JsonGet(aliases, 2, "id", id))))
|
||||||
|
{
|
||||||
|
arr = ArrayCreate();
|
||||||
|
idObject = HashMapCreate();
|
||||||
|
HashMapSet(idObject, "aliases", JsonValueArray(arr));
|
||||||
|
JsonSet(aliases, JsonValueObject(idObject), 2, "id", id);
|
||||||
|
}
|
||||||
|
val = HashMapGet(idObject, "aliases");
|
||||||
|
arr = JsonValueAsArray(val);
|
||||||
|
ArrayAdd(arr, JsonValueString(alias));
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -187,6 +205,7 @@ ROUTE_IMPL(RouteAliasDirectory, path, argp)
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValueFree(HashMapDelete(JsonValueAsObject(HashMapGet(aliases, "alias")), alias));
|
JsonValueFree(HashMapDelete(JsonValueAsObject(HashMapGet(aliases, "alias")), alias));
|
||||||
|
/* TODO: Delete from "id" objects when putting aliases. */
|
||||||
}
|
}
|
||||||
response = HashMapCreate();
|
response = HashMapCreate();
|
||||||
|
|
||||||
|
@ -204,5 +223,6 @@ finish:
|
||||||
UserUnlock(user);
|
UserUnlock(user);
|
||||||
DbUnlock(db, ref);
|
DbUnlock(db, ref);
|
||||||
JsonFree(request);
|
JsonFree(request);
|
||||||
|
Free(alias);
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@ ROUTE_IMPL(RouteVersions, path, argp)
|
||||||
|
|
||||||
#define DECLARE_SPEC_VERSION(x) ArrayAdd(versions, JsonValueString(x))
|
#define DECLARE_SPEC_VERSION(x) ArrayAdd(versions, JsonValueString(x))
|
||||||
|
|
||||||
|
DECLARE_SPEC_VERSION("v1.5");
|
||||||
DECLARE_SPEC_VERSION("v1.7");
|
DECLARE_SPEC_VERSION("v1.7");
|
||||||
/* Declare additional spec version support here. */
|
/* Declare additional spec version support here. */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue