snac2

Fork of https://codeberg.org/grunfink/snac2
git clone https://git.inz.fi/snac2
Log | Files | Refs | README | LICENSE

commit 795790de08c35571694784f8dac634aa34b4d14f
parent 7e0ac64b856d6efa93cdbdd2359ee500863c6ef8
Author: Louis Brauer <louis@openbooking.ch>
Date:   Fri, 31 May 2024 01:22:15 +0200

Fix login with IceCubes and Mastodon on iOS

Diffstat:
Mmastoapi.c | 18++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/mastoapi.c b/mastoapi.c @@ -339,11 +339,7 @@ int oauth_post_handler(const xs_dict *req, const char *q_path, const char *cid = xs_dict_get(args, "client_id"); const char *csec = xs_dict_get(args, "client_secret"); const char *ruri = xs_dict_get(args, "redirect_uri"); - /* FIXME: this 'scope' parameter is mandatory for the official Mastodon API, - but if it's enabled, it makes it crash after some more steps, which - is FAR WORSE */ - const char *scope = NULL; -// scope = xs_dict_get(args, "scope"); + const char *scope = xs_dict_get(args, "scope"); /* no client_secret? check if it's inside an authorization header (AndStatus does it this way) */ @@ -1165,8 +1161,10 @@ void credentials_get(char **body, char **ctype, int *status, snac snac) acct = xs_dict_append(acct, "url", snac.actor); acct = xs_dict_append(acct, "locked", xs_stock(XSTYPE_FALSE)); acct = xs_dict_append(acct, "bot", xs_dict_get(snac.config, "bot")); + acct = xs_dict_append(acct, "emojis", xs_list_new()); - xs *src = xs_json_loads("{\"privacy\":\"public\"," + xs *src = xs_json_loads("{\"privacy\":\"public\", \"language\":\"en\"," + "\"follow_requests_count\": 0," "\"sensitive\":false,\"fields\":[],\"note\":\"\"}"); /* some apps take the note from the source object */ src = xs_dict_set(src, "note", xs_dict_get(snac.config, "bio")); @@ -2379,6 +2377,14 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path, const char *ruri = xs_dict_get(args, "redirect_uris"); const char *scope = xs_dict_get(args, "scope"); + /* Ice Cubes sends these values as query parameters, so try these */ + if (name == NULL && ruri == NULL && scope == NULL) { + args = xs_dup(xs_dict_get(req, "q_vars")); + name = xs_dict_get(args, "client_name"); + ruri = xs_dict_get(args, "redirect_uris"); + scope = xs_dict_get(args, "scope"); + } + if (xs_type(ruri) == XSTYPE_LIST) ruri = xs_dict_get(ruri, 0);