#pragma once #include #include struct MHD_PostProcessor; #define CLIENT_NAME_MAX 32 #define CLIENT_SECRET_LEN 33 struct App { const char* dbname; char session_secret[CLIENT_SECRET_LEN]; const char *admin_user; const char *admin_pass; }; void prepare_database(struct App *app); struct Server { struct App *app; char *page; }; int web_begin(struct Server *server, int port, const char *admin_user, const char *admin_pass); int web_join(struct Server *server); struct PostCollector { char *data; size_t size; size_t capacity; }; struct FormData { char name[CLIENT_NAME_MAX]; int name_set; int64_t client_id; // For delete operations int client_id_set; char username[32]; int username_set; char password[64]; int password_set; }; struct Request { struct Server *server; struct PostCollector pp; struct MHD_PostProcessor *post_proc; // NULL when using PostCollector struct FormData form; const char *host; }; struct CreateClientResult { int64_t id; char* name; char secret[CLIENT_SECRET_LEN]; }; int create_client(struct Request *req, char *name, struct CreateClientResult *result); int delete_client(struct Request *req, int64_t client_id); struct ListClientResultClient { int64_t id; char name[CLIENT_NAME_MAX]; char secret[CLIENT_SECRET_LEN]; }; struct ListClientResult { uint16_t clients_len; // Right now this has to be exactly 16 elements long, but it could be longer in the future struct ListClientResultClient clients[]; }; int list_clients(struct Request *req, struct ListClientResult *result); #define BACKUP_STATUS_MAX 16 #define BACKUP_DATETIME_MAX 32 #define MAX_BACKUPS_DISPLAY 50 struct BackupRecord { int64_t id; char status[BACKUP_STATUS_MAX]; char started[BACKUP_DATETIME_MAX]; char completed[BACKUP_DATETIME_MAX]; }; struct GetClientResult { int found; int64_t id; char name[CLIENT_NAME_MAX]; char secret[CLIENT_SECRET_LEN]; uint16_t backups_len; struct BackupRecord backups[]; }; int get_client_with_backups(struct Request *req, int64_t client_id, struct GetClientResult *result);