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-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 user, app;
|
||||||
let domainApp = false;
|
let domainApp = false;
|
||||||
|
@ -14,30 +14,20 @@ const getAiProxy = async (req: IncomingMessage, res: ServerResponse, opts: Proxy
|
|||||||
const { createNotFoundPage } = opts;
|
const { createNotFoundPage } = opts;
|
||||||
const _u = new URL(req.url, 'http://localhost');
|
const _u = new URL(req.url, 'http://localhost');
|
||||||
const oss = opts.oss;
|
const oss = opts.oss;
|
||||||
const pathname = _u.pathname;
|
|
||||||
const params = _u.searchParams;
|
const params = _u.searchParams;
|
||||||
const password = params.get('p');
|
const password = params.get('p');
|
||||||
const hash = params.get('hash');
|
const hash = params.get('hash');
|
||||||
const dir = !!params.get('dir');
|
const dir = !!params.get('dir');
|
||||||
let objectName = '';
|
const recursive = !!params.get('recursive');
|
||||||
let owner = '';
|
const { objectName, app, owner, loginUser, isOwner } = await getObjectName(req);
|
||||||
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;
|
|
||||||
}
|
|
||||||
logger.debug(`proxy request: ${objectName}`, dir);
|
logger.debug(`proxy request: ${objectName}`, dir);
|
||||||
try {
|
try {
|
||||||
const loginUser = await getLoginUser(req);
|
|
||||||
if (dir) {
|
if (dir) {
|
||||||
if (loginUser?.tokenUser?.username !== owner) {
|
if (!isOwner) {
|
||||||
return createNotFoundPage('no permission');
|
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' });
|
res.writeHead(200, { 'content-type': 'application/json' });
|
||||||
const host = req.headers['host'] || 'localhost';
|
const host = req.headers['host'] || 'localhost';
|
||||||
res.end(
|
res.end(
|
||||||
@ -137,19 +127,8 @@ export const postProxy = async (req: IncomingMessage, res: ServerResponse, opts:
|
|||||||
if (!hash && !force) {
|
if (!hash && !force) {
|
||||||
return opts?.createNotFoundPage?.('no hash');
|
return opts?.createNotFoundPage?.('no hash');
|
||||||
}
|
}
|
||||||
let objectName = '';
|
const { objectName, isOwner } = await getObjectName(req);
|
||||||
let owner = '';
|
if (!isOwner) {
|
||||||
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) {
|
|
||||||
return opts?.createNotFoundPage?.('no permission');
|
return opts?.createNotFoundPage?.('no permission');
|
||||||
}
|
}
|
||||||
const end = (data: any, message?: string, code = 200) => {
|
const end = (data: any, message?: string, code = 200) => {
|
||||||
@ -212,6 +191,54 @@ export const postProxy = async (req: IncomingMessage, res: ServerResponse, opts:
|
|||||||
|
|
||||||
req.pipe(bb);
|
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 = {
|
type ProxyOptions = {
|
||||||
createNotFoundPage: (msg?: string) => any;
|
createNotFoundPage: (msg?: string) => any;
|
||||||
oss?: OssBase;
|
oss?: OssBase;
|
||||||
@ -224,6 +251,9 @@ export const aiProxy = async (req: IncomingMessage, res: ServerResponse, opts: P
|
|||||||
if (req.method === 'POST') {
|
if (req.method === 'POST') {
|
||||||
return postProxy(req, res, opts);
|
return postProxy(req, res, opts);
|
||||||
}
|
}
|
||||||
|
if (req.method === 'DELETE') {
|
||||||
|
return deleteProxy(req, res, opts);
|
||||||
|
}
|
||||||
|
|
||||||
return getAiProxy(req, res, opts);
|
return getAiProxy(req, res, opts);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user