source: ogServer-Git/src/json.c @ a1aaad4

Last change on this file since a1aaad4 was 33b0c6f, checked in by OpenGnSys Support Team <soporte-og@…>, 4 years ago

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

  • Property mode set to 100644
File size: 2.7 KB
Line 
1/*
2 * Copyright (C) 2020 Soleta Networks <info@soleta.eu>
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU Affero General Public License as published by the
6 * Free Software Foundation, version 3.
7 */
8
9#include "json.h"
10#include <stdint.h>
11
12int og_json_parse_string(json_t *element, const char **str)
13{
14        if (json_typeof(element) != JSON_STRING)
15                return -1;
16
17        *str = json_string_value(element);
18        return 0;
19}
20
21int og_json_parse_uint(json_t *element, uint32_t *integer)
22{
23        if (json_typeof(element) != JSON_INTEGER)
24                return -1;
25
26        *integer = json_integer_value(element);
27        return 0;
28}
29
30int og_json_parse_bool(json_t *element, bool *value)
31{
32        if (json_typeof(element) == JSON_TRUE)
33                *value = true;
34        else if (json_typeof(element) == JSON_FALSE)
35                *value = false;
36        else
37                return -1;
38
39        return 0;
40}
41
42int og_json_parse_scope(json_t *element, struct og_scope *scope,
43                        const uint64_t required_flags)
44{
45        uint64_t flags = 0UL;
46        const char *key;
47        json_t *value;
48        int err = 0;
49
50        json_object_foreach(element, key, value) {
51                if (!strcmp(key, "id")) {
52                        err = og_json_parse_uint(value, &scope->id);
53                        flags |= OG_PARAM_SCOPE_ID;
54                } else if (!strcmp(key, "type")) {
55                        err = og_json_parse_string(value, &scope->type);
56                        flags |= OG_PARAM_SCOPE_TYPE;
57                } else {
58                        err = -1;
59                }
60
61                if (err < 0)
62                        return err;
63        }
64
65        if (flags != required_flags)
66                return -1;
67
68        return err;
69}
70
71int og_json_parse_partition(json_t *element, struct og_partition *part,
72                            uint64_t required_flags)
73{
74        uint64_t flags = 0UL;
75        const char *key;
76        json_t *value;
77        int err = 0;
78
79        json_object_foreach(element, key, value) {
80                if (!strcmp(key, "partition")) {
81                        err = og_json_parse_string(value, &part->number);
82                        flags |= OG_PARAM_PART_NUMBER;
83                } else if (!strcmp(key, "code")) {
84                        err = og_json_parse_string(value, &part->code);
85                        flags |= OG_PARAM_PART_CODE;
86                } else if (!strcmp(key, "filesystem")) {
87                        err = og_json_parse_string(value, &part->filesystem);
88                        flags |= OG_PARAM_PART_FILESYSTEM;
89                } else if (!strcmp(key, "size")) {
90                        err = og_json_parse_string(value, &part->size);
91                        flags |= OG_PARAM_PART_SIZE;
92                } else if (!strcmp(key, "format")) {
93                        err = og_json_parse_string(value, &part->format);
94                        flags |= OG_PARAM_PART_FORMAT;
95                } else if (!strcmp(key, "disk")) {
96                        err = og_json_parse_string(value, &part->disk);
97                        flags |= OG_PARAM_PART_DISK;
98                } else if (!strcmp(key, "os")) {
99                        err = og_json_parse_string(value, &part->os);
100                        flags |= OG_PARAM_PART_OS;
101                } else if (!strcmp(key, "used_size")) {
102                        err = og_json_parse_string(value, &part->used_size);
103                        flags |= OG_PARAM_PART_USED_SIZE;
104                }
105
106                if (err < 0)
107                        return err;
108        }
109
110        if (flags != required_flags)
111                return -1;
112
113        return err;
114}
Note: See TracBrowser for help on using the repository browser.