diff options
Diffstat (limited to 'src/init.c')
-rw-r--r-- | src/init.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/init.c b/src/init.c new file mode 100644 index 0000000..3898a1c --- /dev/null +++ b/src/init.c @@ -0,0 +1,90 @@ +#include <kore/kore.h> +#include <kore/pgsql.h> + +int init_db(void); + +static const char *database = "db"; + +/* Let kore handle the default option parsing. */ +void +kore_parent_configure(int argc, char **argv) +{ + init_db(); + kore_default_getopt(argc, argv); +} + +int +init_db(void) +{ + int err = 0; + const char *env = NULL; + struct kore_buf *pg_config_buf = kore_buf_alloc(0); + + // Parse env vars and build PostgreSQL config string + env = getenv("POSTGRES_HOST"); + if (env) + { + kore_buf_appendf(pg_config_buf, "host=%s ", env); + } + else + { + const char *host = "host=localhost "; + kore_buf_append(pg_config_buf, host, strlen(host)); + } + + env = getenv("POSTGRES_PORT"); + if (env) + { + kore_buf_appendf(pg_config_buf, "port=%s ", env); + } + else + { + const char *port = "port=5432 "; + kore_buf_append(pg_config_buf, port, strlen(port)); + } + + env = getenv("POSTGRES_USER"); + if (env) + { + kore_buf_appendf(pg_config_buf, "user=%s ", env); + } + else + { + const char *user = "user=clog "; + kore_buf_append(pg_config_buf, user, strlen(user)); + } + + env = getenv("POSTGRES_PASSWORD"); + if (env) + { + kore_buf_appendf(pg_config_buf, "password=%s ", env); + } + + env = getenv("POSTGRES_DBNAME"); + if (env) + { + kore_buf_appendf(pg_config_buf, "user=%s ", env); + } + else + { + const char *dbname = "dbname=clog "; + kore_buf_append(pg_config_buf, dbname, strlen(dbname)); + } + + // FIXME: Should be configurable. + const char *sslmode = "sslmode=disable "; + kore_buf_append(pg_config_buf, sslmode, strlen(sslmode)); + + // Register the database + const char *pg_config = kore_buf_stringify(pg_config_buf, NULL); + kore_log(LOG_INFO, "%s", pg_config); + err = kore_pgsql_register( + database, + pg_config + ); + + kore_buf_free(pg_config_buf); + + return err; +} + |