aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clog.c118
-rw-r--r--src/queries.h10
2 files changed, 93 insertions, 35 deletions
diff --git a/src/clog.c b/src/clog.c
index ed50a17..6f54d0f 100644
--- a/src/clog.c
+++ b/src/clog.c
@@ -59,6 +59,7 @@ void entry_query_init(struct entry_query *eq, const char *id);
void entry_query_cleanup(struct entry_query *eq);
int validate_uuid(const char *uuid);
+int validate_text(struct http_request *req, char *data);
int http_ok_resp(struct http_request *req, enum http_status_code status, struct kore_buf *content);
int http_err_resp(struct http_request *req, enum http_status_code status);
@@ -68,13 +69,14 @@ int redirect(struct http_request *req);
int get_index(struct http_request *req);
int get_entry(struct http_request *req);
int edit_entry(struct http_request *req);
+int update_entry(struct http_request *req);
// int v_example_func(struct http_request *req, char *data);
int sql_select(struct entry_query *eq);
int sql_update(const char *id, const char *title, const char *body);
-int sql_delete(const char *id);
-int sql_insert(const char *id, const char *title, const char *body);
+// int sql_delete(const char *id);
+// int sql_insert(const char *id, const char *title, const char *body);
static void process_md_output(const MD_CHAR *html, MD_SIZE size, void *buf);
static int render_md(const char *in, struct kore_buf *out);
@@ -136,6 +138,11 @@ int validate_uuid(const char *uuid) {
return KORE_RESULT_OK;
}
+int validate_text(struct http_request *req, char *data) {
+ kore_log(LOG_NOTICE, "v_example_func called %s", data);
+ return KORE_RESULT_OK;
+}
+
int http_ok_resp(
struct http_request *req,
enum http_status_code status,
@@ -180,11 +187,6 @@ int redirect(struct http_request *req) {
return KORE_RESULT_OK;
}
-// int v_example_func(struct http_request *req, char *data) {
-// kore_log(LOG_NOTICE, "v_example_func called");
-// return KORE_RESULT_OK;
-// }
-
int get_index(struct http_request *req) {
struct entry_query eq;
@@ -309,7 +311,7 @@ int edit_entry(struct http_request *req) {
id = kore_strdup(req->path + strlen("/entries/"));
id[strlen(id) - strlen("/edit")] = '\0';
-
+
entry_query_init(&eq, (const char*) id);
// Check for valid resource UUID
@@ -333,7 +335,7 @@ int edit_entry(struct http_request *req) {
kore_buf_appendf(
content, (const char *) asset_entry_edit_html,
- eq.entries[0]->id, eq.entries[0]->title, eq.entries[0]->body
+ eq.entries[0]->id, eq.entries[0]->id, eq.entries[0]->title, eq.entries[0]->body
);
// Render MD.
@@ -363,6 +365,62 @@ out: ;
return KORE_RESULT_OK;
}
+int update_entry(struct http_request *req) {
+ int err = 0;
+
+ char *id = NULL;
+ char *title = NULL;
+ char *body = NULL;
+
+ http_populate_post(req);
+
+ if (http_argument_get_string(req, "title", &title)) {
+ kore_log(LOG_INFO, "form title %s.", title);
+ }
+ else {
+ kore_log(LOG_ERR, "Error no title");
+ http_err_resp(req, HTTP_STATUS_BAD_REQUEST);
+ goto out;
+ }
+
+ if (http_argument_get_string(req, "body", &body)) {
+ kore_log(LOG_INFO, "form body %s.", body);
+ }
+ else {
+ kore_log(LOG_ERR, "Error no body");
+ http_err_resp(req, HTTP_STATUS_BAD_REQUEST);
+ goto out;
+ }
+
+ id = kore_strdup(req->path + strlen("/entries/"));
+ kore_log(LOG_DEBUG, "updating entry %s.", id);
+
+ err = validate_uuid(id);
+ if (err == KORE_RESULT_ERROR) {
+ kore_log(LOG_ERR, "Invalid entry id %s.", id);
+ http_err_resp(req, HTTP_STATUS_NOT_FOUND);
+ goto out;
+ }
+
+ err = sql_update(id, title, body);
+ // err = KORE_RESULT_ERROR;
+ if (err == KORE_RESULT_ERROR) {
+ kore_log(LOG_ERR, "Error updating entry id %s.", id);
+ http_err_resp(req, HTTP_STATUS_INTERNAL_ERROR);
+ goto out;
+ }
+
+ http_err_resp(req, HTTP_STATUS_CREATED);
+
+out: ;
+
+ if (id != NULL) {
+ kore_free(id);
+ }
+
+ return KORE_RESULT_OK;
+}
+
int sql_select(struct entry_query *eq) {
int err = KORE_RESULT_OK;
@@ -433,33 +491,33 @@ out: ;
return err;
}
-// int sql_update_entry(const char *id, const char *title, const char *body) {
-// int err = KORE_RESULT_OK;
+int sql_update(const char *id, const char *title, const char *body) {
+ int err = KORE_RESULT_OK;
-// struct kore_pgsql sql;
-// kore_pgsql_init(&sql);
+ struct kore_pgsql sql;
+ kore_pgsql_init(&sql);
-// err = kore_pgsql_setup(&sql, database, KORE_PGSQL_SYNC);
-// if (err == KORE_RESULT_ERROR) {
-// kore_pgsql_logerror(&sql);
-// goto out;
-// }
+ err = kore_pgsql_setup(&sql, database, KORE_PGSQL_SYNC);
+ if (err == KORE_RESULT_ERROR) {
+ kore_pgsql_logerror(&sql);
+ goto out;
+ }
-// err = kore_pgsql_query_params(
-// &sql, q_update_entry, 0, 3, KORE_PGSQL_PARAM_TEXT(title), KORE_PGSQL_PARAM_TEXT(body),
-// KORE_PGSQL_PARAM_TEXT(id)
-// );
-// if (err == KORE_RESULT_ERROR) {
-// kore_pgsql_logerror(&sql);
-// goto out;
-// }
+ err = kore_pgsql_query_params(
+ &sql, q_update_entry, 0, 3, KORE_PGSQL_PARAM_TEXT(title), KORE_PGSQL_PARAM_TEXT(body),
+ KORE_PGSQL_PARAM_TEXT(id)
+ );
+ if (err == KORE_RESULT_ERROR) {
+ kore_pgsql_logerror(&sql);
+ goto out;
+ }
-// out: ;
+out: ;
-// kore_pgsql_cleanup(&sql);
+ kore_pgsql_cleanup(&sql);
-// return err;
-// }
+ return err;
+}
// int sql_delete_entry(const char *id) {
// int err = KORE_RESULT_OK;
diff --git a/src/queries.h b/src/queries.h
index 3956129..1246091 100644
--- a/src/queries.h
+++ b/src/queries.h
@@ -22,11 +22,11 @@ const char *q_select_entries =
// "($1, $2, $3) "
// "RETURNING id;";
-// const char *q_update_entry =
-// "UPDATE entries "
-// "SET title = $1, body = $2, updated_at = NOW() "
-// "WHERE id = $3 "
-// "RETURNING id;";
+const char *q_update_entry =
+"UPDATE entries "
+"SET title = $1, body = $2, updated_at = NOW() "
+"WHERE id = $3 "
+"RETURNING id;";
// const char *q_delete_entry =
// "DELETE "