update
This commit is contained in:
@@ -1 +1,2 @@
|
||||
import './page-proxy.ts';
|
||||
import './list.ts'
|
||||
189
src/routes/app-manager/proxy/list.ts
Normal file
189
src/routes/app-manager/proxy/list.ts
Normal file
@@ -0,0 +1,189 @@
|
||||
import { deleteUserAppFiles } from '@/modules/user-app/index.ts';
|
||||
import { app, redis } from '@/app.ts';
|
||||
import fs from 'fs';
|
||||
import { fileStore } from '@/modules/config.ts';
|
||||
import { getAppLoadStatus } from '@/modules/user-app/index.ts';
|
||||
import { getLoginUser } from '@/modules/auth.ts';
|
||||
|
||||
export class CenterUserApp {
|
||||
user: string;
|
||||
app: string;
|
||||
constructor({ user, app }: { user: string; app: string }) {
|
||||
this.user = user;
|
||||
this.app = app;
|
||||
}
|
||||
async clearCache() {
|
||||
const keys = await redis.keys('user:app:*');
|
||||
return keys;
|
||||
}
|
||||
async getCache() {
|
||||
const app = this.app;
|
||||
const user = this.user;
|
||||
const key = 'user:app:' + app + ':' + user;
|
||||
const value = await redis.get(key);
|
||||
if (!value) {
|
||||
return null;
|
||||
}
|
||||
return JSON.parse(value);
|
||||
}
|
||||
async getLoaded() {
|
||||
const app = this.app;
|
||||
const user = this.user;
|
||||
const value = await getAppLoadStatus(user, app);
|
||||
return value;
|
||||
}
|
||||
async clearCacheData() {
|
||||
const app = this.app;
|
||||
const user = this.user;
|
||||
const key = 'user:app:' + app + ':' + user;
|
||||
await redis.del(key);
|
||||
await redis.del('user:app:exist:' + app + ':' + user);
|
||||
await redis.del('user:app:set:' + app + ':' + user);
|
||||
await redis.del('user:app:status:' + app + ':' + user);
|
||||
await redis.del('user:app:permission:' + app + ':' + user);
|
||||
const userDomainApp = 'user:domain:app:' + user + ':' + app;
|
||||
const domainKeys = await redis.get(userDomainApp);
|
||||
if (domainKeys) {
|
||||
const domainKeysList = JSON.parse(domainKeys);
|
||||
domainKeysList.forEach(async (domain: string) => {
|
||||
await redis.del('domain:' + domain);
|
||||
});
|
||||
}
|
||||
await redis.del(userDomainApp);
|
||||
|
||||
// 删除所有文件
|
||||
deleteUserAppFiles(user, app);
|
||||
}
|
||||
}
|
||||
app
|
||||
.route({
|
||||
path: 'page-proxy-app',
|
||||
key: 'auth-admin',
|
||||
id: 'auth-admin',
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { user } = ctx.query;
|
||||
const loginUser = await getLoginUser(ctx.req);
|
||||
if (loginUser) {
|
||||
const root = ['admin', 'root'];
|
||||
if (root.includes(loginUser.tokenUser?.username)) {
|
||||
return;
|
||||
}
|
||||
ctx.throw(401, 'No Proxy App Permission');
|
||||
}
|
||||
ctx.throw(401, 'No Login And No Proxy App Permission');
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'page-proxy-app',
|
||||
key: 'list',
|
||||
middleware: ['auth-admin'],
|
||||
description: '获取应用列表',
|
||||
isDebug: true,
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const keys = await redis.keys('user:app:*');
|
||||
// const keys = await redis.keys('user:app:exist:*');
|
||||
// const data = await redis.mget(...keys);
|
||||
const domainList = await redis.keys('domain:*');
|
||||
ctx.body = {
|
||||
// data: data,
|
||||
keys,
|
||||
domainList,
|
||||
};
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'page-proxy-app',
|
||||
key: 'delete',
|
||||
middleware: ['auth-admin'],
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { user, app } = ctx.query;
|
||||
try {
|
||||
const userApp = new CenterUserApp({ user, app });
|
||||
await userApp.clearCacheData();
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
ctx.throw('删除失败');
|
||||
}
|
||||
ctx.body = 'successfully';
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'page-proxy-app',
|
||||
key: 'deleteAll',
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const keys = await redis.keys('user:app:*');
|
||||
for (const key of keys) {
|
||||
await redis.set(key, '', 'EX', 1);
|
||||
}
|
||||
ctx.body = {
|
||||
keys,
|
||||
};
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'page-proxy-app',
|
||||
key: 'clear',
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const keys = await redis.keys('user:app:*');
|
||||
if (keys.length > 0) {
|
||||
await redis.del(...keys);
|
||||
}
|
||||
fs.rmSync(fileStore, { recursive: true });
|
||||
|
||||
ctx.body = {
|
||||
keys,
|
||||
};
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'page-proxy-app',
|
||||
key: 'get',
|
||||
middleware: ['auth-admin'],
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { user, app } = ctx.query;
|
||||
if (!user || !app) {
|
||||
if (!user) {
|
||||
ctx.throw('user is required');
|
||||
}
|
||||
if (!app) {
|
||||
ctx.throw('app is required');
|
||||
}
|
||||
}
|
||||
const userApp = new CenterUserApp({ user, app });
|
||||
const cache = await userApp.getCache();
|
||||
if (!cache) {
|
||||
ctx.throw('Not Found App');
|
||||
}
|
||||
ctx.body = cache;
|
||||
})
|
||||
.addTo(app);
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'page-proxy-app',
|
||||
key: 'status',
|
||||
middleware: [],
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { user, app } = ctx.query;
|
||||
const userApp = new CenterUserApp({ user, app });
|
||||
const status = await userApp.getLoaded();
|
||||
ctx.body = status;
|
||||
})
|
||||
.addTo(app);
|
||||
Reference in New Issue
Block a user