From ead670516d563873c8912b2fdbecfe6df55815ea Mon Sep 17 00:00:00 2001 From: kwaroran Date: Fri, 7 Jul 2023 06:20:02 +0900 Subject: [PATCH] [refactor] proxy2 --- functions/proxy.js | 4 ++- functions/proxy2.js | 58 +++++++++++++++++++++++++++++++ server/node/server.cjs | 14 ++++++-- server/proxy/package.json | 5 --- server/proxy/pnpm-lock.yaml | 68 ------------------------------------- server/proxy/server.js | 6 ---- src/ts/process/request.ts | 2 +- src/ts/storage/globalApi.ts | 6 ++-- 8 files changed, 76 insertions(+), 87 deletions(-) create mode 100644 functions/proxy2.js delete mode 100644 server/proxy/package.json delete mode 100644 server/proxy/pnpm-lock.yaml delete mode 100644 server/proxy/server.js diff --git a/functions/proxy.js b/functions/proxy.js index eba632cf..02b1a0fc 100644 --- a/functions/proxy.js +++ b/functions/proxy.js @@ -44,7 +44,9 @@ async function fetchProxy(request) { newResponseHeaders.delete('content-security-policy'); newResponseHeaders.delete('content-security-policy-report-only'); newResponseHeaders.delete('clear-site-data'); - + newResponseHeaders.delete('Cache-Control'); + + const originalBody = originalResponse.body response = new Response(originalBody, { diff --git a/functions/proxy2.js b/functions/proxy2.js new file mode 100644 index 00000000..02b1a0fc --- /dev/null +++ b/functions/proxy2.js @@ -0,0 +1,58 @@ +export function onRequest(context) { + const request = context.request + return fetchProxy(request); +} + +const blocked_region = [] + +async function fetchProxy(request) { + + const region = (request.headers.get('cf-ipcountry') ?? '').toUpperCase(); + + let response = null; + let rurl = new URL(request.url); + + const urlParam = rurl.searchParams.get('url') + + if(!urlParam){ + return new Response('Access denied', { + status: 403 + }); + } + + if (blocked_region.includes(region)) { + response = new Response('Access denied', { + status: 403 + }); + } else { + let method = request.method; + const header = JSON.parse(decodeURIComponent(request.headers.get('risu-header') ?? 'null')) ?? request.headers + let requestHeaders = new Headers(header); + + let originalResponse = await fetch(urlParam, { + method: method, + headers: requestHeaders, + body: request.body + }) + + const responseHeaders = originalResponse.headers; + const status = originalResponse.status; + let newResponseHeaders = new Headers(responseHeaders); + + newResponseHeaders.set('access-control-allow-origin', 'https://risuai.xyz/'); + newResponseHeaders.set('access-control-allow-credentials', "true"); + newResponseHeaders.delete('content-security-policy'); + newResponseHeaders.delete('content-security-policy-report-only'); + newResponseHeaders.delete('clear-site-data'); + newResponseHeaders.delete('Cache-Control'); + + + const originalBody = originalResponse.body + + response = new Response(originalBody, { + status, + headers: newResponseHeaders + }) + } + return response; +} diff --git a/server/node/server.cjs b/server/node/server.cjs index 82e4fbe9..85abca9d 100644 --- a/server/node/server.cjs +++ b/server/node/server.cjs @@ -40,7 +40,7 @@ app.get('/', async (req, res, next) => { } }) -app.post('/proxy', async (req, res, next) => { +const proxyFunc = async (req, res, next) => { const urlParam = req.query.url; if (!urlParam) { @@ -67,12 +67,20 @@ app.post('/proxy', async (req, res, next) => { const status = originalResponse.status; const originalBody = await originalResponse.text(); - + const head = originalResponse.headers + head.delete('content-security-policy'); + head.delete('content-security-policy-report-only'); + head.delete('clear-site-data'); + head.delete('Cache-Control'); if(status < 200 || status >= 300){ res.status(status) } + res.header(head) res.send(originalBody); -}); +} + +app.post('/proxy', proxyFunc); +app.post('/proxy2', proxyFunc); app.get('/api/password', async(req, res)=> { if(password === ''){ diff --git a/server/proxy/package.json b/server/proxy/package.json deleted file mode 100644 index 13178bec..00000000 --- a/server/proxy/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "cors-anywhere": "^0.4.4" - } -} diff --git a/server/proxy/pnpm-lock.yaml b/server/proxy/pnpm-lock.yaml deleted file mode 100644 index af5d30ec..00000000 --- a/server/proxy/pnpm-lock.yaml +++ /dev/null @@ -1,68 +0,0 @@ -lockfileVersion: 5.4 - -specifiers: - cors-anywhere: ^0.4.4 - http-proxy: ^1.18.1 - -dependencies: - cors-anywhere: 0.4.4 - http-proxy: 1.18.1 - -packages: - - /cors-anywhere/0.4.4: - resolution: {integrity: sha512-8OBFwnzMgR4mNrAeAyOLB2EruS2z7u02of2bOu7i9kKYlZG+niS7CTHLPgEXKWW2NAOJWRry9RRCaL9lJRjNqg==} - engines: {node: '>=0.10.0'} - dependencies: - http-proxy: 1.11.1 - proxy-from-env: 0.0.1 - dev: false - - /eventemitter3/1.2.0: - resolution: {integrity: sha512-DOFqA1MF46fmZl2xtzXR3MPCRsXqgoFqdXcrCVYM3JNnfUeHTm/fh/v/iU7gBFpwkuBmoJPAm5GuhdDfSEJMJA==} - dev: false - - /eventemitter3/4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false - - /follow-redirects/1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - - /http-proxy/1.11.1: - resolution: {integrity: sha512-qz7jZarkVG3G6GMq+4VRJPSN4NkIjL4VMTNhKGd8jc25BumeJjWWvnY3A7OkCGa8W1TTxbaK3dcE0ijFalITVA==} - engines: {node: '>=0.10.0'} - dependencies: - eventemitter3: 1.2.0 - requires-port: 0.0.1 - dev: false - - /http-proxy/1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.2 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - dev: false - - /proxy-from-env/0.0.1: - resolution: {integrity: sha512-B9Hnta3CATuMS0q6kt5hEezOPM+V3dgaRewkFtFoaRQYTVNsHqUvFXmndH06z3QO1ZdDnRELv5vfY6zAj/gG7A==} - dev: false - - /requires-port/0.0.1: - resolution: {integrity: sha512-AzPDCliPoWDSvEVYRQmpzuPhGGEnPrQz9YiOEvn+UdB9ixBpw+4IOZWtwctmpzySLZTy7ynpn47V14H4yaowtA==} - dev: false - - /requires-port/1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: false diff --git a/server/proxy/server.js b/server/proxy/server.js deleted file mode 100644 index 9a73322d..00000000 --- a/server/proxy/server.js +++ /dev/null @@ -1,6 +0,0 @@ -const cors_proxy = require('cors-anywhere'); - -const host = process.env.HOST || 'localhost'; -const port = process.env.PORT || 8080; - -cors_proxy.createServer({originWhitelist: []}).listen(port, host, function() {console.log('Running Proxy on ' + host + ':' + port);}); \ No newline at end of file diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index feeed1f2..c600ea7a 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -181,7 +181,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' if(db.useStreaming && arg.useStreaming){ body.stream = true const da = ((!isTauri) && (!isNodeServer)) - ? await fetch(`/proxy?url=${encodeURIComponent(replacerURL)}`, { + ? await fetch(`/proxy2?url=${encodeURIComponent(replacerURL)}`, { body: JSON.stringify(body), headers: { "risu-header": encodeURIComponent(JSON.stringify({ diff --git a/src/ts/storage/globalApi.ts b/src/ts/storage/globalApi.ts index 7cf6f90c..67d48b59 100644 --- a/src/ts/storage/globalApi.ts +++ b/src/ts/storage/globalApi.ts @@ -617,7 +617,7 @@ export async function globalFetch(url:string, arg:{plainFetchForce?:boolean,body } } if(arg.rawResponse){ - const furl = `/proxy?url=${encodeURIComponent(url)}` + const furl = `/proxy2?url=${encodeURIComponent(url)}` const da = await fetch(furl, { body: body, @@ -637,8 +637,8 @@ export async function globalFetch(url:string, arg:{plainFetchForce?:boolean,body } } else{ - const furl = hubURL + `/proxy?url=${encodeURIComponent(url)}` - + const furl = `/proxy2?url=${encodeURIComponent(url)}` + const da = await fetch(furl, { body: body, headers: {