aboutsummaryrefslogtreecommitdiff
path: root/src/clog.c
blob: 87e58e7bd5d86b77a494e1dcf027b05a512e8d38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <kore/kore.h>
#include <kore/http.h>
#include <kore/pgsql.h>

#include "assets.h"

int init(int);
int page(struct http_request *);

/* Called when our module is loaded (see config) */
int init(int state)
{
	/* Register our database. */
	int err = kore_pgsql_register(
	"db",
	"host=127.0.0.1 port=5432 user=postgres password=p0stgres dbname=clog sslmode=disable"
	);

	return (err);
}

int page(struct http_request *req)
{

	struct kore_buf *buf;
	buf = kore_buf_alloc(4096);

	kore_buf_append(buf, asset_index_begin_html, asset_len_index_begin_html);

	// SQL vars
	struct kore_pgsql sql;
	int row, rows;

	// Results
	char *id;
	char *title, *body;

	/* req->status = HTTP_STATUS_INTERNAL_ERROR; */

	kore_pgsql_init(&sql);

	/*
	 * Initialise our kore_pgsql data structure with the database name
	 * we want to connect to (note that we registered this earlier with
	 * kore_pgsql_register()). We also say we will perform a synchronous
	 * query (KORE_PGSQL_SYNC).
	 */
	int err = kore_pgsql_setup(&sql, "db", KORE_PGSQL_SYNC);
	kore_log(LOG_ERR, "kore_pgsql_setup: %d", err);
	if (!err)
	{
		kore_pgsql_logerror(&sql);
		goto out;
	}

	/*
	 * Now we can fire off the query, once it returns we either have
	 * a result on which we can operate or an error occurred.
	 */
	if (!kore_pgsql_query(&sql, "SELECT id, title, body FROM entries")) {
		kore_pgsql_logerror(&sql);
		goto out;
	}

	/*
	 * Iterate over the result and dump it to somewhere.
	 */
	rows = kore_pgsql_ntuples(&sql);
	for (row = 0; row < rows; row++) {
		id = kore_pgsql_getvalue(&sql, row, 0);
		title = kore_pgsql_getvalue(&sql, row, 1);
		body = kore_pgsql_getvalue(&sql, row, 2);

		kore_log(LOG_NOTICE, "id: '%s'", id);
		kore_log(LOG_NOTICE, "title: '%s'", title);
		kore_log(LOG_NOTICE, "body: '%s'", body);
		
		kore_buf_appendf(buf, "\t<tr><td>%s</td><td>%s</td><td>%s</td></tr>\n", id, title, body);
	}

out: ;

	kore_buf_append(buf, asset_index_end_html, asset_len_index_end_html);

	http_response_header(req, "content-type", "text/html; charset=utf-8");
	http_response(req, HTTP_STATUS_OK, buf->data, buf->offset);
	// http_response_stream ???
	kore_buf_free(buf);

	/* Don't forget to cleanup the kore_pgsql data structure. */
	kore_pgsql_cleanup(&sql);

	return (KORE_RESULT_OK);
}