From 3b32ba7244d6684d59f305f079e7fcee83ee3367 Mon Sep 17 00:00:00 2001 From: xion Date: Wed, 2 Apr 2025 22:16:11 +0800 Subject: [PATCH] fix: add query user config to redirect home --- package.json | 2 + pnpm-lock.yaml | 186 +++++++++++++++++++++++++++++++++ src/middleware/auth.ts | 5 +- src/module/config.ts | 6 -- src/module/index.ts | 10 +- src/module/query.ts | 10 ++ src/module/query/get-router.ts | 2 +- src/module/user-home/index.ts | 31 ++++++ 8 files changed, 238 insertions(+), 14 deletions(-) create mode 100644 src/module/query.ts create mode 100644 src/module/user-home/index.ts diff --git a/package.json b/package.json index 2d885f9..84b44ad 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,8 @@ "dependencies": { "@kevisual/code-center-module": "0.0.16", "@kevisual/permission": "^0.0.1", + "@kevisual/query": "^0.0.15", + "@kevisual/query-config": "^0.0.2", "@kevisual/router": "0.0.9", "@kevisual/use-config": "^1.0.10", "archiver": "^7.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e6e19e..e21759b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,12 @@ importers: '@kevisual/permission': specifier: ^0.0.1 version: 0.0.1 + '@kevisual/query': + specifier: ^0.0.15 + version: 0.0.15(ws@8.18.0)(zod@3.24.2) + '@kevisual/query-config': + specifier: ^0.0.2 + version: 0.0.2(@kevisual/query@0.0.15(ws@8.18.0)(zod@3.24.2)) '@kevisual/router': specifier: 0.0.9 version: 0.0.9 @@ -116,6 +122,14 @@ packages: '@kevisual/permission@0.0.1': resolution: {integrity: sha512-nSX2LzbPkU3YAMegbUFGU8tfmtFb7dcF5edqzm+gI6crcyCL1JzIB9HAYNEeEVIljLxuREwM/vVg9aFmF4cz9Q==} + '@kevisual/query-config@0.0.2': + resolution: {integrity: sha512-JcDq/gS0Y1FQfGm9OxNGZwxm4Pgmu24NEvWrZ6TLf3VCk/WsaOtzkNX5pf2rnwxF9FETaLAwa0g2nAYVLsELRA==} + peerDependencies: + '@kevisual/query': ^0.0.13 + + '@kevisual/query@0.0.15': + resolution: {integrity: sha512-DK41qvyOiJMmlj70QyVP/48M0gszA39DdnBLtgU94YwAe6OqKrr9tYXHLjZrOROmUVMezIIBQuWMLedSAvb54A==} + '@kevisual/router@0.0.9': resolution: {integrity: sha512-qPyC2GVJ7iOIdJCCKNDsWMAKOQeSJW9HBpL5ZWKHTbi+t4jJBGTzIlXmjKeMHRd0lr/Qq1imQvlkSh4hlrbodA==} @@ -301,9 +315,15 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + '@types/node@18.19.86': + resolution: {integrity: sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==} + '@types/node@22.13.14': resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} @@ -327,6 +347,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -358,6 +382,9 @@ packages: async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -440,6 +467,10 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -513,6 +544,10 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} @@ -568,6 +603,10 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -624,6 +663,17 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} @@ -690,6 +740,9 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -850,6 +903,19 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -871,6 +937,18 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} + openai@4.91.1: + resolution: {integrity: sha512-DbjrR0hIMQFbxz8+3qBsfPJnh3+I/skPgoSlT7f9eiZuhGBUissPQULNgx6gHNkLoZ3uS0uYS6eXPUdtg4nHzw==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -1204,6 +1282,9 @@ packages: resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -1219,6 +1300,9 @@ packages: undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} @@ -1243,6 +1327,16 @@ packages: web-encoding@1.1.5: resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-typed-array@1.1.18: resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} engines: {node: '>= 0.4'} @@ -1357,6 +1451,18 @@ snapshots: '@kevisual/permission@0.0.1': {} + '@kevisual/query-config@0.0.2(@kevisual/query@0.0.15(ws@8.18.0)(zod@3.24.2))': + dependencies: + '@kevisual/query': 0.0.15(ws@8.18.0)(zod@3.24.2) + + '@kevisual/query@0.0.15(ws@8.18.0)(zod@3.24.2)': + dependencies: + openai: 4.91.1(ws@8.18.0)(zod@3.24.2) + transitivePeerDependencies: + - encoding + - ws + - zod + '@kevisual/router@0.0.9': dependencies: path-to-regexp: 8.2.0 @@ -1501,10 +1607,19 @@ snapshots: '@types/ms@2.1.0': {} + '@types/node-fetch@2.6.12': + dependencies: + '@types/node': 22.13.14 + form-data: 4.0.2 + '@types/node-forge@1.3.11': dependencies: '@types/node': 22.13.14 + '@types/node@18.19.86': + dependencies: + undici-types: 5.26.5 + '@types/node@22.13.14': dependencies: undici-types: 6.20.0 @@ -1530,6 +1645,10 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -1567,6 +1686,8 @@ snapshots: async@3.2.6: {} + asynckit@0.4.0: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -1658,6 +1779,10 @@ snapshots: color-name@1.1.4: {} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + commondir@1.0.1: {} compress-commons@6.0.2: @@ -1730,6 +1855,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + delayed-stream@1.0.0: {} + denque@2.1.0: {} depd@2.0.0: {} @@ -1780,6 +1907,13 @@ snapshots: dependencies: es-errors: 1.3.0 + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -1819,6 +1953,20 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + form-data-encoder@1.7.2: {} + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + formdata-node@4.4.1: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + fresh@2.0.0: {} fsevents@2.3.3: @@ -1889,6 +2037,10 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + ieee754@1.2.1: {} ignore-by-default@1.0.1: {} @@ -2047,6 +2199,12 @@ snapshots: negotiator@0.6.3: {} + node-domexception@1.0.0: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + node-forge@1.3.1: {} nodemon@3.1.9: @@ -2070,6 +2228,21 @@ snapshots: dependencies: ee-first: 1.1.1 + openai@4.91.1(ws@8.18.0)(zod@3.24.2): + dependencies: + '@types/node': 18.19.86 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + optionalDependencies: + ws: 8.18.0 + zod: 3.24.2 + transitivePeerDependencies: + - encoding + package-json-from-dist@1.0.1: {} path-key@3.1.1: {} @@ -2431,6 +2604,8 @@ snapshots: touch@3.1.1: {} + tr46@0.0.3: {} + tree-kill@1.2.2: {} tslib@2.8.1: {} @@ -2439,6 +2614,8 @@ snapshots: undefsafe@2.0.5: {} + undici-types@5.26.5: {} + undici-types@6.20.0: {} util-deprecate@1.0.2: {} @@ -2463,6 +2640,15 @@ snapshots: optionalDependencies: '@zxing/text-encoding': 0.9.0 + web-streams-polyfill@4.0.0-beta.3: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 diff --git a/src/middleware/auth.ts b/src/middleware/auth.ts index f3f9f2f..41038a7 100644 --- a/src/middleware/auth.ts +++ b/src/middleware/auth.ts @@ -47,12 +47,13 @@ export const getLoginUser = async (req: http.IncomingMessage) => { const parsedCookies = cookie.parse(req.headers.cookie || ''); token = parsedCookies.token || ''; } - const parsedCookies = cookie.parse(req.headers.cookie || ''); - console.log('getLoginUser', parsedCookies, 'parsedCookies.token', parsedCookies.token); if (token) { token = token.replace('Bearer ', ''); } + if (!token) { + return null; + } let tokenUser; try { tokenUser = await User.verifyToken(token); diff --git a/src/module/config.ts b/src/module/config.ts index c900c5f..996ca9f 100644 --- a/src/module/config.ts +++ b/src/module/config.ts @@ -38,11 +38,6 @@ type ConfigType = { * 允许跨域访问的地址 */ allowedOrigin: string[]; - - /** - * home 不在代理范围内跳转到的地址 - */ - home: string; }; }; @@ -65,6 +60,5 @@ export const config: ConfigType = { domain: envConfig.PROXY_DOMAIN, resources: envConfig.PROXY_RESOURCES, allowedOrigin: (envConfig.PROXY_ALLOWED_ORIGINS as string)?.split(',') || [], - home: envConfig.PROXY_HOME, }, }; diff --git a/src/module/index.ts b/src/module/index.ts index 80a1844..c7a6ee3 100644 --- a/src/module/index.ts +++ b/src/module/index.ts @@ -10,17 +10,16 @@ import { fileProxy } from './proxy/file-proxy.ts'; import { getTextFromStreamAndAddStat, httpProxy } from './proxy/http-proxy.ts'; import { UserPermission } from '@kevisual/permission'; import { getLoginUser } from '@/middleware/auth.ts'; +import { rediretHome } from './user-home/index.ts'; const api = config?.api || { host: 'kevisual.xiongxiao.me', path: '/api/router' }; const domain = config?.proxy?.domain || 'kevisual.xiongxiao.me'; const allowedOrigins = config?.proxy?.allowedOrigin || []; -const home = config?.proxy?.home || '/ai/chat'; const noProxyUrl = ['/', '/favicon.ico']; export const handleRequest = async (req: http.IncomingMessage, res: http.ServerResponse) => { const querySearch = new URL(req.url, `http://${req.headers.host}`).searchParams; const password = querySearch.get('p'); const loginUser = await getLoginUser(req); - console.log('loginUser', loginUser); if (req.url === '/favicon.ico') { res.writeHead(200, { 'Content-Type': 'image/x-icon' }); res.end('proxy no favicon.ico\n'); @@ -146,8 +145,10 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR if (url === '/') { // TODO: 获取一下登陆用户,如果没有登陆用户,重定向到ai-chat页面 // 重定向到 - res.writeHead(302, { Location: home }); - return res.end(); + // res.writeHead(302, { Location: home }); + // return res.end(); + rediretHome(req, res); + return; } // 不是域名代理,且是在不代理的url当中 res.write('No proxy for this URL\n'); @@ -257,7 +258,6 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR username: loginUser?.tokenUser?.username || '', password: password, }); - console.log('checkPermission', loginUser, permission); if (!checkPermission.success) { return createNotFoundPage('no permission'); } diff --git a/src/module/query.ts b/src/module/query.ts new file mode 100644 index 0000000..021fc86 --- /dev/null +++ b/src/module/query.ts @@ -0,0 +1,10 @@ +import { Query } from '@kevisual/query'; +import { QueryConfig } from '@kevisual/query-config'; + +export const query = new Query({ + url: 'https://kevisual.cn/api/router', +}); + +export const queryConfig = new QueryConfig({ + query: query, +}); diff --git a/src/module/query/get-router.ts b/src/module/query/get-router.ts index faafc2f..6709796 100644 --- a/src/module/query/get-router.ts +++ b/src/module/query/get-router.ts @@ -1,6 +1,6 @@ import { config } from '../config.ts'; -const api = config?.api || { host: 'https://kevisual.xiongxiao.me', path: '/api/router' }; +const api = config?.api || { host: 'https://kevisual.cn', path: '/api/router' }; const apiPath = api.path || '/api/router'; export const fetchTest = async (id: string) => { const fetchUrl = api.host + apiPath; diff --git a/src/module/user-home/index.ts b/src/module/user-home/index.ts new file mode 100644 index 0000000..1d7d114 --- /dev/null +++ b/src/module/user-home/index.ts @@ -0,0 +1,31 @@ +import http from 'http'; +import { getLoginUser } from '@/middleware/auth.ts'; +import { queryConfig } from '../query.ts'; + +/** + * 重定向到用户首页 + * @param req + * @param res + */ +export const rediretHome = async (req: http.IncomingMessage, res: http.ServerResponse) => { + const user = await getLoginUser(req); + if (!user?.token) { + res.writeHead(302, { Location: '/user/login/' }); + res.end(); + return; + } + let redirectURL = '/root/center/'; + try { + const token = user.token; + const resConfig = await queryConfig.getConfigByKey('user.json', { token }); + if (resConfig.code === 200) { + const configData = resConfig.data?.data as any; + redirectURL = configData?.redirectURL || redirectURL; + } + } catch (error) { + console.error('get resConfig user.json', error); + } finally { + res.writeHead(302, { Location: redirectURL }); + res.end(); + } +};