diff --git a/src/RegToken.c b/src/RegToken.c index 2b318f6..fa041d3 100644 --- a/src/RegToken.c +++ b/src/RegToken.c @@ -238,7 +238,6 @@ RegTokenCreate(Db * db, char *name, char *owner, UInt64 expires, Int64 uses, int ret->uses = uses; ret->created_on = timestamp; ret->expires_on = expires; - /* TODO: #37 type mismatch: UserEncodePrivileges() returns a JsonValue */ ret->grants = UserEncodePrivileges(privileges); return ret; diff --git a/src/Routes/RoutePrivileges.c b/src/Routes/RoutePrivileges.c index 44ca311..4ffa480 100644 --- a/src/Routes/RoutePrivileges.c +++ b/src/Routes/RoutePrivileges.c @@ -98,15 +98,15 @@ ROUTE_IMPL(RoutePrivileges, path, argp) switch (HttpRequestMethodGet(args->context)) { case HTTP_POST: - privileges = UserDecodePrivileges(val); + privileges = UserDecodePrivileges(JsonValueAsArray(val)); break; case HTTP_PUT: privileges = UserGetPrivileges(user); - privileges |= UserDecodePrivileges(val); + privileges |= UserDecodePrivileges(JsonValueAsArray(val)); break; case HTTP_DELETE: privileges = UserGetPrivileges(user); - privileges &= ~UserDecodePrivileges(val); + privileges &= ~UserDecodePrivileges(JsonValueAsArray(val)); break; default: /* Impossible */ @@ -124,7 +124,7 @@ ROUTE_IMPL(RoutePrivileges, path, argp) /* Fall through */ case HTTP_GET: response = HashMapCreate(); - HashMapSet(response, "privileges", UserEncodePrivileges(UserGetPrivileges(user))); + HashMapSet(response, "privileges", JsonValueArray(UserEncodePrivileges(UserGetPrivileges(user)))); break; default: HttpResponseStatus(args->context, HTTP_BAD_REQUEST); diff --git a/src/Routes/RouteRegister.c b/src/Routes/RouteRegister.c index 7f51744..3527219 100644 --- a/src/Routes/RouteRegister.c +++ b/src/Routes/RouteRegister.c @@ -276,7 +276,6 @@ ROUTE_IMPL(RouteRegister, path, argp) if (info) { - /* TODO: #37 type mismatch: info->grants is a string array. */ UserSetPrivileges(user, UserDecodePrivileges(info->grants)); RegTokenClose(info); RegTokenFree(info); diff --git a/src/User.c b/src/User.c index 1996255..d13ab90 100644 --- a/src/User.c +++ b/src/User.c @@ -749,7 +749,7 @@ UserGetPrivileges(User * user) return USER_NONE; } - return UserDecodePrivileges(HashMapGet(DbJson(user->ref), "privileges")); + return UserDecodePrivileges(JsonValueAsArray(HashMapGet(DbJson(user->ref), "privileges"))); } int @@ -768,7 +768,7 @@ UserSetPrivileges(User * user, int privileges) return 1; } - val = UserEncodePrivileges(privileges); + val = JsonValueArray(UserEncodePrivileges(privileges)); if (!val) { return 0; @@ -779,19 +779,17 @@ UserSetPrivileges(User * user, int privileges) } int -UserDecodePrivileges(JsonValue * val) +UserDecodePrivileges(Array * arr) { int privileges = USER_NONE; - Array *arr; + size_t i; - if (!val || JsonValueType(val) != JSON_ARRAY) + if (!arr) { goto finish; } - arr = JsonValueAsArray(val); - for (i = 0; i < ArraySize(arr); i++) { JsonValue *val = ArrayGet(arr, i); @@ -848,7 +846,7 @@ UserDecodePrivilege(const char *p) } } -JsonValue * +Array * UserEncodePrivileges(int privileges) { Array *arr = ArrayCreate(); @@ -880,7 +878,7 @@ UserEncodePrivileges(int privileges) #undef A finish: - return JsonValueArray(arr); + return arr; } UserId * diff --git a/src/include/User.h b/src/include/User.h index ec266ec..bd30803 100644 --- a/src/include/User.h +++ b/src/include/User.h @@ -286,13 +286,13 @@ extern int UserSetPrivileges(User *, int); * Decode the JSON that represents the user privileges into a packed * bit field for simple manipulation. */ -extern int UserDecodePrivileges(JsonValue *); +extern int UserDecodePrivileges(Array *); /** * Encode the packed bit field that represents user privileges as a * JSON value. */ -extern JsonValue *UserEncodePrivileges(int); +extern Array *UserEncodePrivileges(int); /** * Convert a string privilege into its bit in the bit field. This is