mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 17:36:08 +08:00
core: better user_file permission control
This commit is contained in:
1 parent
17cab51f5f
commit
2efb0e6281
3 files changed
+8
-4
No files matched your search
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "hydrooj",
|
||||
"version": "3.3.18",
|
||||
"version": "3.3.19",
|
||||
"bin": "bin/hydrooj.js",
|
||||
"main": "src/loader",
|
||||
"module": "src/loader",
|
||||
|
||||
@@ -28,6 +28,7 @@ class SwitchLanguageHandler extends Handler {
|
||||
export class FilesHandler extends Handler {
|
||||
@param('pjax', Types.Boolean)
|
||||
async get(domainId: string, pjax = false) {
|
||||
if (!this.user._files?.length) this.checkPriv(PRIV.PRIV_CREATE_FILE);
|
||||
const files = sortFiles(this.user._files);
|
||||
if (pjax) {
|
||||
this.response.body = {
|
||||
@@ -44,6 +45,7 @@ export class FilesHandler extends Handler {
|
||||
|
||||
@post('filename', Types.Name, true)
|
||||
async postUploadFile(domainId: string, filename: string) {
|
||||
this.checkPriv(PRIV.PRIV_CREATE_FILE);
|
||||
if ((this.user._files?.length || 0) >= system.get('limit.user_files')) {
|
||||
throw new ForbiddenError('File limit exceeded.');
|
||||
}
|
||||
@@ -87,6 +89,8 @@ export class FSDownloadHandler extends Handler {
|
||||
@param('filename', Types.Name)
|
||||
@param('noDisposition', Types.Boolean)
|
||||
async get(domainId: string, uid: number, filename: string, noDisposition = false) {
|
||||
const targetUser = await user.getById('system', uid);
|
||||
if (!targetUser.hasPriv(PRIV.PRIV_CREATE_FILE)) throw new ForbiddenError('Access denied');
|
||||
this.response.addHeader('Cache-Control', 'public');
|
||||
const target = `user/${uid}/${filename}`;
|
||||
const file = await storage.getMeta(target);
|
||||
@@ -110,7 +114,7 @@ export class SwitchAccountHandler extends Handler {
|
||||
|
||||
export async function apply() {
|
||||
Route('switch_language', '/language/:lang', SwitchLanguageHandler);
|
||||
Route('home_files', '/file', FilesHandler, PRIV.PRIV_CREATE_FILE);
|
||||
Route('home_files', '/file', FilesHandler);
|
||||
Route('fs_download', '/file/:uid/:filename', FSDownloadHandler);
|
||||
Route('switch_account', '/account', SwitchAccountHandler, PRIV.PRIV_EDIT_SYSTEM);
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@ import {
|
||||
ValidationError,
|
||||
} from '../error';
|
||||
import {
|
||||
ProblemConfig, ProblemDoc, ProblemStatusDoc,
|
||||
Tdoc, User,
|
||||
ProblemDoc, ProblemStatusDoc, Tdoc,
|
||||
User,
|
||||
} from '../interface';
|
||||
import paginate from '../lib/paginate';
|
||||
import { isPid, parsePid as convertPid } from '../lib/validator';
|
||||
|
||||
Reference in new issue
Block a user