isundil 1 éve
szülő
commit
ff6fcb2fb0

+ 9 - 4
router/api.js

@@ -28,9 +28,14 @@ module.exports = { register: app => {
         app.routerUtils.onApiRequest(req, res);
         if (!req.post?.linkIds?.length)
             return app.routerUtils.httpResponse(res, 400, "Missing argument");
-        for (let i of JSON.parse(req.post.linkIds)) {
-            if (await app.databaseHelper.findOne(AccessModel, { type: ACCESS_TYPE.link, typeData: i }))
-                Security.addLinkToSession(req, i);
+        try {
+            for (let i of JSON.parse(req.post.linkIds)) {
+                if (await app.databaseHelper.findOne(AccessModel, { type: ACCESS_TYPE.link, typeData: i }))
+                    Security.addLinkToSession(req, i);
+            }
+        }
+        catch (err) {
+            return app.routerUtils.onBadRequest(res);
         }
         app.routerUtils.jsonResponse(res, req.sessionObj.accessList);
     });
@@ -145,11 +150,11 @@ module.exports = { register: app => {
         if (!data)
             return app.routerUtils.onPageNotFound(res);
         const fileName = Path.basename(data.path);
-        res.setHeader("Content-Disposition", `attachment; filename="${fileName}"`);
         res.setHeader("Cache-Control", "private, max-age=2630000"); // 1 month cache
         if (data.accessType === ACCESS_GRANT.readNoMeta || req.body?.trim !== undefined) {
             console.log("remove meta");//-> trim metadata
         }
+        res.setHeader("Content-Disposition", `attachment; filename="${fileName}"`);
         res.setHeader("Content-Type", mime.lookup(data.path));
         res.setHeader("Content-Length", fs.statSync(data.path)?.size || undefined);
         fs.createReadStream(data.path).pipe(res);

+ 82 - 0
static/public/js/access.js

@@ -0,0 +1,82 @@
+
+$(() => {
+    class AccessManager {
+        #storedAccess = new Set();
+
+        constructor() {
+            this.#storedAccess.clear();
+            let storedAccess = [];
+            try {
+                storedAccess = (JSON.parse(localStorage?.getItem("accessLinks") || "[]") || []);
+            } catch (err) {
+                console.error(err);
+            }
+            storedAccess.forEach(i => this.#storedAccess.add(i));
+        }
+
+        #UpdateStorage() {
+            localStorage?.setItem("accessLinks", JSON.stringify(Array.from(this.#storedAccess)));
+        }
+
+        Logout(code) {
+            if (!this.#storedAccess.delete(code))
+                return;
+            this.#UpdateStorage();
+            return LoadingTasks.push(() => {
+                return new Promise(ok => {
+                    $.ajax({
+                        url: `/api/access/${code}`,
+                        type: "DELETE",
+                        success: data => {
+                            window.ReloadAccessList(data);
+                            ok();
+                        },
+                        error: err => ok(false),
+                    });
+                });
+            });
+        }
+
+        LinkLogin(linkList) {
+            return new Promise(ok => {
+                $.ajax({
+                    url: "/api/access/link",
+                    type: "POST",
+                    data: { linkIds: JSON.stringify(Array.from(linkList)) },
+                    success: data => {
+                        for (let i in data)
+                            this.#storedAccess.add(data[i].linkId);
+                        this.#UpdateStorage();
+                        window.ReloadAccessList(data);
+                        ok(data);
+                    },
+                    error: err => ok(false),
+                });
+            });
+        }
+
+        async RebuildAccess() {
+            if (this.#storedAccess.size) {
+                return LoadingTasks.push(() => {
+                    return this.LinkLogin(this.#storedAccess);
+                });
+            } else {
+                return LoadingTasks.push(() => {
+                    return new Promise(ok => {
+                        $.get("/api/access/list", data => {
+                            for (let i in data)
+                                this.#storedAccess.add(data[i].linkId);
+                            this.#UpdateStorage();
+                            window.ReloadAccessList(data);
+                            ok();
+                        });
+                    });
+                });
+            }
+        }
+
+    }
+
+    window.AccessManager = new AccessManager();
+});
+

+ 1 - 19
static/public/js/common.js

@@ -1,23 +1,5 @@
 
 $(() => {
-    function RebuildAccess() {
-        let storedAccessLinks = JSON.parse(localStorage?.getItem("accessLinks") || "[]") || [];
-        if (storedAccessLinks && storedAccessLinks.length) {
-            LoadingTasks.push(() => {
-                return window.linkLogin(storedAccessLinks);
-            });
-        } else {
-            LoadingTasks.push(() => {
-                return new Promise(ok => {
-                    $.get("/api/access/list", data => {
-                        window.ReloadAccessList(data);
-                        ok();
-                    });
-                });
-            });
-        }
-    }
-
     let loadingMediaList = false;
     function ReadMediaList() {
         if (loadingMediaList)
@@ -77,7 +59,7 @@ $(() => {
             onScrollBottom.fnc();
     });
 
-    RebuildAccess();
+    AccessManager.RebuildAccess();
     loadHash(document.location?.hash?.substr(1));
     ReadMediaList();
 });

+ 4 - 38
static/public/js/uiAccess.js

@@ -32,53 +32,19 @@ loginUserPass.querySelector("button").addEventListener("click", () => {
     console.log([user, pass]);
 });
 
-window.linkLogin = function(linkList) {
-    return new Promise(ok => {
-        $.ajax({
-            url: "/api/access/link",
-            type: "POST",
-            data: { linkIds: JSON.stringify(linkList) },
-            success: data => {
-                window.ReloadAccessList(data);
-                ok(data);
-            },
-            error: err => ok(false),
-        });
-    });
-}
-
 loginCode.querySelector("button").addEventListener("click", () => {
     let code = loginCode.querySelector("input").value;
     if (!code)
         return;
     LoadingTasks.push(async () => {
-        data = await linkLogin([code]);
-        for (let i in data)
-            if (data[i].linkId === code) {
-                let storedAccessLinks = JSON.parse(localStorage?.getItem("accessLinks") || "[]") || [];
-                localStorage?.setItem("accessLinks", JSON.stringify([].concat(storedAccessLinks, code)));
-            }
+        await AccessManager.LinkLogin(new Set([code]));
         closeLoginPopin();
     });
 });
 
-function logout(accessId, linkId) {
-    LoadingTasks.push(() => {
-        let storedAccessLinks = JSON.parse(localStorage?.getItem("accessLinks") || "[]") || [];
-        localStorage?.setItem("accessLinks", JSON.stringify(storedAccessLinks.filter(x => x !== linkId)));
-        return new Promise(ok => {
-            $.ajax({
-                url: `/api/access/${accessId}`,
-                type: "DELETE",
-                success: data => {
-                    window.ReloadAccessList(data);
-                    closeLoginPopin();
-                    ok();
-                },
-                error: err => ok(false),
-            });
-        });
-    });
+async function logout(accessId, linkId) {
+    await AccessManager.Logout(linkId);
+    closeLoginPopin();
 }
 
 window.ReloadAccessList = function(accessList) {

+ 1 - 0
templates/_footer.js

@@ -7,6 +7,7 @@ module.exports = `
 <script src="/public/js/BsMultiSelect.min.js"></script>
 <script src="/public/leaflet/leaflet.js"></script>
 <script src="/public/js/taskQueue.js"></script>
+<script src="/public/js/access.js"></script>
 <script src="/public/js/medias.js"></script>
 <script src="/public/js/filters.js"></script>
 <script src="/public/js/uiCommon.js"></script>