build with vercel

This commit is contained in:
EnixCoda 2020-05-30 16:14:44 +08:00
parent f0f31479ee
commit 2fe065f981
No known key found for this signature in database
GPG key ID: FE06F5DFC1C9B8E4
9 changed files with 56 additions and 53 deletions

2
server/.gitignore vendored
View file

@ -1 +1 @@
.now
.vercel

View file

@ -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

View file

@ -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', {

View file

@ -1,36 +1,8 @@
import { NowRequest, NowResponse } from '@now/node'
export function createCodeHandler(oauthHandler: (code: string) => string | Promise<string>) {
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()
}

View file

@ -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

36
server/api/utils.ts Normal file
View file

@ -0,0 +1,36 @@
import { NowRequest, NowResponse } from '@now/node'
export function createCodeHandler(oauthHandler: (code: string) => string | Promise<string>) {
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))
}

View file

@ -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" }
]
}

View file

@ -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",

9
server/vercel.json Normal file
View file

@ -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" }
]
}