diff options
author | OpenGnSys Support Team <soporte-og@soleta.eu> | 2024-08-30 12:59:31 +0200 |
---|---|---|
committer | OpenGnSys Support Team <soporte-og@soleta.eu> | 2024-08-30 13:03:22 +0200 |
commit | 8c37aa368894a3062dfbb165711dfa14253783fe (patch) | |
tree | ac4bf9ea87971dad5ad262f4c031c8458a571991 | |
parent | d8af32cbcb1f576e799a6efaaeb3843e7e957d14 (diff) |
rest: adapt cache/fetch to support repository with multiple IP adddress
take repository_id as json attributo, then infer repository IP from client.
-rw-r--r-- | src/rest.c | 37 |
1 files changed, 25 insertions, 12 deletions
@@ -4377,7 +4377,10 @@ static int og_cmd_cache_delete(json_t *element, struct og_msg_params *params, static int og_cmd_cache_fetch(json_t *element, struct og_msg_params *params, char *buffer_reply) { - json_t *value, *body, *image, *repository = NULL; + char repository_ip[OG_DB_IP_MAXLEN + 1] = {}; + json_t *value, *body; + struct og_dbi *dbi; + const char *key; int err = 0; @@ -4388,29 +4391,39 @@ static int og_cmd_cache_fetch(json_t *element, struct og_msg_params *params, if (!strcmp(key, "clients")) { err = og_json_parse_clients(value, params); } else if (!strcmp(key, "image")) { - if (json_typeof(value) != JSON_STRING) { - err = -1; - } - image = value; - } else if (!strcmp(key, "repository")) { - if (json_typeof(value) != JSON_STRING) { - err = -1; - } - repository = value; + err = og_json_parse_string(value, ¶ms->name); + params->flags |= OG_REST_PARAM_NAME; + } else if (!strcmp(key, "repository_id")) { + err = og_json_parse_uint64(value, ¶ms->image.repo_id); + params->flags |= OG_REST_PARAM_REPO; } if (err < 0) return err; } - if (!og_msg_params_validate(params, OG_REST_PARAM_ADDR)) + if (!og_msg_params_validate(params, OG_REST_PARAM_NAME | + OG_REST_PARAM_ADDR | + OG_REST_PARAM_REPO)) return -1; - if (!image || !repository) + dbi = og_dbi_open(&ogconfig.db); + if (!dbi) { + syslog(LOG_ERR, + "cannot open connection database (%s:%d)\n", + __func__, __LINE__); return -1; + } + + err = og_dbi_get_repository_ip(dbi, params->image.repo_id, + params->ips_array[0], repository_ip); + og_dbi_close(dbi); + if (err < 0) + return err; body = json_copy(element); json_object_del(body, "clients"); + json_object_set_new(body, "repository", json_string(repository_ip)); return og_send_request(OG_METHOD_POST, OG_CMD_CACHE_FETCH, params, body); } |