44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { Hono } from 'hono'
|
|
import { cors } from 'hono/cors'
|
|
import { Bindings } from './bindings'
|
|
import { LoginView } from './views/login'
|
|
import { AdminView } from './views/admin'
|
|
import { customCors } from './utils/cors'
|
|
import { adminAuth } from './utils/auth'
|
|
|
|
import { getComments } from './api/public/getComments'
|
|
import { postComment } from './api/public/postComment'
|
|
import { adminLogin } from './api/admin/login'
|
|
import { deleteComment } from './api/admin/deleteComment'
|
|
import { listComments } from './api/admin/listComments'
|
|
import { updateStatus } from './api/admin/updateStatus'
|
|
|
|
const app = new Hono<{ Bindings: Bindings }>()
|
|
|
|
// 跨域
|
|
app.use('/api/*', async (c, next) => {
|
|
const corsMiddleware = customCors(c.env.ALLOW_ORIGIN)
|
|
return corsMiddleware(c, next)
|
|
})
|
|
app.use('/admin/*', async (c, next) => {
|
|
const corsMiddleware = customCors(c.env.ALLOW_ORIGIN)
|
|
return corsMiddleware(c, next)
|
|
})
|
|
|
|
// 页面路由
|
|
app.get('/', (c) => c.redirect('/login'))
|
|
app.get('/login', (c) => c.html(LoginView))
|
|
app.get('/admin', (c) => c.html(AdminView))
|
|
|
|
|
|
// API
|
|
app.get('/api/comments', getComments)
|
|
app.post('/api/comments', postComment)
|
|
|
|
app.post('/admin/login', adminLogin)
|
|
app.use('/admin/*', adminAuth)
|
|
app.delete('/admin/comments/delete', deleteComment);
|
|
app.get('/admin/comments/list', listComments);
|
|
app.put('/admin/comments/status', updateStatus);
|
|
|
|
export default app |