فهرست منبع

Incomplete mastoapi apps are purged.

default 3 سال پیش
والد
کامیت
d0e08277da
1فایلهای تغییر یافته به همراه35 افزوده شده و 2 حذف شده
  1. 35 2
      mastoapi.c

+ 35 - 2
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));
+                }
+            }
+        }
+    }
 }