From 97cc35f577dbe390c5c6c841e41f6a82b32aff9d Mon Sep 17 00:00:00 2001 From: default Date: Wed, 18 Sep 2024 18:34:17 +0200 Subject: [PATCH] Started account migration code. --- activitypub.c | 27 +++++++++++++++++++++++++++ main.c | 4 ++++ snac.h | 2 ++ 3 files changed, 33 insertions(+) diff --git a/activitypub.c b/activitypub.c index c41dfbd..b15b883 100644 --- a/activitypub.c +++ b/activitypub.c @@ -1522,6 +1522,17 @@ xs_dict *msg_pong(snac *user, const char *rcpt, const char *object) } +xs_dict *msg_move(snac *user, const char *new_account) +/* creates a Move message (to move the user to new_account) */ +{ + xs_dict *msg = msg_base(user, "Move", "@dummy", user->actor, NULL, user->actor); + + msg = xs_dict_append(msg, "target", new_account); + + return msg; +} + + xs_dict *msg_question(snac *user, const char *content, xs_list *attach, const xs_list *opts, int multiple, int end_secs) /* creates a Question message */ @@ -2653,6 +2664,22 @@ int process_queue(void) } +/** account migration **/ + +int migrate_account(snac *user) +/* migrates this account to a new one (stored in the 'aka' user field) */ +{ + const char *new_account = xs_dict_get(user->config, "aka"); + + if (xs_type(new_account) != XSTYPE_STRING) { + snac_log(user, xs_fmt("Cannot migrate: 'aka' (new account) not defined")); + return 1; + } + + return 0; +} + + /** HTTP handlers */ int activitypub_get_handler(const xs_dict *req, const char *q_path, diff --git a/main.c b/main.c index 6392965..ed8f199 100644 --- a/main.c +++ b/main.c @@ -273,6 +273,10 @@ int main(int argc, char *argv[]) return 0; } + if (strcmp(cmd, "migrate") == 0) { /** **/ + return migrate_account(&snac); + } + if ((url = GET_ARGV()) == NULL) return usage(); diff --git a/snac.h b/snac.h index 57c11fe..0d93659 100644 --- a/snac.h +++ b/snac.h @@ -310,6 +310,7 @@ xs_dict *msg_actor(snac *snac); xs_dict *msg_update(snac *snac, const xs_dict *object); xs_dict *msg_ping(snac *user, const char *rcpt); xs_dict *msg_pong(snac *user, const char *rcpt, const char *object); +xs_dict *msg_move(snac *user, const char *new_account); xs_dict *msg_question(snac *user, const char *content, xs_list *attach, const xs_list *opts, int multiple, int end_secs); @@ -389,6 +390,7 @@ void mastoapi_purge(void); void verify_links(snac *user); void export_csv(snac *user); +int migrate_account(snac *user); void import_csv(snac *user); typedef enum {