mirror of https://github.com/msgbyte/tailchat
feat(admin): basic tushan
parent
cf4e517607
commit
df3630ba93
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,66 @@
|
||||
import { buildRouter, Tushan } from 'tushan';
|
||||
import { User } from './resources/User';
|
||||
import Koa from 'koa';
|
||||
import path from 'path';
|
||||
import session from 'koa-session';
|
||||
import dotenv from 'dotenv';
|
||||
|
||||
dotenv.config({ path: path.resolve(__dirname, '../../.env') });
|
||||
|
||||
const mongoUri = process.env.MONGO_URL;
|
||||
const adminPass = process.env.ADMIN_PASS;
|
||||
|
||||
async function start() {
|
||||
if (!mongoUri) {
|
||||
console.warn(`MONGO_URL has not been set.`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!adminPass) {
|
||||
console.warn(`ADMIN_PASS has not been set.`);
|
||||
return;
|
||||
}
|
||||
|
||||
const app = new Koa();
|
||||
|
||||
app.keys = ['tushan'];
|
||||
app.use(session({ key: 'sess:tushan' }, app));
|
||||
|
||||
const tushan = new Tushan({
|
||||
datasourceOptions: {
|
||||
type: 'mongodb',
|
||||
url: mongoUri,
|
||||
} as any,
|
||||
resources: [
|
||||
{
|
||||
entity: User,
|
||||
options: {
|
||||
label: '用户',
|
||||
},
|
||||
},
|
||||
],
|
||||
pages: [],
|
||||
});
|
||||
|
||||
await tushan.initialize();
|
||||
|
||||
const router = await buildRouter({
|
||||
tushan,
|
||||
auth: {
|
||||
local: async (username, password) => {
|
||||
if (username === 'tailchat' && password === adminPass) {
|
||||
return { username, title: 'Admin' };
|
||||
}
|
||||
|
||||
throw new Error('User not found');
|
||||
},
|
||||
},
|
||||
});
|
||||
app.use(router.routes()).use(router.allowedMethods());
|
||||
|
||||
app.listen(6789, () => {
|
||||
console.log('服务器已启动:', `http://localhost:6789/admin/`);
|
||||
});
|
||||
}
|
||||
|
||||
start();
|
@ -0,0 +1,43 @@
|
||||
import { Entity, ObjectIdColumn, Column, PrimaryColumn } from 'tushan';
|
||||
|
||||
@Entity({
|
||||
name: 'users',
|
||||
})
|
||||
export class User {
|
||||
@ObjectIdColumn()
|
||||
_id!: string;
|
||||
|
||||
@Column()
|
||||
username!: string;
|
||||
|
||||
@Column()
|
||||
email!: string;
|
||||
|
||||
@Column()
|
||||
password!: string;
|
||||
|
||||
@Column()
|
||||
nickname!: string;
|
||||
|
||||
@Column()
|
||||
discriminator!: string;
|
||||
|
||||
@Column({
|
||||
default: false,
|
||||
})
|
||||
temporary!: boolean;
|
||||
|
||||
@Column()
|
||||
avatar!: boolean;
|
||||
|
||||
@Column({
|
||||
enum: ['normalUser', 'pluginBot', 'thirdpartyBot'],
|
||||
default: 'normalUser',
|
||||
})
|
||||
type: string;
|
||||
|
||||
@Column({
|
||||
default: {},
|
||||
})
|
||||
settings: string;
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
{
|
||||
"extends": "../tsconfig.json",
|
||||
"ts-node": {
|
||||
"skipIgnore": true
|
||||
},
|
||||
"include": ["./**/*"]
|
||||
}
|
Loading…
Reference in New Issue