summaryrefslogtreecommitdiffstats
path: root/src/json.c
diff options
context:
space:
mode:
authorRoberto Hueso Gómez <rhueso@soleta.eu>2020-07-06 17:26:40 +0200
committerOpenGnSys Support Team <soporte-og@soleta.eu>2020-07-06 17:27:33 +0200
commit33b0c6f694c3365e6280b01d9253aefa892075e9 (patch)
tree2a5be232ba5edc587423f97b5265d86e065c4781 /src/json.c
parent96b02b5424db61c32386c48fe05ec3375d8a84f5 (diff)
Add POST /modes REST request
This patch implements HTTP POST /modes request which can change the mode of any particular scope. Request: POST /modes { "scope": {"id": 1, "type": "computer"}, "mode": "pxe" } Response: 200 OK
Diffstat (limited to 'src/json.c')
-rw-r--r--src/json.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/json.c b/src/json.c
index b76a3b7..078dfb7 100644
--- a/src/json.c
+++ b/src/json.c
@@ -39,6 +39,35 @@ int og_json_parse_bool(json_t *element, bool *value)
return 0;
}
+int og_json_parse_scope(json_t *element, struct og_scope *scope,
+ const uint64_t required_flags)
+{
+ uint64_t flags = 0UL;
+ const char *key;
+ json_t *value;
+ int err = 0;
+
+ json_object_foreach(element, key, value) {
+ if (!strcmp(key, "id")) {
+ err = og_json_parse_uint(value, &scope->id);
+ flags |= OG_PARAM_SCOPE_ID;
+ } else if (!strcmp(key, "type")) {
+ err = og_json_parse_string(value, &scope->type);
+ flags |= OG_PARAM_SCOPE_TYPE;
+ } else {
+ err = -1;
+ }
+
+ if (err < 0)
+ return err;
+ }
+
+ if (flags != required_flags)
+ return -1;
+
+ return err;
+}
+
int og_json_parse_partition(json_t *element, struct og_partition *part,
uint64_t required_flags)
{