feat(admin): basic tushan

pull/56/head
moonrailgun 2 years ago
parent cf4e517607
commit df3630ba93

File diff suppressed because it is too large Load Diff

@ -4,6 +4,7 @@ packages:
- 'client/web/plugins/**'
- 'client/packages/**'
- 'server'
- 'server/admin'
- 'server/packages/**'
- 'server/plugins/**'
- 'cli'

@ -5,8 +5,8 @@
"description": "",
"main": "index.js",
"scripts": {
"start": "ts-node src/index.ts",
"dev": "nodemon --watch 'src/**' --ext 'ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node src/index.ts'",
"start": "ts-node --transpile-only src/index.ts",
"dev": "nodemon --watch 'src/**' --ext 'ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node --transpile-only src/index.ts'",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
@ -18,13 +18,16 @@
"@koa/router": "^10.1.1",
"adminjs": "^5.10.4",
"koa": "^2.13.4",
"koa-session": "^6.2.0",
"koa-static": "^5.0.0",
"koa2-formidable": "^1.0.3",
"react-use": "^17.4.0",
"recharts": "^2.1.12"
"recharts": "^2.1.12",
"tushan": "github:msgbyte/tushan"
},
"devDependencies": {
"@types/koa": "^2.13.4",
"@types/koa-session": "^5.10.6",
"@types/koa-static": "^4.0.2",
"@types/node": "16.11.7",
"@types/react": "^17.0.38",

@ -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…
Cancel
Save