summaryrefslogtreecommitdiff
path: root/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils.c')
-rw-r--r--utils.c55
1 files changed, 43 insertions, 12 deletions
diff --git a/utils.c b/utils.c
index df3b55d..0740d4d 100644
--- a/utils.c
+++ b/utils.c
@@ -446,7 +446,8 @@ int deluser(snac *user)
446void verify_links(snac *user) 446void verify_links(snac *user)
447/* verifies a user's links */ 447/* verifies a user's links */
448{ 448{
449 const xs_dict *p = xs_dict_get(user->config, "metadata"); 449 xs *metadata = NULL;
450 const xs_dict *md = xs_dict_get(user->config, "metadata");
450 const char *k, *v; 451 const char *k, *v;
451 int changed = 0; 452 int changed = 0;
452 453
@@ -454,8 +455,30 @@ void verify_links(snac *user)
454 headers = xs_dict_append(headers, "accept", "text/html"); 455 headers = xs_dict_append(headers, "accept", "text/html");
455 headers = xs_dict_append(headers, "user-agent", USER_AGENT " (link verify)"); 456 headers = xs_dict_append(headers, "user-agent", USER_AGENT " (link verify)");
456 457
458 if (xs_type(md) == XSTYPE_DICT)
459 metadata = xs_dup(md);
460 else
461 if (xs_type(md) == XSTYPE_STRING) {
462 /* convert to dict for easier iteration */
463 metadata = xs_dict_new();
464 xs *l = xs_split(md, "\n");
465 const char *ll;
466
467 xs_list_foreach(l, ll) {
468 xs *kv = xs_split_n(ll, "=", 1);
469 const char *k = xs_list_get(kv, 0);
470 const char *v = xs_list_get(kv, 1);
471
472 if (k && v) {
473 xs *kk = xs_strip_i(xs_dup(k));
474 xs *vv = xs_strip_i(xs_dup(v));
475 metadata = xs_dict_set(metadata, kk, vv);
476 }
477 }
478 }
479
457 int c = 0; 480 int c = 0;
458 while (p && xs_dict_next(p, &k, &v, &c)) { 481 while (metadata && xs_dict_next(metadata, &k, &v, &c)) {
459 /* not an https link? skip */ 482 /* not an https link? skip */
460 if (!xs_startswith(v, "https:/" "/")) 483 if (!xs_startswith(v, "https:/" "/"))
461 continue; 484 continue;
@@ -571,9 +594,9 @@ void export_csv(snac *user)
571/* exports user data to current directory in a way that pleases Mastodon */ 594/* exports user data to current directory in a way that pleases Mastodon */
572{ 595{
573 FILE *f; 596 FILE *f;
574 const char *fn; 597 xs *fn = NULL;
575 598
576 fn = "bookmarks.csv"; 599 fn = xs_fmt("%s/export/bookmarks.csv", user->basedir);
577 if ((f = fopen(fn, "w")) != NULL) { 600 if ((f = fopen(fn, "w")) != NULL) {
578 snac_log(user, xs_fmt("Creating %s...", fn)); 601 snac_log(user, xs_fmt("Creating %s...", fn));
579 602
@@ -596,7 +619,8 @@ void export_csv(snac *user)
596 else 619 else
597 snac_log(user, xs_fmt("Cannot create file %s", fn)); 620 snac_log(user, xs_fmt("Cannot create file %s", fn));
598 621
599 fn = "blocked_accounts.csv"; 622 xs_free(fn);
623 fn = xs_fmt("%s/export/blocked_accounts.csv", user->basedir);
600 if ((f = fopen(fn, "w")) != NULL) { 624 if ((f = fopen(fn, "w")) != NULL) {
601 snac_log(user, xs_fmt("Creating %s...", fn)); 625 snac_log(user, xs_fmt("Creating %s...", fn));
602 626
@@ -615,7 +639,8 @@ void export_csv(snac *user)
615 else 639 else
616 snac_log(user, xs_fmt("Cannot create file %s", fn)); 640 snac_log(user, xs_fmt("Cannot create file %s", fn));
617 641
618 fn = "lists.csv"; 642 xs_free(fn);
643 fn = xs_fmt("%s/export/lists.csv", user->basedir);
619 if ((f = fopen(fn, "w")) != NULL) { 644 if ((f = fopen(fn, "w")) != NULL) {
620 snac_log(user, xs_fmt("Creating %s...", fn)); 645 snac_log(user, xs_fmt("Creating %s...", fn));
621 646
@@ -647,7 +672,8 @@ void export_csv(snac *user)
647 else 672 else
648 snac_log(user, xs_fmt("Cannot create file %s", fn)); 673 snac_log(user, xs_fmt("Cannot create file %s", fn));
649 674
650 fn = "following_accounts.csv"; 675 xs_free(fn);
676 fn = xs_fmt("%s/export/following_accounts.csv", user->basedir);
651 if ((f = fopen(fn, "w")) != NULL) { 677 if ((f = fopen(fn, "w")) != NULL) {
652 snac_log(user, xs_fmt("Creating %s...", fn)); 678 snac_log(user, xs_fmt("Creating %s...", fn));
653 679
@@ -670,10 +696,12 @@ void export_csv(snac *user)
670} 696}
671 697
672 698
673void import_blocked_accounts_csv(snac *user, const char *fn) 699void import_blocked_accounts_csv(snac *user, const char *ifn)
674/* imports a Mastodon CSV file of blocked accounts */ 700/* imports a Mastodon CSV file of blocked accounts */
675{ 701{
676 FILE *f; 702 FILE *f;
703 xs *l = xs_split(ifn, "/");
704 xs *fn = xs_fmt("%s/import/%s", user->basedir, xs_list_get(l, -1));
677 705
678 if ((f = fopen(fn, "r")) != NULL) { 706 if ((f = fopen(fn, "r")) != NULL) {
679 snac_log(user, xs_fmt("Importing from %s...", fn)); 707 snac_log(user, xs_fmt("Importing from %s...", fn));
@@ -705,10 +733,12 @@ void import_blocked_accounts_csv(snac *user, const char *fn)
705} 733}
706 734
707 735
708void import_following_accounts_csv(snac *user, const char *fn) 736void import_following_accounts_csv(snac *user, const char *ifn)
709/* imports a Mastodon CSV file of accounts to follow */ 737/* imports a Mastodon CSV file of accounts to follow */
710{ 738{
711 FILE *f; 739 FILE *f;
740 xs *l = xs_split(ifn, "/");
741 xs *fn = xs_fmt("%s/import/%s", user->basedir, xs_list_get(l, -1));
712 742
713 if ((f = fopen(fn, "r")) != NULL) { 743 if ((f = fopen(fn, "r")) != NULL) {
714 snac_log(user, xs_fmt("Importing from %s...", fn)); 744 snac_log(user, xs_fmt("Importing from %s...", fn));
@@ -764,10 +794,12 @@ void import_following_accounts_csv(snac *user, const char *fn)
764} 794}
765 795
766 796
767void import_list_csv(snac *user, const char *fn) 797void import_list_csv(snac *user, const char *ifn)
768/* imports a Mastodon CSV file list */ 798/* imports a Mastodon CSV file list */
769{ 799{
770 FILE *f; 800 FILE *f;
801 xs *l = xs_split(ifn, "/");
802 xs *fn = xs_fmt("%s/import/%s", user->basedir, xs_list_get(l, -1));
771 803
772 if ((f = fopen(fn, "r")) != NULL) { 804 if ((f = fopen(fn, "r")) != NULL) {
773 snac_log(user, xs_fmt("Importing from %s...", fn)); 805 snac_log(user, xs_fmt("Importing from %s...", fn));
@@ -825,7 +857,6 @@ void import_csv(snac *user)
825/* import CSV files from Mastodon */ 857/* import CSV files from Mastodon */
826{ 858{
827 FILE *f; 859 FILE *f;
828 const char *fn;
829 860
830 import_blocked_accounts_csv(user, "blocked_accounts.csv"); 861 import_blocked_accounts_csv(user, "blocked_accounts.csv");
831 862
@@ -833,7 +864,7 @@ void import_csv(snac *user)
833 864
834 import_list_csv(user, "lists.csv"); 865 import_list_csv(user, "lists.csv");
835 866
836 fn = "bookmarks.csv"; 867 xs *fn = xs_fmt("%s/import/bookmarks.csv", user->basedir);
837 if ((f = fopen(fn, "r")) != NULL) { 868 if ((f = fopen(fn, "r")) != NULL) {
838 snac_log(user, xs_fmt("Importing from %s...", fn)); 869 snac_log(user, xs_fmt("Importing from %s...", fn));
839 870