summaryrefslogtreecommitdiff
path: root/src/config.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.h')
-rw-r--r--src/config.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/config.h b/src/config.h
new file mode 100644
index 0000000..0d7d827
--- /dev/null
+++ b/src/config.h
@@ -0,0 +1,51 @@
+//
+// Created by Anshul Gupta on 4/6/25.
+//
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include <stdlib.h>
+#include <sys/types.h>
+
+#define GH_DEFAULT_ENDPOINT "https://api.github.com/graphql"
+#define GH_DEFAULT_USER_AGENT "github_mirror/0.1"
+
+extern const char *config_locations[];
+
+struct config {
+ /// The content of the config file
+ char *contents;
+ size_t contents_len;
+
+ const char *endpoint;
+ const char *token;
+ const char *user_agent;
+
+ /// The owner of the repositories
+ const char *owner;
+
+ /// The filepath to the git mirrors
+ /// Default: /srv/git
+ const char *git_base;
+ /// User to give ownership of the git mirrors
+ uid_t git_owner;
+ /// Group to give ownership of the git mirrors
+ gid_t git_group;
+};
+
+/**
+ * Read the INI config file at the given path.
+ * Will print to stderr errors if the file cannot be read.
+ * @param path Path to the config file
+ * @return A pointer to the config struct, or NULL on error
+ */
+struct config *config_read(const char *path);
+
+/**
+ * Free the config struct
+ * @param config The config struct to free
+ */
+void config_free(struct config *config);
+
+#endif // CONFIG_H