diff --git a/data.c b/data.c index 4e5696e..bc85171 100644 --- a/data.c +++ b/data.c @@ -232,6 +232,26 @@ d_char *user_list(void) } +int user_open_by_md5(snac *snac, const char *md5) +/* iterates all users searching by md5 */ +{ + xs *ulist = user_list(); + xs_list *p = ulist; + xs_str *v; + + while (xs_list_iter(&p, &v)) { + user_open(snac, v); + + if (strcmp(snac->md5, md5) == 0) + return 1; + + user_free(snac); + } + + return 0; +} + + double mtime_nl(const char *fn, int *n_link) /* returns the mtime and number of links of a file or directory, or 0.0 */ { diff --git a/mastoapi.c b/mastoapi.c index d1ae463..7860046 100644 --- a/mastoapi.c +++ b/mastoapi.c @@ -722,12 +722,8 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, xs *out = NULL; xs *actor = NULL; - /* if uid it's the md5 of this actor, transform into a real uid */ - if (strcmp(uid, snac1.md5) == 0) - uid = xs_dict_get(snac1.config, "uid"); - /* is it a local user? */ - if (user_open(&snac2, uid)) { + if (user_open(&snac2, uid) || user_open_by_md5(&snac2, uid)) { if (opt == NULL) { /* account information */ actor = msg_actor(&snac2); diff --git a/snac.h b/snac.h index 2ab4402..c46b85c 100644 --- a/snac.h +++ b/snac.h @@ -42,6 +42,7 @@ typedef struct _snac { int user_open(snac *snac, const char *uid); void user_free(snac *snac); d_char *user_list(void); +int user_open_by_md5(snac *snac, const char *md5); void snac_debug(snac *snac, int level, d_char *str); #define snac_log(snac, str) snac_debug(snac, 0, str)