feat(landerctl): add option to use custom config file
parent
a0954e8d07
commit
cda61f5433
|
@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
* Better API for adding routes
|
* Better API for adding routes
|
||||||
* State machine HTTP loop
|
* State machine HTTP loop
|
||||||
* Auomatically support HEAD requests for all GET requests
|
* Auomatically support HEAD requests for all GET requests
|
||||||
|
* Landerctl
|
||||||
|
* `-c` flag to use custom config file (useful for testing)
|
||||||
|
|
||||||
## [0.2.0](https://git.rustybever.be/Chewing_Bever/lander/src/tag/0.2.0)
|
## [0.2.0](https://git.rustybever.be/Chewing_Bever/lander/src/tag/0.2.0)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
api_key = test
|
||||||
|
server_url = http://localhost:18080
|
||||||
|
ca_certs_bundle = /etc/ssl/certs/ca-certificates.crt
|
|
@ -10,25 +10,56 @@
|
||||||
#include "landerctl.h"
|
#include "landerctl.h"
|
||||||
|
|
||||||
const char *cfg_file_name = ".landerrc";
|
const char *cfg_file_name = ".landerrc";
|
||||||
const char *usage = "%s [-SPFsv] arg [key]\n";
|
const char *usage = "%s [-SPFsv] [-c CONFIG_FILE] arg [key]\n";
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
landerctl_ctx ctx = {0};
|
landerctl_ctx ctx = {0};
|
||||||
char *err_msg = NULL;
|
|
||||||
|
|
||||||
landerctl_cfg_err parse_res;
|
|
||||||
|
|
||||||
const char *home_dir = getenv("HOME");
|
const char *home_dir = getenv("HOME");
|
||||||
|
const char *cfg_path;
|
||||||
|
|
||||||
if (home_dir == NULL) {
|
if (home_dir == NULL) {
|
||||||
parse_res = landerctl_cfg_parse(&ctx.cfg, cfg_file_name);
|
cfg_path = cfg_file_name;
|
||||||
} else {
|
} else {
|
||||||
char cfg_path[strlen(home_dir) + strlen(cfg_file_name) + 2];
|
// This is a blatant memleak if a custom config file is set, but it really
|
||||||
sprintf(cfg_path, "%s/%s", home_dir, cfg_file_name);
|
// doesn't matter for a short-lived CLI tool
|
||||||
|
char *buf = malloc(strlen(home_dir) + strlen(cfg_file_name) + 2);
|
||||||
parse_res = landerctl_cfg_parse(&ctx.cfg, cfg_path);
|
sprintf(buf, "%s/%s", home_dir, cfg_file_name);
|
||||||
|
cfg_path = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
opterr = 0;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
while ((c = getopt(argc, argv, "SPFsvc:")) != -1) {
|
||||||
|
switch (c) {
|
||||||
|
case 'S':
|
||||||
|
ctx.mode = landerctl_mode_short;
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
ctx.mode = landerctl_mode_paste;
|
||||||
|
break;
|
||||||
|
case 'F':
|
||||||
|
ctx.mode = landerctl_mode_file;
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
ctx.secure = true;
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
ctx.verbose = true;
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
cfg_path = optarg;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
printf(usage, argv[0]);
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *err_msg = NULL;
|
||||||
|
landerctl_cfg_err parse_res = landerctl_cfg_parse(&ctx.cfg, cfg_path);
|
||||||
|
|
||||||
switch (parse_res) {
|
switch (parse_res) {
|
||||||
case landerctl_cfg_err_ok:
|
case landerctl_cfg_err_ok:
|
||||||
break;
|
break;
|
||||||
|
@ -48,33 +79,6 @@ int main(int argc, char **argv) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
opterr = 0;
|
|
||||||
|
|
||||||
int c;
|
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "SPFsv")) != -1) {
|
|
||||||
switch (c) {
|
|
||||||
case 'S':
|
|
||||||
ctx.mode = landerctl_mode_short;
|
|
||||||
break;
|
|
||||||
case 'P':
|
|
||||||
ctx.mode = landerctl_mode_paste;
|
|
||||||
break;
|
|
||||||
case 'F':
|
|
||||||
ctx.mode = landerctl_mode_file;
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
ctx.secure = true;
|
|
||||||
break;
|
|
||||||
case 'v':
|
|
||||||
ctx.verbose = true;
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
printf(usage, argv[0]);
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx.mode == landerctl_mode_none) {
|
if (ctx.mode == landerctl_mode_none) {
|
||||||
printf("No mode specified.\n\n");
|
printf("No mode specified.\n\n");
|
||||||
printf(usage, argv[0]);
|
printf(usage, argv[0]);
|
||||||
|
|
Loading…
Reference in New Issue