aboutsummaryrefslogtreecommitdiff
path: root/src/clog.c
blob: ea5c9b2ec8a057605bae491b54f77db3b5c0f8cd (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
#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"
	);
	// kore_pgsql_register("db", "host=/tmp dbname=clog");

	return (err);
}

int page(struct http_request *req)
{

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

	kore_buf_append(buf, asset_index_begin_html, asset_len_index_begin_html);

	/* sql stuff */
	struct kore_pgsql sql;
	char              *name;
	int               rows, i;

	/* 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(1, "kore_pgsql_setup: %d", err);
	kore_log(1, "sql->state: %d", sql.state);
	if (!err) {
		kore_log(1, "here1!");
		kore_pgsql_logerror(&sql);
		goto out;
	}

	kore_log(1, "here!");

	/*
	 * 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 * FROM entries")) {
		kore_pgsql_logerror(&sql);
		goto out;
	}

	/*
	 * Iterate over the result and dump it to somewhere.
	 */
	rows = kore_pgsql_ntuples(&sql);
	for (i = 0; i < rows; i++) {
		name = kore_pgsql_getvalue(&sql, i, 0);
		kore_log(LOG_NOTICE, "name: '%s'", name);
	}

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);
}