main.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /* snac - A simple, minimalistic ActivityPub instance */
  2. /* copyright (c) 2022 grunfink - MIT license */
  3. #include "xs.h"
  4. #include "xs_encdec.h"
  5. #include "xs_json.h"
  6. #include "snac.h"
  7. int usage(void)
  8. {
  9. printf("usage:\n");
  10. return 1;
  11. }
  12. int main(int argc, char *argv[])
  13. {
  14. char *cmd;
  15. char *basedir;
  16. char *user;
  17. char *url;
  18. int argi = 1;
  19. argc--;
  20. if (argc < argi)
  21. return usage();
  22. cmd = argv[argi++];
  23. if (strcmp(cmd, "init") == 0) {
  24. return 0;
  25. }
  26. if (argc < argi)
  27. return usage();
  28. basedir = argv[argi++];
  29. if (!srv_open(basedir)) {
  30. srv_log(xs_fmt("error opening database at %s", basedir));
  31. return 1;
  32. }
  33. if (strcmp(cmd, "httpd") == 0) {
  34. httpd();
  35. return 0;
  36. }
  37. if (argc < argi)
  38. return usage();
  39. user = argv[argi++];
  40. if (strcmp(cmd, "webfinger") == 0) {
  41. xs *actor = NULL;
  42. xs *uid = NULL;
  43. int status;
  44. webfinger_request(user, &status, &actor, &uid);
  45. printf("status: %d\n", status);
  46. if (actor != NULL)
  47. printf("actor: %s\n", actor);
  48. if (uid != NULL)
  49. printf("uid: %s\n", uid);
  50. return 0;
  51. }
  52. if (argc < argi)
  53. return usage();
  54. url = argv[argi++];
  55. if (strcmp(cmd, "request") == 0) {
  56. }
  57. return 0;
  58. }
  59. #if 0
  60. {
  61. snac snac;
  62. printf("%s\n", tid(0));
  63. srv_open("/home/angel/lib/snac/comam.es/");
  64. user_open(&snac, "mike");
  65. xs *headers = xs_dict_new();
  66. int status;
  67. d_char *payload;
  68. int p_size;
  69. xs *response;
  70. response = http_signed_request(&snac, "GET", "https://mastodon.social/users/VictorMoral",
  71. headers, NULL, 0, &status, &payload, &p_size);
  72. {
  73. xs *j1 = xs_json_dumps_pp(response, 4);
  74. printf("response:\n%s\n", j1);
  75. printf("payload:\n%s\n", payload);
  76. }
  77. {
  78. xs *list = queue(&snac);
  79. char *p, *fn;
  80. p = list;
  81. while (xs_list_iter(&p, &fn)) {
  82. xs *obj;
  83. obj = dequeue(&snac, fn);
  84. printf("%s\n", xs_dict_get(obj, "actor"));
  85. }
  86. }
  87. #if 0
  88. {
  89. xs *list = follower_list(&snac);
  90. char *p, *obj;
  91. p = list;
  92. while (xs_list_iter(&p, &obj)) {
  93. char *actor = xs_dict_get(obj, "actor");
  94. printf("%s\n", actor);
  95. }
  96. }
  97. {
  98. xs *list = timeline_list(&snac);
  99. char *p, *fn;
  100. p = list;
  101. while (xs_list_iter(&p, &fn)) {
  102. xs *tle = timeline_get(&snac, fn);
  103. printf("%s\n", xs_dict_get(tle, "id"));
  104. }
  105. }
  106. {
  107. xs *list = user_list();
  108. char *p, *uid;
  109. p = list;
  110. while (xs_list_iter(&p, &uid)) {
  111. if (user_open(&snac, uid)) {
  112. printf("%s (%s)\n", uid, xs_dict_get(snac.config, "name"));
  113. user_free(&snac);
  114. }
  115. }
  116. }
  117. #endif
  118. return 0;
  119. }
  120. #endif