forked from labring/FastGPT
-
Notifications
You must be signed in to change notification settings - Fork 34
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
104 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
import type { NextApiRequest, NextApiResponse } from 'next'; | ||
import { jsonRes } from '@/service/response'; | ||
import { connectToDatabase } from '@/service/mongo'; | ||
import { authUser } from '@/service/utils/auth'; | ||
import { GridFSStorage } from '@/service/lib/gridfs'; | ||
|
||
export default async function handler(req: NextApiRequest, res: NextApiResponse<any>) { | ||
try { | ||
await connectToDatabase(); | ||
|
||
const { fileId } = req.query as { fileId: string }; | ||
|
||
if (!fileId) { | ||
throw new Error('fileId is empty'); | ||
} | ||
|
||
const { userId } = await authUser({ req }); | ||
|
||
const gridFs = new GridFSStorage('dataset', userId); | ||
|
||
await gridFs.delete(fileId); | ||
|
||
jsonRes(res); | ||
} catch (error) { | ||
jsonRes(res, { | ||
code: 500, | ||
error | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
import type { NextApiRequest, NextApiResponse } from 'next'; | ||
import { jsonRes } from '@/service/response'; | ||
import { connectToDatabase } from '@/service/mongo'; | ||
import { authUser } from '@/service/utils/auth'; | ||
import jwt from 'jsonwebtoken'; | ||
import { ERROR_ENUM } from '@/service/errorCode'; | ||
|
||
export default async function handler(req: NextApiRequest, res: NextApiResponse<any>) { | ||
try { | ||
await connectToDatabase(); | ||
|
||
const { fileId } = req.query as { fileId: string }; | ||
|
||
if (!fileId) { | ||
throw new Error('fileId is empty'); | ||
} | ||
|
||
const { userId } = await authUser({ req }); | ||
|
||
const token = await createFileToken({ | ||
userId, | ||
fileId | ||
}); | ||
|
||
jsonRes(res, { | ||
data: `/api/plugins/file/read?token=${token}` | ||
}); | ||
} catch (error) { | ||
jsonRes(res, { | ||
code: 500, | ||
error | ||
}); | ||
} | ||
} | ||
|
||
export const createFileToken = (data: { userId: string; fileId: string }) => { | ||
if (!process.env.FILE_TOKEN_KEY) { | ||
return Promise.reject('System unset FILE_TOKEN_KEY'); | ||
} | ||
const expiredTime = Math.floor(Date.now() / 1000) + 60 * 30; | ||
|
||
const key = process.env.FILE_TOKEN_KEY as string; | ||
const token = jwt.sign( | ||
{ | ||
...data, | ||
exp: expiredTime | ||
}, | ||
key | ||
); | ||
return Promise.resolve(token); | ||
}; | ||
|
||
export const authFileToken = (token?: string) => | ||
new Promise<{ userId: string; fileId: string }>((resolve, reject) => { | ||
if (!token) { | ||
return reject(ERROR_ENUM.unAuthFile); | ||
} | ||
const key = process.env.FILE_TOKEN_KEY as string; | ||
|
||
jwt.verify(token, key, function (err, decoded: any) { | ||
if (err || !decoded?.userId || !decoded?.fileId) { | ||
reject(ERROR_ENUM.unAuthFile); | ||
return; | ||
} | ||
resolve({ | ||
userId: decoded.userId, | ||
fileId: decoded.fileId | ||
}); | ||
}); | ||
}); |