From ad1901017f1578073a6df22fc22f53793be7902d Mon Sep 17 00:00:00 2001 From: lda Date: Wed, 29 Nov 2023 21:21:41 +0100 Subject: [PATCH] [MOD] Delete id relation when DELETE is requested. --- src/Routes/RouteAliasDirectory.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/Routes/RouteAliasDirectory.c b/src/Routes/RouteAliasDirectory.c index 19e760a..620f7ca 100644 --- a/src/Routes/RouteAliasDirectory.c +++ b/src/Routes/RouteAliasDirectory.c @@ -190,22 +190,46 @@ ROUTE_IMPL(RouteAliasDirectory, path, argp) } else { - if (!JsonGet(aliases, 2, "alias", alias)) + HashMap *roomAlias; + char *id; + + if (!(val = JsonGet(aliases, 2, "alias", alias))) { HttpResponseStatus(args->context, HTTP_NOT_FOUND); response = MatrixErrorCreate(M_NOT_FOUND, "Room alias not found."); goto finish; } + roomAlias = JsonValueAsObject(val); + id = StrDuplicate(JsonValueAsString(HashMapGet(roomAlias, "id"))); + Log(LOG_INFO, "id: %s", id); - if (!(UserGetPrivileges(user) & USER_ALIAS) && !StrEquals(UserGetName(user), JsonValueAsString(JsonGet(aliases, 3, "alias", alias, "createdBy")))) + if (!(UserGetPrivileges(user) & USER_ALIAS) && !StrEquals(UserGetName(user), JsonValueAsString(JsonGet(roomAlias, 1, "createdBy")))) { HttpResponseStatus(args->context, HTTP_UNAUTHORIZED); response = MatrixErrorCreate(M_UNAUTHORIZED, NULL); + Free(id); goto finish; } JsonValueFree(HashMapDelete(JsonValueAsObject(HashMapGet(aliases, "alias")), alias)); - /* TODO: Delete from "id" objects when putting aliases. */ + + idObject = JsonValueAsObject(JsonGet(aliases, 2, "id", id)); + if (idObject) + { + size_t i; + val = HashMapGet(idObject, "aliases"); + arr = JsonValueAsArray(val); + for (i = 0; i < ArraySize(arr); i++) + { + if (StrEquals(JsonValueAsString(ArrayGet(arr, i)), alias)) + { + JsonValueFree(ArrayDelete(arr, i)); + break; + } + } + } + Free(id); + } response = HashMapCreate();