add delete ai proxy
This commit is contained in:
parent
d43bbba8ad
commit
46cb3d4e75
@ -135,7 +135,7 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR
|
||||
) {
|
||||
res.setHeader('Access-Control-Allow-Origin', '*');
|
||||
}
|
||||
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
||||
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, DELETE, PUT');
|
||||
|
||||
let user, app;
|
||||
let domainApp = false;
|
||||
|
@ -14,30 +14,20 @@ const getAiProxy = async (req: IncomingMessage, res: ServerResponse, opts: Proxy
|
||||
const { createNotFoundPage } = opts;
|
||||
const _u = new URL(req.url, 'http://localhost');
|
||||
const oss = opts.oss;
|
||||
const pathname = _u.pathname;
|
||||
const params = _u.searchParams;
|
||||
const password = params.get('p');
|
||||
const hash = params.get('hash');
|
||||
const dir = !!params.get('dir');
|
||||
let objectName = '';
|
||||
let owner = '';
|
||||
const { user, app } = getUserFromRequest(req);
|
||||
if (app === 'ai') {
|
||||
const version = params.get('version') || '1.0.0'; // root/ai
|
||||
objectName = pathname.replace(`/${user}/${app}/`, `${user}/${app}/${version}/`);
|
||||
owner = user;
|
||||
} else {
|
||||
objectName = pathname.replace(`/${user}/${app}/`, `${user}/`); // resources/root/
|
||||
owner = user;
|
||||
}
|
||||
const recursive = !!params.get('recursive');
|
||||
const { objectName, app, owner, loginUser, isOwner } = await getObjectName(req);
|
||||
|
||||
logger.debug(`proxy request: ${objectName}`, dir);
|
||||
try {
|
||||
const loginUser = await getLoginUser(req);
|
||||
if (dir) {
|
||||
if (loginUser?.tokenUser?.username !== owner) {
|
||||
if (!isOwner) {
|
||||
return createNotFoundPage('no permission');
|
||||
}
|
||||
const list = await oss.listObjects<true>(objectName, { recursive: true });
|
||||
const list = await oss.listObjects<true>(objectName, { recursive: recursive });
|
||||
res.writeHead(200, { 'content-type': 'application/json' });
|
||||
const host = req.headers['host'] || 'localhost';
|
||||
res.end(
|
||||
@ -137,19 +127,8 @@ export const postProxy = async (req: IncomingMessage, res: ServerResponse, opts:
|
||||
if (!hash && !force) {
|
||||
return opts?.createNotFoundPage?.('no hash');
|
||||
}
|
||||
let objectName = '';
|
||||
let owner = '';
|
||||
const { user, app } = getUserFromRequest(req);
|
||||
if (app === 'ai') {
|
||||
const version = params.get('version') || '1.0.0'; // root/ai
|
||||
objectName = pathname.replace(`/${user}/${app}/`, `${user}/${app}/${version}/`);
|
||||
owner = user;
|
||||
} else {
|
||||
objectName = pathname.replace(`/${user}/${app}/`, `${user}/`); // resources/root/
|
||||
owner = user;
|
||||
}
|
||||
const loginUser = await getLoginUser(req);
|
||||
if (loginUser?.tokenUser?.username !== owner) {
|
||||
const { objectName, isOwner } = await getObjectName(req);
|
||||
if (!isOwner) {
|
||||
return opts?.createNotFoundPage?.('no permission');
|
||||
}
|
||||
const end = (data: any, message?: string, code = 200) => {
|
||||
@ -212,6 +191,54 @@ export const postProxy = async (req: IncomingMessage, res: ServerResponse, opts:
|
||||
|
||||
req.pipe(bb);
|
||||
};
|
||||
export const getObjectName = async (req: IncomingMessage, opts?: { checkOwner?: boolean }) => {
|
||||
const _u = new URL(req.url, 'http://localhost');
|
||||
const pathname = _u.pathname;
|
||||
const params = _u.searchParams;
|
||||
const { user, app } = getUserFromRequest(req);
|
||||
const checkOwner = opts?.checkOwner ?? true;
|
||||
let objectName = '';
|
||||
let owner = '';
|
||||
if (app === 'ai') {
|
||||
const version = params.get('version') || '1.0.0'; // root/ai
|
||||
objectName = pathname.replace(`/${user}/${app}/`, `${user}/${app}/${version}/`);
|
||||
owner = user;
|
||||
} else {
|
||||
objectName = pathname.replace(`/${user}/${app}/`, `${user}/`); // resources/root/
|
||||
owner = user;
|
||||
}
|
||||
let isOwner = undefined;
|
||||
let loginUser: Awaited<ReturnType<typeof getLoginUser>> = null;
|
||||
if (checkOwner) {
|
||||
const loginUser = await getLoginUser(req);
|
||||
isOwner = loginUser?.tokenUser?.username === owner;
|
||||
}
|
||||
return {
|
||||
objectName,
|
||||
loginUser,
|
||||
owner,
|
||||
isOwner,
|
||||
app,
|
||||
user,
|
||||
};
|
||||
};
|
||||
export const deleteProxy = async (req: IncomingMessage, res: ServerResponse, opts: ProxyOptions) => {
|
||||
const { objectName, isOwner } = await getObjectName(req);
|
||||
let oss = opts.oss;
|
||||
if (!isOwner) {
|
||||
return opts?.createNotFoundPage?.('no permission');
|
||||
}
|
||||
try {
|
||||
await oss.deleteObject(objectName);
|
||||
res.writeHead(200, { 'Content-Type': 'application/json' });
|
||||
res.end(JSON.stringify({ success: true, message: 'delete success', objectName }));
|
||||
} catch (error) {
|
||||
logger.error('deleteProxy error', error);
|
||||
res.writeHead(500, { 'Content-Type': 'application/json' });
|
||||
res.end(JSON.stringify({ success: false, error: error }));
|
||||
}
|
||||
};
|
||||
|
||||
type ProxyOptions = {
|
||||
createNotFoundPage: (msg?: string) => any;
|
||||
oss?: OssBase;
|
||||
@ -224,6 +251,9 @@ export const aiProxy = async (req: IncomingMessage, res: ServerResponse, opts: P
|
||||
if (req.method === 'POST') {
|
||||
return postProxy(req, res, opts);
|
||||
}
|
||||
if (req.method === 'DELETE') {
|
||||
return deleteProxy(req, res, opts);
|
||||
}
|
||||
|
||||
return getAiProxy(req, res, opts);
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user