mirror of
https://github.com/CPunch/Laika.git
synced 2025-10-09 01:10:14 +00:00
Added config inis, key refactoring
- CNC can accept multiple different auth keys now - laikaK_checkAuth() added - shell defaults to using shell.ini config file - CNC doesn't require a config file however it's highly recommended
This commit is contained in:
@@ -2,20 +2,62 @@
|
||||
|
||||
#include "sclient.h"
|
||||
#include "sterm.h"
|
||||
#include "ini.h"
|
||||
|
||||
#define STRING(x) #x
|
||||
#define MACROLITSTR(x) STRING(x)
|
||||
|
||||
const char *LOGO = "\n\t██╗ █████╗ ██╗██╗ ██╗ █████╗\n\t██║ ██╔══██╗██║██║ ██╔╝██╔══██╗\n\t██║ ███████║██║█████╔╝ ███████║\n\t██║ ██╔══██║██║██╔═██╗ ██╔══██║\n\t███████╗██║ ██║██║██║ ██╗██║ ██║\n\t╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═╝";
|
||||
|
||||
static int iniHandler(void* user, const char* section, const char* name, const char* value) {
|
||||
tShell_client *client = (tShell_client*)user;
|
||||
|
||||
#define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0
|
||||
if (MATCH("auth", "public-key")) {
|
||||
shellC_loadKeys(client, value, NULL);
|
||||
PRINTINFO("Auth pubkey: %s\n", value);
|
||||
} else if (MATCH("auth", "private-key")){
|
||||
shellC_loadKeys(client, NULL, value);
|
||||
} else {
|
||||
return 0; /* unknown section/name, error */
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool loadConfig(tShell_client *client, char *config) {
|
||||
int iniRes;
|
||||
|
||||
printf("Loading config file '%s'...\n", config);
|
||||
if ((iniRes = ini_parse(config, iniHandler, (void*)client)) < 0) {
|
||||
switch (iniRes) {
|
||||
case -1: printf("Couldn't load config file '%s'!\n", config); break;
|
||||
case -2: printf("Memory allocation error :/\n"); break;
|
||||
default:
|
||||
printf("Parser error on line %d in config file '%s'!\n", iniRes, config);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argv, char *argc[]) {
|
||||
tShell_client client;
|
||||
char *configFile = "shell.ini";
|
||||
bool printPrompt = false;
|
||||
|
||||
shellT_printf("%s%s\n%s", shellT_getForeColor(TERM_BRIGHT_RED), LOGO, shellT_getForeColor(TERM_BRIGHT_WHITE));
|
||||
shellT_printf("\t made with %s<3%s by CPunch - %s\n\nType 'help' for a list of commands\n\n", shellT_getForeColor(TERM_BRIGHT_RED), shellT_getForeColor(TERM_BRIGHT_WHITE), "v" MACROLITSTR(LAIKA_VERSION_MAJOR) "." MACROLITSTR(LAIKA_VERSION_MINOR));
|
||||
|
||||
shellC_init(&client);
|
||||
|
||||
/* load config file */
|
||||
if (argv > 2)
|
||||
configFile = argc[1];
|
||||
|
||||
if (!loadConfig(&client, configFile))
|
||||
return 1;
|
||||
|
||||
shellC_connectToCNC(&client, "127.0.0.1", "13337");
|
||||
|
||||
shellT_conioTerm();
|
||||
|
@@ -167,7 +167,8 @@ void shellC_init(tShell_client *client) {
|
||||
LAIKA_ERROR("LibSodium failed to initialize!\n");
|
||||
}
|
||||
|
||||
if (!laikaK_loadKeys(client->pub, client->priv, LAIKA_PUBKEY, LAIKA_PRIVKEY)) {
|
||||
/* by default use random key */
|
||||
if (!laikaK_genKeys(client->pub, client->priv)) {
|
||||
shellC_cleanup(client);
|
||||
LAIKA_ERROR("Failed to init keypair!\n");
|
||||
}
|
||||
@@ -251,6 +252,13 @@ bool shellC_poll(tShell_client *client, int timeout) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void shellC_loadKeys(tShell_client *client, const char *pub, const char *priv) {
|
||||
if (!laikaK_loadKeys(pub ? client->pub : NULL, priv ? client->priv : NULL, pub, priv)) {
|
||||
shellC_cleanup(client);
|
||||
LAIKA_ERROR("Failed to init keypair!\n");
|
||||
}
|
||||
}
|
||||
|
||||
tShell_peer *shellC_getPeerByPub(tShell_client *client, uint8_t *pub, int *id) {
|
||||
tShell_hashMapElem *elem = (tShell_hashMapElem*)hashmap_get(client->peers, &(tShell_hashMapElem){.pub = pub});
|
||||
|
||||
|
Reference in New Issue
Block a user