summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordefault <nobody@localhost>2023-04-28 08:58:33 +0200
committerdefault <nobody@localhost>2023-04-28 08:58:33 +0200
commitd0e08277dad5d9a4d3f148653a01b0e72e036730 (patch)
treeeee99e9dd3961c265c445924584285cd18840ffc
parent765f63772f5a63c6c7c97c06b265f5bba06966df (diff)
Incomplete mastoapi apps are purged.
-rw-r--r--mastoapi.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/mastoapi.c b/mastoapi.c
index b53c73c..001c0bc 100644
--- a/mastoapi.c
+++ b/mastoapi.c
@@ -9,6 +9,7 @@
#include "xs_json.h"
#include "xs_io.h"
#include "xs_time.h"
+#include "xs_glob.h"
#include "snac.h"
@@ -59,13 +60,19 @@ int app_add(const char *id, const xs_dict *app)
}
+xs_str *_app_fn(const char *id)
+{
+ return xs_fmt("%s/app/%s.json", srv_basedir, id);
+}
+
+
xs_dict *app_get(const char *id)
/* gets an app */
{
if (!xs_is_hex(id))
return NULL;
- xs *fn = xs_fmt("%s/app/%s.json", srv_basedir, id);
+ xs *fn = _app_fn(id);
xs_dict *app = NULL;
FILE *f;
@@ -86,7 +93,7 @@ int app_del(const char *id)
if (!xs_is_hex(id))
return -1;
- xs *fn = xs_fmt("%s/app/%s.json", srv_basedir, id);
+ xs *fn = _app_fn(id);
return unlink(fn);
}
@@ -1963,6 +1970,32 @@ int mastoapi_put_handler(const xs_dict *req, const char *q_path,
void mastoapi_purge(void)
{
+ xs *spec = xs_fmt("%s/app/" "*.json", srv_basedir);
+ xs *files = xs_glob(spec, 1, 0);
+ xs_list *p = files;
+ xs_str *v;
+
+ time_t mt = time(NULL) - 3600;
+
+ while (xs_list_iter(&p, &v)) {
+ xs *cid = xs_replace(v, ".json", "");
+ xs *fn = _app_fn(cid);
+
+ if (mtime(fn) < mt) {
+ /* get the app */
+ xs *app = app_get(cid);
+
+ if (app) {
+ /* old apps with no uid are incomplete cruft */
+ const char *uid = xs_dict_get(app, "uid");
+
+ if (xs_is_null(uid) || *uid == '\0') {
+ unlink(fn);
+ srv_debug(2, xs_fmt("purged %s", fn));
+ }
+ }
+ }
+ }
}