snac.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /* snac - A simple, minimalistic ActivityPub instance */
  2. /* copyright (c) 2022 grunfink - MIT license */
  3. #define XS_IMPLEMENTATION
  4. #include "xs.h"
  5. #include "xs_io.h"
  6. #include "xs_encdec.h"
  7. #include "xs_json.h"
  8. #include "xs_curl.h"
  9. #include "xs_openssl.h"
  10. #include "xs_socket.h"
  11. #include "xs_httpd.h"
  12. #include "snac.h"
  13. d_char *srv_basedir = NULL;
  14. d_char *srv_config = NULL;
  15. d_char *srv_baseurl = NULL;
  16. int dbglevel = 0;
  17. d_char *xs_time(char *fmt, int local)
  18. /* returns a d_char with a formated time */
  19. {
  20. time_t t = time(NULL);
  21. struct tm tm;
  22. char tmp[64];
  23. if (local)
  24. localtime_r(&t, &tm);
  25. else
  26. gmtime_r(&t, &tm);
  27. strftime(tmp, sizeof(tmp), fmt, &tm);
  28. return xs_str_new(tmp);
  29. }
  30. void srv_log(d_char *str)
  31. /* logs a message */
  32. {
  33. xs *tm = xs_local_time("%H:%M:%S");
  34. xs *msg = str;
  35. fprintf(stderr, "%s %s\n", tm, msg);
  36. }
  37. int srv_open(char *basedir)
  38. /* opens a server */
  39. {
  40. int ret = 0;
  41. xs *cfg_file = NULL;
  42. FILE *f;
  43. srv_basedir = xs_str_new(basedir);
  44. cfg_file = xs_fmt("%s/server.json", basedir);
  45. if ((f = fopen(cfg_file, "r")) == NULL)
  46. srv_log(xs_fmt("cannot open %s", cfg_file));
  47. else {
  48. xs *cfg_data;
  49. /* read full config file */
  50. cfg_data = xs_readall(f);
  51. /* parse */
  52. srv_config = xs_json_loads(cfg_data);
  53. if (srv_config == NULL)
  54. srv_log(xs_fmt("cannot parse %s", cfg_file));
  55. else {
  56. char *host;
  57. char *prefix;
  58. char *dbglvl;
  59. host = xs_dict_get(srv_config, "host");
  60. prefix = xs_dict_get(srv_config, "prefix");
  61. dbglvl = xs_dict_get(srv_config, "dbglevel");
  62. if (host == NULL || prefix == NULL)
  63. srv_log(xs_str_new("cannot get server data"));
  64. else {
  65. srv_baseurl = xs_fmt("https://%s%s", host, prefix);
  66. dbglevel = (int) xs_number_get(dbglvl);
  67. if ((dbglvl = getenv("DEBUG")) != NULL) {
  68. dbglevel = atoi(dbglvl);
  69. srv_log(xs_fmt("DEBUG level set to %d from environment", dbglevel));
  70. }
  71. ret = 1;
  72. }
  73. }
  74. }
  75. return ret;
  76. }
  77. int main(int argc, char *argv[])
  78. {
  79. srv_open("/home/angel/lib/snac/comam.es");
  80. return 0;
  81. }