From 2fe065f9810486a61221f2b74365bdc51f49d2bd Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sat, 30 May 2020 16:14:44 +0800 Subject: [PATCH] build with vercel --- server/.gitignore | 2 +- server/api/gitee.ts | 2 +- server/api/github.ts | 4 ++-- server/api/index.ts | 38 +++++--------------------------------- server/api/redirect.ts | 2 +- server/api/utils.ts | 36 ++++++++++++++++++++++++++++++++++++ server/now.json | 14 -------------- server/package.json | 2 +- server/vercel.json | 9 +++++++++ 9 files changed, 56 insertions(+), 53 deletions(-) create mode 100644 server/api/utils.ts delete mode 100644 server/now.json create mode 100644 server/vercel.json diff --git a/server/.gitignore b/server/.gitignore index 4d301d9..e985853 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -1 +1 @@ -.now \ No newline at end of file +.vercel diff --git a/server/api/gitee.ts b/server/api/gitee.ts index c271eec..df76340 100644 --- a/server/api/gitee.ts +++ b/server/api/gitee.ts @@ -1,5 +1,5 @@ import fetch from 'node-fetch' -import { createCodeHandler } from '.' +import { createCodeHandler } from './utils' const { GITEE_OAUTH_CLIENT_ID = '', GITEE_OAUTH_CLIENT_SECRET = '' } = process.env diff --git a/server/api/github.ts b/server/api/github.ts index a2760ea..c29e9c1 100644 --- a/server/api/github.ts +++ b/server/api/github.ts @@ -1,7 +1,7 @@ import fetch from 'node-fetch' -import { createCodeHandler } from '.' +import { createCodeHandler } from './utils' -const { GITHUB_OAUTH_CLIENT_ID, GITHUB_OAUTH_CLIENT_SECRET } = process.env +const { GITHUB_OAUTH_CLIENT_ID = '', GITHUB_OAUTH_CLIENT_SECRET = '' } = process.env async function oauth(code: string) { const res = await fetch('https://github.com/login/oauth/access_token', { diff --git a/server/api/index.ts b/server/api/index.ts index ad16ab6..055beed 100644 --- a/server/api/index.ts +++ b/server/api/index.ts @@ -1,36 +1,8 @@ import { NowRequest, NowResponse } from '@now/node' -export function createCodeHandler(oauthHandler: (code: string) => string | Promise) { - return async function handleCode(request: NowRequest, response: NowResponse) { - const { code } = request.query - try { - setCORSHeaders(response) - if (!request.method || request.method.toLowerCase() !== 'post') { - return sendRejection(response, 405) - } - if (!code || typeof code !== 'string') { - return sendRejection(response, 403) - } - const accessToken = await oauthHandler(code) - writeJSON(response, { accessToken }) - response.end() - } catch (err) { - return sendRejection(response, 400, err instanceof Error ? err.message : '') - } - } -} - -function setCORSHeaders(response: NowResponse) { - response.setHeader('Access-Control-Allow-Origin', '*') - response.setHeader('Access-Control-Allow-Methods', 'POST') -} - -export function sendRejection(response: NowResponse, status = 400, content?: string) { - response.writeHead(status) - response.end(content) -} - -function writeJSON(response: NowResponse, data: unknown) { - response.setHeader('Content-Type', 'application/json') - response.write(JSON.stringify(data)) +export default function (request: NowRequest, response: NowResponse) { + response.writeHead(302, { + Location: 'https://github.com/EnixCoda/Gitako', + }) + response.end() } diff --git a/server/api/redirect.ts b/server/api/redirect.ts index 3859ce7..6450bd4 100644 --- a/server/api/redirect.ts +++ b/server/api/redirect.ts @@ -1,5 +1,5 @@ import { NowRequest, NowResponse } from '@now/node' -import { sendRejection } from './index' +import { sendRejection } from './utils' export default async function handleRedirect(request: NowRequest, response: NowResponse) { const { redirect, ...params } = request.query diff --git a/server/api/utils.ts b/server/api/utils.ts new file mode 100644 index 0000000..ad16ab6 --- /dev/null +++ b/server/api/utils.ts @@ -0,0 +1,36 @@ +import { NowRequest, NowResponse } from '@now/node' + +export function createCodeHandler(oauthHandler: (code: string) => string | Promise) { + return async function handleCode(request: NowRequest, response: NowResponse) { + const { code } = request.query + try { + setCORSHeaders(response) + if (!request.method || request.method.toLowerCase() !== 'post') { + return sendRejection(response, 405) + } + if (!code || typeof code !== 'string') { + return sendRejection(response, 403) + } + const accessToken = await oauthHandler(code) + writeJSON(response, { accessToken }) + response.end() + } catch (err) { + return sendRejection(response, 400, err instanceof Error ? err.message : '') + } + } +} + +function setCORSHeaders(response: NowResponse) { + response.setHeader('Access-Control-Allow-Origin', '*') + response.setHeader('Access-Control-Allow-Methods', 'POST') +} + +export function sendRejection(response: NowResponse, status = 400, content?: string) { + response.writeHead(status) + response.end(content) +} + +function writeJSON(response: NowResponse, data: unknown) { + response.setHeader('Content-Type', 'application/json') + response.write(JSON.stringify(data)) +} diff --git a/server/now.json b/server/now.json deleted file mode 100644 index 30e5da8..0000000 --- a/server/now.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "version": 2, - "env": { - "GITHUB_OAUTH_CLIENT_SECRET": "@gitako-github-oauth-client-secret", - "GITHUB_OAUTH_CLIENT_ID": "@gitako-github-oauth-client-id", - "GITEE_OAUTH_CLIENT_SECRET": "@gitako-gitee-oauth-client-secret", - "GITEE_OAUTH_CLIENT_ID": "@gitako-gitee-oauth-client-id" - }, - "routes": [ - { "src": "/redirect/?", "dest": "/api/redirect.ts" }, - { "src": "/oauth/github/?", "dest": "/api/github.ts" }, - { "src": "/oauth/gitee/?", "dest": "/api/gitee.ts" } - ] -} diff --git a/server/package.json b/server/package.json index 4cd7591..458e100 100644 --- a/server/package.json +++ b/server/package.json @@ -2,7 +2,7 @@ "name": "gitako-server", "version": "0.1.0", "main": "api/index.ts", - "author": "Enix", + "author": "EnixCoda", "license": "MIT", "dependencies": { "@now/node": "^1.5.0", diff --git a/server/vercel.json b/server/vercel.json new file mode 100644 index 0000000..a41e547 --- /dev/null +++ b/server/vercel.json @@ -0,0 +1,9 @@ +{ + "version": 2, + "routes": [ + { "src": "/redirect/?", "dest": "/api/redirect.ts" }, + { "src": "/oauth/github/?", "dest": "/api/github.ts" }, + { "src": "/oauth/gitee/?", "dest": "/api/gitee.ts" }, + { "src": "/", "dest": "/api/index.ts" } + ] +}