Config(3) Library Functions Manual Config(3)

ConfigParse the Telodendria configuration into a structure.

#include <Config.h>

Config *
ConfigParse(HashMap *);

void
ConfigFree(Config *);

int
ConfigExists(Db *);

int
ConfigCreateDefault(Db *);

Config *
ConfigLock(Db *);

int
ConfigUnlock(Config *);

typedef  enum ConfigFlag
{
    CONFIG_FEDERATION = (1 << 0),
    CONFIG_REGISTRATION = (1 << 1),
    CONFIG_LOG_COLOR = (1 << 2),
    CONFIG_LOG_FILE = (1 << 3),
    CONFIG_LOG_STDOUT = (1 << 4),
    CONFIG_LOG_SYSLOG = (1 << 5)
} ConfigFlag;

Bit flags that can be set in the flags field of the configuration structure.

typedef  struct Config
{
    /*
     * These are used internally and should not be touched outside of
     * the functions defined in this API.
     */
    Db *db;
    DbRef *ref;

    /*
     * Whether or not the parsing was successful. If this boolean
     * value is 0, then read the error message and assume that all
     * other fields are invalid.
     */
    int ok;
    char *err;

    char *serverName;
    char *baseUrl;
    char *identityServer;

    char *uid;
    char *gid;

    unsigned int flags;

    size_t maxCache;

    char *logTimestamp;
    int logLevel;

    /*
     * An array of HttpServerConfig structures. Consult the HttpServer
     * API.
     */
    Array *servers;
} Config;

The configuration structure is not opaque like many of the other structures present in the other public APIs. This is intentional; defining functions for all of the fields would simply add too much unnecessary overhead.

Config validates and maintains the Telodendria server's configuration data. This API builds on the database and JSON APIs to add parsing specific to Telodendria. It converts a configuration in its raw form into a structure that is much easier and more convenient to work with.

Since very early on in Telodendria's development, the configuration file has existed inside of the database. This API also offers convenience methods for extracting the configuration out of the database.

This documentation does not describe the actual format of the configuration file; for that, consult telodendria-config(7).

Parse a JSON object, extracting the necessary values, validating them, and adding them to the configuration structure for use by the caller. All values are copied, so the JSON object can be safely freed after this function returns.

If an error occurs, this function will not return NULL, but it will set the ok flag to 0. The caller should always check the ok flag, and if there is an error, it should display the error to the user.

Free all the values inside of the given configuration structure, as well as the structure itself, such that it is completely invalid when this function returns.

Check whether or not the configuration exists in the database, returning a boolean value to indicate the status.

Create a sane default configuration in the specified database. This function returns a boolean value indicating whether or not it was successful.

Lock the configuration in the database using (), and then parse the object using (). The return value of this function is the same as ConfigParse().

Unlock the specified configuration, returning it back to the database. This function also invalidates all memory associated with this config object, so values that should be retained after this is called should be duplicated as necessary.

Db(3), Json(3), HttpServer(3), Log(3)

April 28, 2023 Telodendria