summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Wilde <psw@wildefedi01.wildenet.wilde.cloud>2024-01-28 20:55:43 +0000
committerPaul Wilde <psw@wildefedi01.wildenet.wilde.cloud>2024-01-28 20:55:43 +0000
commit253e627ee067b1f2504dd11c7934ce51b0a2f5b2 (patch)
tree9b682a0bbd378db42e30868d2967a0192f88e3dd
parentd86b96b5a3efec0d0b739a377db72dc9e257dd59 (diff)
make compatible with subway tooter app
-rw-r--r--mastoapi.c24
-rw-r--r--xs_formdata.h27
2 files changed, 50 insertions, 1 deletions
diff --git a/mastoapi.c b/mastoapi.c
index d8ec3b3..6ed3835 100644
--- a/mastoapi.c
+++ b/mastoapi.c
@@ -359,6 +359,12 @@ int oauth_post_handler(const xs_dict *req, const char *q_path,
}
}
+ /* no code?
+ I'm not sure of the impacts of this right now, but Subway Tooter does not
+ provide a code so one must be generated */
+ if (xs_is_null(code)){
+ code = random_str();
+ }
if (gtype && code && cid && csec && ruri) {
xs *app = app_get(cid);
@@ -1408,7 +1414,6 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
const char *type = xs_dict_get(msg, "type");
if (!xs_match(type, "Note|Question|Page|Article"))
continue;
-
const char *from = NULL;
if (strcmp(type, "Page") == 0)
from = xs_dict_get(msg, "audience");
@@ -1622,6 +1627,15 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
status = 200;
}
else
+ if (strcmp(cmd, "/v2/filters") == 0) { /** **/
+ /* snac will never have filters
+ * but still, without a v2 endpoint a short delay is introduced
+ * in some apps */
+ *body = xs_dup("[]");
+ *ctype = "application/json";
+ status = 200;
+ }
+ else
if (strcmp(cmd, "/v1/favourites") == 0) { /** **/
/* snac will never support a list of favourites */
*body = xs_dup("[]");
@@ -1990,6 +2004,14 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path,
if (!xs_is_null(payload))
args = xs_json_loads(payload);
}
+ else if (i_ctype && xs_startswith(i_ctype, "application/x-www-form-urlencoded"))
+ {
+ // Some apps send form data instead of json so we should cater for those
+ if (!xs_is_null(payload)) {
+ xs *upl = xs_url_dec(payload);
+ args = xs_url_vars(upl);
+ }
+ }
else
args = xs_dup(xs_dict_get(req, "p_vars"));
diff --git a/xs_formdata.h b/xs_formdata.h
new file mode 100644
index 0000000..213bd3e
--- /dev/null
+++ b/xs_formdata.h
@@ -0,0 +1,27 @@
+/* copyright (c) 2022 - 2024 grunfink et al. / MIT license */
+#include "xs.h"
+
+#ifndef _XS_FORMDATA_H
+
+#define _XS_FORMDATA_H
+
+xs_val *xs_formdata_loads(const xs_str *formdata);
+
+#ifdef XS_IMPLEMENTATION
+
+/** IMPLEMENTATION **/
+
+xs_val *xs_formdata_loads(const xs_str *formdata)
+/* loads a string in formdata format and converts to a multiple data */
+{
+ xs_val *v = NULL;
+ xs_list *args = xs_split(formdata, "&");
+ int i = 0;
+ while (){}
+ printf("args: %s\r\n", args); fflush(stdout);
+ printf("data: %s\r\n", formdata); fflush(stdout);
+}
+
+#endif /* XS_IMPLEMENTATION */
+
+#endif /* _XS_FORMDATA_H */