From 30c3f837d47ff16d9bb006acf7909530736ada3a Mon Sep 17 00:00:00 2001 From: lda Date: Wed, 1 Nov 2023 21:24:25 +0100 Subject: [PATCH] [ADD] Finish off a test version of #26, fix a short NULL guard --- src/RegToken.c | 5 +++++ src/Routes/RouteAdminTokens.c | 24 ++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/RegToken.c b/src/RegToken.c index 1ea51ac..a5aa123 100644 --- a/src/RegToken.c +++ b/src/RegToken.c @@ -205,6 +205,11 @@ RegTokenJSON(RegTokenInfo * info) { TokenInfo tokinfo; + if (!info) + { + return NULL; + } + tokinfo.name = info->name; tokinfo.created_on = info->created; tokinfo.expires_on = info->expires; diff --git a/src/Routes/RouteAdminTokens.c b/src/Routes/RouteAdminTokens.c index 21f5ca2..2f9e768 100644 --- a/src/Routes/RouteAdminTokens.c +++ b/src/Routes/RouteAdminTokens.c @@ -61,9 +61,9 @@ ROUTE_IMPL(RouteAdminTokens, path, argp) Int64 maxuses; Int64 lifetime; - if (method != HTTP_GET && method != HTTP_POST) + if (method != HTTP_GET && method != HTTP_POST && method != HTTP_DELETE) { - msg = "Route only supports GET and POST for now."; + msg = "Route only supports GET, POST, and DELETE"; HttpResponseStatus(args->context, HTTP_BAD_REQUEST); return MatrixErrorCreate(M_UNRECOGNIZED, msg); } @@ -123,6 +123,13 @@ ROUTE_IMPL(RouteAdminTokens, path, argp) break; } info = RegTokenGetInfo(db, ArrayGet(path, 0)); + if (!info) + { + msg = "Token doesn't exist."; + HttpResponseStatus(args->context, HTTP_BAD_REQUEST); + response = MatrixErrorCreate(M_INVALID_PARAM, msg); + goto finish; + } response = RegTokenJSON(info); @@ -183,6 +190,19 @@ ROUTE_IMPL(RouteAdminTokens, path, argp) TokenRequestFree(req); Free(req); break; + case HTTP_DELETE: + if (ArraySize(path) == 0) + { + msg = "No registration token given to DELETE /tokens/[token]."; + HttpResponseStatus(args->context, HTTP_BAD_REQUEST); + response = MatrixErrorCreate(M_INVALID_PARAM, msg); + goto finish; + } + info = RegTokenGetInfo(db, ArrayGet(path, 0)); + RegTokenDelete(info); + /* As this is a No Content, let's not set any data in the + * response */ + HttpResponseStatus(args->context, HTTP_NO_CONTENT); default: /* Fallthrough, as those are naturally kept out beforehand */ break;