Incomplete mastoapi apps are purged.

This commit is contained in:
default 2023-04-28 08:58:33 +02:00
parent 765f63772f
commit d0e08277da

View file

@ -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));
}
}
}
}
}