summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rest.c109
1 files changed, 72 insertions, 37 deletions
diff --git a/src/rest.c b/src/rest.c
index 4709fc9..a426a0f 100644
--- a/src/rest.c
+++ b/src/rest.c
@@ -3354,51 +3354,23 @@ static int og_cmd_restore_image(json_t *element, struct og_msg_params *params)
clients);
}
-static int og_cmd_delete_image(json_t *element, struct og_msg_params *params)
+static int og_delete_image(struct og_dbi *dbi, const uint32_t image_id)
{
char filename[PATH_MAX + 1], checksum[PATH_MAX + 1];
- const char *key, *image;
- struct og_dbi *dbi;
+ const char *image;
dbi_result result;
- json_t *value;
- int err = 0;
-
- if (json_typeof(element) != JSON_OBJECT)
- return -1;
-
- json_object_foreach(element, key, value) {
- if (!strcmp(key, "image")) {
- err = og_json_parse_string(value, &params->id);
- params->flags |= OG_REST_PARAM_ID;
- }
-
- if (err < 0)
- return err;
- }
-
- if (!og_msg_params_validate(params, OG_REST_PARAM_ID))
- return -1;
-
- dbi = og_dbi_open(&ogconfig.db);
- if (!dbi) {
- syslog(LOG_ERR, "cannot open connection database (%s:%d)\n",
- __func__, __LINE__);
- return -1;
- }
result = dbi_conn_queryf(dbi->conn,
"SELECT nombreca FROM imagenes "
- "WHERE idimagen='%s'",
- params->id);
+ "WHERE idimagen='%u'",
+ image_id);
if (!result) {
- og_dbi_close(dbi);
syslog(LOG_ERR, "failed to query database\n");
return -1;
}
if (!dbi_result_next_row(result)) {
dbi_result_free(result);
- og_dbi_close(dbi);
- syslog(LOG_ERR, "image does not exist in database\n");
+ syslog(LOG_ERR, "image \"%u\" does not exist in database\n", image_id);
return -1;
}
@@ -3411,10 +3383,9 @@ static int og_cmd_delete_image(json_t *element, struct og_msg_params *params)
result = dbi_conn_queryf(dbi->conn,
"DELETE FROM imagenes "
- "WHERE idimagen='%s'",
- params->id);
+ "WHERE idimagen='%u'",
+ image_id);
if (!result) {
- og_dbi_close(dbi);
syslog(LOG_ERR, "failed to query database\n");
return -1;
}
@@ -3422,7 +3393,6 @@ static int og_cmd_delete_image(json_t *element, struct og_msg_params *params)
syslog(LOG_ERR, "delete did not modify any row (%s:%d)\n",
__func__, __LINE__);
dbi_result_free(result);
- og_dbi_close(dbi);
return -1;
}
dbi_result_free(result);
@@ -3430,6 +3400,45 @@ static int og_cmd_delete_image(json_t *element, struct og_msg_params *params)
unlink(filename);
unlink(checksum);
+ return 0;
+}
+
+static int og_cmd_delete_image(json_t *element, struct og_msg_params *params)
+{
+ struct og_dbi *dbi;
+ const char *key;
+ json_t *value;
+ int err = 0;
+
+ if (json_typeof(element) != JSON_OBJECT)
+ return -1;
+
+ json_object_foreach(element, key, value) {
+ if (!strcmp(key, "image")) {
+ err = og_json_parse_string(value, &params->id);
+ params->flags |= OG_REST_PARAM_ID;
+ }
+
+ if (err < 0)
+ return err;
+ }
+
+ if (!og_msg_params_validate(params, OG_REST_PARAM_ID))
+ return -1;
+
+ dbi = og_dbi_open(&ogconfig.db);
+ if (!dbi) {
+ syslog(LOG_ERR, "cannot open connection database (%s:%d)\n",
+ __func__, __LINE__);
+ return -1;
+ }
+
+ err = og_delete_image(dbi, atoi(params->id));
+ if (err < 0) {
+ og_dbi_close(dbi);
+ return err;
+ }
+
og_dbi_close(dbi);
return 0;
@@ -5553,6 +5562,7 @@ static int og_cmd_post_center_delete(json_t *element,
const char *key, *msglog;
struct og_dbi *dbi;
dbi_result result;
+ uint32_t image_id;
json_t *value;
int err = 0;
@@ -5597,7 +5607,32 @@ static int og_cmd_post_center_delete(json_t *element,
dbi_result_free(result);
+ result = dbi_conn_queryf(dbi->conn,
+ "SELECT idimagen FROM imagenes WHERE idcentro=%s",
+ params->id);
+
+ if (!result) {
+ dbi_conn_error(dbi->conn, &msglog);
+ syslog(LOG_ERR, "failed to query database (%s:%d) %s\n",
+ __func__, __LINE__, msglog);
+ og_dbi_close(dbi);
+ return -1;
+ }
+
+ while (dbi_result_next_row(result)) {
+ image_id = dbi_result_get_uint(result, "idimagen");
+
+ err = og_delete_image(dbi, image_id);
+ if (err < 0) {
+ dbi_result_free(result);
+ og_dbi_close(dbi);
+ return err;
+ }
+ }
+
+ dbi_result_free(result);
og_dbi_close(dbi);
+
return 0;
}