diff --git a/package-lock.json b/package-lock.json index 5ff9e58..16afbc3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "devDependencies": { "@cloudflare/workers-types": "^4.20240423.0", "typescript": "^5.0.4", - "wrangler": "^3.53.1" + "wrangler": "^3.56.0" } }, "node_modules/@cfworker/jwt": { @@ -53,9 +53,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20240419.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240419.0.tgz", - "integrity": "sha512-PGVe9sYWULHfvGhN0IZh8MsskNG/ufnBSqPbgFCxJHCTrVXLPuC35EoVaforyqjKRwj3U35XMyGo9KHcGnTeHQ==", + "version": "1.20240512.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240512.0.tgz", + "integrity": "sha512-VMp+CsSHFALQiBzPdQ5dDI4T1qwLu0mQ0aeKVNDosXjueN0f3zj/lf+mFil5/9jBbG3t4mG0y+6MMnalP9Lobw==", "cpu": [ "x64" ], @@ -69,9 +69,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20240419.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240419.0.tgz", - "integrity": "sha512-z4etQSPiD5Gcjs962LiC7ZdmXnN6SGof5KrYoFiSI9X9kUvpuGH/lnjVVPd+NnVNeDU2kzmcAIgyZjkjTaqVXQ==", + "version": "1.20240512.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240512.0.tgz", + "integrity": "sha512-lZktXGmzMrB5rJqY9+PmnNfv1HKlj/YLZwMjPfF0WVKHUFdvQbAHsi7NlKv6mW9uIvlZnS+K4sIkWc0MDXcRnA==", "cpu": [ "arm64" ], @@ -85,9 +85,9 @@ } }, "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20240419.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240419.0.tgz", - "integrity": "sha512-lBwhg0j3sYTFMsEb4bOClbVje8nqrYOu0H3feQlX+Eks94JIhWPkf8ywK4at/BUc1comPMhCgzDHwc2OMPUGgg==", + "version": "1.20240512.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240512.0.tgz", + "integrity": "sha512-wrHvqCZZqXz6Y3MUTn/9pQNsvaoNjbJpuA6vcXsXu8iCzJi911iVW2WUEBX+MpUWD+mBIP0oXni5tTlhkokOPw==", "cpu": [ "x64" ], @@ -101,9 +101,9 @@ } }, "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20240419.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240419.0.tgz", - "integrity": "sha512-ZMY6wwWkxL+WPq8ydOp/irSYjAnMhBz1OC1+4z+OANtDs2beaZODmq7LEB3hb5WUAaTPY7DIjZh3DfDfty0nYg==", + "version": "1.20240512.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240512.0.tgz", + "integrity": "sha512-YPezHMySL9J9tFdzxz390eBswQ//QJNYcZolz9Dgvb3FEfdpK345cE/bsWbMOqw5ws2f82l388epoenghtYvAg==", "cpu": [ "arm64" ], @@ -117,9 +117,9 @@ } }, "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20240419.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240419.0.tgz", - "integrity": "sha512-YJjgaJN2yGTkV7Cr4K3i8N4dUwVQTclT3Pr3NpRZCcLjTszwlE53++XXDnHMKGXBbSguIizaVbmcU2EtmIXyeQ==", + "version": "1.20240512.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240512.0.tgz", + "integrity": "sha512-SxKapDrIYSscMR7lGIp/av0l6vokjH4xQ9ACxHgXh+OdOus9azppSmjaPyw4/ePvg7yqpkaNjf9o258IxWtvKQ==", "cpu": [ "x64" ], @@ -133,9 +133,9 @@ } }, "node_modules/@cloudflare/workers-types": { - "version": "4.20240423.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20240423.0.tgz", - "integrity": "sha512-ssuccb3j+URp6mP2p0PcQE9vmS3YeKBQnALHF9P3yQfUAFozuhTsDTbqmL+zPrJvUcG7SL2xVQkNDF9QJeKDZw==", + "version": "4.20240512.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20240512.0.tgz", + "integrity": "sha512-o2yTEWg+YK/I1t/Me+dA0oarO0aCbjibp6wSeaw52DSE9tDyKJ7S+Qdyw/XsMrKn4t8kF6f/YOba+9O4MJfW9w==", "dev": true }, "node_modules/@cspotcode/source-map-support": { @@ -1002,9 +1002,9 @@ } }, "node_modules/miniflare": { - "version": "3.20240419.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240419.0.tgz", - "integrity": "sha512-fIev1PP4H+fQp5FtvzHqRY2v5s+jxh/a0xAhvM5fBNXvxWX7Zod1OatXfXwYbse3hqO3KeVMhb0osVtrW0NwJg==", + "version": "3.20240512.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240512.0.tgz", + "integrity": "sha512-X0PlKR0AROKpxFoJNmRtCMIuJxj+ngEcyTOlEokj2rAQ0TBwUhB4/1uiPvdI6ofW5NugPOD1uomAv+gLjwsLDQ==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "0.8.1", @@ -1015,7 +1015,7 @@ "glob-to-regexp": "^0.4.1", "stoppable": "^1.1.0", "undici": "^5.28.2", - "workerd": "1.20240419.0", + "workerd": "1.20240512.0", "ws": "^8.11.0", "youch": "^3.2.2", "zod": "^3.20.6" @@ -1300,9 +1300,9 @@ } }, "node_modules/workerd": { - "version": "1.20240419.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240419.0.tgz", - "integrity": "sha512-9yV98KpkQgG+bdEsKEW8i1AYZgxns6NVSfdOVEB2Ue1pTMtIEYfUyqUE+O2amisRrfaC3Pw4EvjtTmVaoetfeg==", + "version": "1.20240512.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240512.0.tgz", + "integrity": "sha512-VUBmR1PscAPHEE0OF/G2K7/H1gnr9aDWWZzdkIgWfNKkv8dKFCT75H+GJtUHjfwqz3rYCzaNZmatSXOpLGpF8A==", "dev": true, "hasInstallScript": true, "bin": { @@ -1312,17 +1312,17 @@ "node": ">=16" }, "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20240419.0", - "@cloudflare/workerd-darwin-arm64": "1.20240419.0", - "@cloudflare/workerd-linux-64": "1.20240419.0", - "@cloudflare/workerd-linux-arm64": "1.20240419.0", - "@cloudflare/workerd-windows-64": "1.20240419.0" + "@cloudflare/workerd-darwin-64": "1.20240512.0", + "@cloudflare/workerd-darwin-arm64": "1.20240512.0", + "@cloudflare/workerd-linux-64": "1.20240512.0", + "@cloudflare/workerd-linux-arm64": "1.20240512.0", + "@cloudflare/workerd-windows-64": "1.20240512.0" } }, "node_modules/wrangler": { - "version": "3.53.1", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.53.1.tgz", - "integrity": "sha512-bdMRQdHYdvowIwOhEMFkARIZUh56aDw7HLUZ/2JreBjj760osXE4Fc4L1TCkfRRBWgB6/LKF5LA4OcvORMYmHg==", + "version": "3.56.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.56.0.tgz", + "integrity": "sha512-YEUscEmg6F7nVPoNX5uaQ/KT0ztkPLLN4XGOl9uwgLCTHsyilzeh4WvEg6lelDi60EIXhuzWLjf0jBFN4wbnZw==", "dev": true, "dependencies": { "@cloudflare/kv-asset-handler": "0.3.2", @@ -1331,7 +1331,7 @@ "blake3-wasm": "^2.1.5", "chokidar": "^3.5.3", "esbuild": "0.17.19", - "miniflare": "3.20240419.0", + "miniflare": "3.20240512.0", "nanoid": "^3.3.3", "path-to-regexp": "^6.2.0", "resolve": "^1.22.8", @@ -1351,7 +1351,7 @@ "fsevents": "~2.3.2" }, "peerDependencies": { - "@cloudflare/workers-types": "^4.20240419.0" + "@cloudflare/workers-types": "^4.20240512.0" }, "peerDependenciesMeta": { "@cloudflare/workers-types": { @@ -1398,9 +1398,9 @@ } }, "node_modules/zod": { - "version": "3.23.5", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.5.tgz", - "integrity": "sha512-fkwiq0VIQTksNNA131rDOsVJcns0pfVUjHzLrNBiF/O/Xxb5lQyEXkhZWcJ7npWsYlvs+h0jFWXXy4X46Em1JA==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true, "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 09522bb..29c7e05 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "devDependencies": { "@cloudflare/workers-types": "^4.20240423.0", "typescript": "^5.0.4", - "wrangler": "^3.53.1" + "wrangler": "^3.56.0" }, "dependencies": { "@cfworker/jwt": "^4.0.6", diff --git a/src/index.ts b/src/index.ts index c75f903..de52e8d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,7 +18,8 @@ type Env = { gatewayKey: string; auth0Issuer: string; auth0Audience: string; - secureSubmitEndpoint: string; + secureSubmitEndpoint: URL; + securePodcastsEndpoint: URL; } const allowedOrigins: Array = [ @@ -326,7 +327,7 @@ app.post("/submit", auth0Middleware, async (c) => { try { const record = { url: url.toString(), - ip_address: c.req.header("CF-Connecting-IP") ?? null, + ip_address: c.req.header("CF-Connecting-IP") ?? "Unkown", user_agent: c.req.header("User-Agent") ?? null, country: c.req.header("CF-IPCountry") ?? null }; @@ -342,5 +343,38 @@ app.post("/submit", auth0Middleware, async (c) => { return c.json({ success: "Submitted" }); }); +app.get("/podcasts", auth0Middleware, async (c) => { + const auth0Payload: Auth0JwtPayload = c.var.auth0('payload'); + c.header("Cache-Control", "max-age=600"); + c.header("Content-Type", "application/json"); + c.header("Access-Control-Allow-Origin", getOrigin(c.req.header("Origin"))); + c.header("Access-Control-Allow-Methods", "POST,GET,OPTIONS"); + + if (auth0Payload?.permissions && auth0Payload.permissions.includes('submit')) { + const authorisation: string = c.req.header("Authorization")!; + console.log(`Using auth header '${authorisation.slice(0, 20)}..'`); + const resp = await fetch(c.env.securePodcastsEndpoint, { + headers: { + 'Accept': "*/*", + 'Authorization': authorisation, + "Content-type": "application/json", + "Cache-Control": "no-cache", + "User-Agent": "cultvault-podcasts-api", + "Host": new URL(c.env.securePodcastsEndpoint).host + }, + method: "GET" + }); + if (resp.status == 200) { + console.log(`Successfully used secure enpoint.`); + + return new Response(resp.body); + } else { + console.log(`Failed to use secure submit endpoint. Response code: '${resp.status}'.`); + } + + } + return c.json({ error: "Unauthorised" }, 403); +}); + export default app;