mirror of
https://github.com/EnixCoda/Gitako.git
synced 2026-03-11 08:54:44 +00:00
build with vercel
This commit is contained in:
parent
f0f31479ee
commit
2fe065f981
9 changed files with 56 additions and 53 deletions
2
server/.gitignore
vendored
2
server/.gitignore
vendored
|
|
@ -1 +1 @@
|
|||
.now
|
||||
.vercel
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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', {
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
36
server/api/utils.ts
Normal 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))
|
||||
}
|
||||
|
|
@ -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" }
|
||||
]
|
||||
}
|
||||
|
|
@ -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
9
server/vercel.json
Normal 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" }
|
||||
]
|
||||
}
|
||||
Loading…
Reference in a new issue