From 3218e1f491fba4f43450dbd9258dabf783833ed2 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sun, 19 Jan 2025 01:23:14 +0800 Subject: [PATCH] feat: udpates --- access-guard-ts/main.ts | 80 ++++++++++++++++++++++++-------------- script-meta-v2.json | 8 ++-- script-meta.json | 8 ++-- sigstore-verify-ts/main.ts | 4 +- 4 files changed, 61 insertions(+), 39 deletions(-) diff --git a/access-guard-ts/main.ts b/access-guard-ts/main.ts index 01e5ffc..785baa4 100755 --- a/access-guard-ts/main.ts +++ b/access-guard-ts/main.ts @@ -1,6 +1,6 @@ #!/usr/bin/env -S deno run --allow-env --allow-net -import {Mutex} from "https://deno.land/x/async@v2.1.0/mutex.ts"; +import { Mutex } from "https://deno.land/x/async@v2.1.0/mutex.ts"; // Reference: // * https://docs.deno.com/runtime/reference/env_variables/ @@ -14,7 +14,7 @@ const listen = { const startTime = new Date().getTime(); // IP: Add time -let globalIpAddressMap = {}; +const globalIpAddressMap = {}; const globalIpAddressMapMutex = new Mutex(); async function addIpAddress(ip: string): Promise { @@ -29,9 +29,9 @@ async function addIpAddress(ip: string): Promise { async function cleanAndGetIpAddresses(): Promise> { await globalIpAddressMapMutex.acquire(); try { - let currentTimeMillis = new Date().getTime(); - let invalidKeys = []; - let validKeys = []; + const currentTimeMillis = new Date().getTime(); + const invalidKeys = []; + const validKeys = []; for (let k in globalIpAddressMap) { const t = globalIpAddressMap[k]; if ((currentTimeMillis - t) > 60 * 60 * 1000) { @@ -49,17 +49,20 @@ async function cleanAndGetIpAddresses(): Promise> { } } -let globalFilters = []; -let globalHandlerMap = {}; +const globalFilters: any[] = []; +const globalHandlerMap = {}; type RequestHandler = (url: URL, req: any) => Promise; - function registerFilter(handler: RequestHandler) { globalFilters.push(handler); } -function registerHandler(method: string, path: string, handler: RequestHandler) { +function registerHandler( + method: string, + path: string, + handler: RequestHandler, +) { const requestIdent = `${method}::${path}`; if (globalHandlerMap[requestIdent] != null) { throw `Handler for ${method} ${path} exists.`; @@ -81,7 +84,10 @@ function buildOkJsonResponse(body: any): Response { } function notFoundHandler(url: URL, req: any): Response { - return buildJsonResponse(404, {"error": "not_found", "message": "Resource not found.",}); + return buildJsonResponse(404, { + "error": "not_found", + "message": "Resource not found.", + }); } registerFilter(async (url: URL, req: any) => { @@ -89,41 +95,47 @@ registerFilter(async (url: URL, req: any) => { return null; } if (TOKEN == null) { - return buildJsonResponse(500, {"error": "bad_token", "message": "Bad token."}); + return buildJsonResponse(500, { + "error": "bad_token", + "message": "Bad token.", + }); } - const token = url.searchParams.get('__token'); + const token = url.searchParams.get("__token"); if (TOKEN !== token) { - return buildJsonResponse(401, {"error": "invalid_token", "message": "Invalid token."}) + return buildJsonResponse(401, { + "error": "invalid_token", + "message": "Invalid token.", + }); } return null; }); function formatHumanTime(time: number): string { - let t = []; - let leftMs = time % 1000; + const t = []; + const leftMs = time % 1000; if (leftMs > 0) { t.push(`${leftMs}ms`); } - let secs = Math.floor(time / 1000); - let leftSecs = secs % 60; + const secs = Math.floor(time / 1000); + const leftSecs = secs % 60; if (leftSecs > 0) { t.push(`${leftSecs}s`); } - let mins = Math.floor(secs / 60); - let leftMins = mins % 60; + const mins = Math.floor(secs / 60); + const leftMins = mins % 60; if (leftMins > 0) { t.push(`${leftMins}min`); } - let hours = Math.floor(mins / 60); - let leftHours = hours % 24; + const hours = Math.floor(mins / 60); + const leftHours = hours % 24; if (leftHours > 0) { t.push(`${leftHours}hour`); } - let days = Math.floor(hours / 24); + const days = Math.floor(hours / 24); if (days > 0) { t.push(`${days}day`); } - return t.reverse().join(' '); + return t.reverse().join(" "); } registerHandler("GET", "/version", async (url, req) => { @@ -142,7 +154,10 @@ registerHandler("POST", "/ip_addresses", async (url, req) => { try { addIpAddressRequest = await req.json(); } catch (e) { - return buildJsonResponse(400, {"error": "bad_request", "message": "Bad request."}); + return buildJsonResponse(400, { + "error": "bad_request", + "message": "Bad request.", + }); } await addIpAddress(addIpAddressRequest.ip); return buildOkJsonResponse({}); @@ -156,15 +171,21 @@ registerHandler("GET", "/ip_addresses", async (url, req) => { }); registerHandler("*", "/check_ip_address", async (url, req) => { - const clientIp = req.headers.get('x-real-ip'); + const clientIp = req.headers.get("x-real-ip"); if (clientIp == null) { - return buildJsonResponse(400, {"error": "bad_request", "message": "Bad request: no client IP"}); + return buildJsonResponse(400, { + "error": "bad_request", + "message": "Bad request: no client IP", + }); } const ipAddresses = await cleanAndGetIpAddresses(); if (ipAddresses.indexOf(clientIp) >= 0) { return buildOkJsonResponse({}); } - return buildJsonResponse(401, {"error": "access_denied", "message": "Access denied: not allowed IP"}); + return buildJsonResponse(401, { + "error": "access_denied", + "message": "Access denied: not allowed IP", + }); }); Deno.serve(listen, async (req) => { @@ -178,6 +199,7 @@ Deno.serve(listen, async (req) => { console.log("Handler request:", req.method, url.pathname); const req1 = `${req.method}::${url.pathname}`; const req2 = `*::${url.pathname}`; - const req_handler = globalHandlerMap[req1] || globalHandlerMap[req2] || notFoundHandler; + const req_handler = globalHandlerMap[req1] || globalHandlerMap[req2] || + notFoundHandler; return await req_handler(url, req); -}); \ No newline at end of file +}); diff --git a/script-meta-v2.json b/script-meta-v2.json index 5cd763d..5d7a4e8 100644 --- a/script-meta-v2.json +++ b/script-meta-v2.json @@ -1,8 +1,8 @@ { "access-guard.ts": { "script_name": "access-guard.ts", - "script_length": 5508, - "script_sha256": "608fb5987c04b9bcfcb7006cb75eac7c8f81346906d3aed7ffd368357e6fa5cb", + "script_length": 5756, + "script_sha256": "ecd11481f6182a5db14008c981a2ebba42a4851d656043c79498e83c95521c7b", "script_full_url": "https://git.hatter.ink/hatter/ts-scripts/raw/branch/main/access-guard-ts/main.ts" }, "helloworld.ts": { @@ -27,8 +27,8 @@ }, "sigstore-verify.ts": { "script_name": "sigstore-verify.ts", - "script_length": 3511, - "script_sha256": "5d3987d9f838158ab89ca098cd4b142147ab2157b693e48f042d080be4928ff7", + "script_length": 3515, + "script_sha256": "0371be7620d5aa2607a5ed1a9b45e2664b5c27ee163966a681e630d568c4a445", "script_full_url": "https://git.hatter.ink/hatter/ts-scripts/raw/branch/main/sigstore-verify-ts/main.ts" } } \ No newline at end of file diff --git a/script-meta.json b/script-meta.json index 20f1662..82d1375 100644 --- a/script-meta.json +++ b/script-meta.json @@ -1,8 +1,8 @@ { "access-guard-ts": { "script_name": "access-guard-ts", - "script_length": 5508, - "script_sha256": "608fb5987c04b9bcfcb7006cb75eac7c8f81346906d3aed7ffd368357e6fa5cb" + "script_length": 5756, + "script_sha256": "ecd11481f6182a5db14008c981a2ebba42a4851d656043c79498e83c95521c7b" }, "helloworld-ts": { "script_name": "helloworld-ts", @@ -11,7 +11,7 @@ }, "sigstore-verify-ts": { "script_name": "sigstore-verify-ts", - "script_length": 3511, - "script_sha256": "5d3987d9f838158ab89ca098cd4b142147ab2157b693e48f042d080be4928ff7" + "script_length": 3515, + "script_sha256": "0371be7620d5aa2607a5ed1a9b45e2664b5c27ee163966a681e630d568c4a445" } } \ No newline at end of file diff --git a/sigstore-verify-ts/main.ts b/sigstore-verify-ts/main.ts index b0a810a..2026be7 100755 --- a/sigstore-verify-ts/main.ts +++ b/sigstore-verify-ts/main.ts @@ -130,8 +130,8 @@ sigstore-verify.ts [--attest sigstore-attest.json] `); return; } - let attestFileName = args.attest || "sigstore-attest.json"; - let attest = await loadAttest(attestFileName); + const attestFileName = args.attest || "sigstore-attest.json"; + const attest = await loadAttest(attestFileName); if (attest.format !== "rekor-attest-v1") { throw `Bad rekor attest file format: ${attest.format}`; }