summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorCyberRex <hspwinx86@gmail.com>2022-07-05 00:21:01 +0900
committerGitHub <noreply@github.com>2022-07-05 00:21:01 +0900
commitcd07eb222e1990b30cae74b5fab9f12277322ef6 (patch)
tree5fdcbffd59e009ad667d68705e27a77f50065b64 /packages/backend/src
parentfix lint @typescript-eslint/ban-types (diff)
downloadsharkey-cd07eb222e1990b30cae74b5fab9f12277322ef6.tar.gz
sharkey-cd07eb222e1990b30cae74b5fab9f12277322ef6.tar.bz2
sharkey-cd07eb222e1990b30cae74b5fab9f12277322ef6.zip
Add additional drive capacity change support (#8867)
* Add additional drive capacity change support * Update packages/backend/src/server/api/endpoints/admin/drive-capacity-override.ts Co-authored-by: Johann150 <johann@qwertqwefsday.eu> * :art: * show instance default capacity in placeholder * fix * update api/drive * fix * remove : * fix lint Co-authored-by: Johann150 <johann@qwertqwefsday.eu> Co-authored-by: tamaina <tamaina@hotmail.co.jp>
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/models/entities/user.ts6
-rw-r--r--packages/backend/src/models/repositories/user.ts1
-rw-r--r--packages/backend/src/server/api/endpoints.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/admin/drive-capacity-override.ts47
-rw-r--r--packages/backend/src/server/api/endpoints/drive.ts2
-rw-r--r--packages/backend/src/services/drive/add-file.ts11
6 files changed, 66 insertions, 3 deletions
diff --git a/packages/backend/src/models/entities/user.ts b/packages/backend/src/models/entities/user.ts
index df92fb8259..bc9446be41 100644
--- a/packages/backend/src/models/entities/user.ts
+++ b/packages/backend/src/models/entities/user.ts
@@ -218,6 +218,12 @@ export class User {
})
public token: string | null;
+ @Column('integer', {
+ nullable: true,
+ comment: 'Overrides user drive capacity limit',
+ })
+ public driveCapacityOverrideMb: number | null;
+
constructor(data: Partial<User>) {
if (data == null) return;
diff --git a/packages/backend/src/models/repositories/user.ts b/packages/backend/src/models/repositories/user.ts
index 8a4e48efdd..645091395a 100644
--- a/packages/backend/src/models/repositories/user.ts
+++ b/packages/backend/src/models/repositories/user.ts
@@ -315,6 +315,7 @@ export const UserRepository = db.getRepository(User).extend({
} : undefined) : undefined,
emojis: populateEmojis(user.emojis, user.host),
onlineStatus: this.getOnlineStatus(user),
+ driveCapacityOverrideMb: user.driveCapacityOverrideMb,
...(opts.detail ? {
url: profile!.url,
diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts
index 4a2ecebd86..4644f34d94 100644
--- a/packages/backend/src/server/api/endpoints.ts
+++ b/packages/backend/src/server/api/endpoints.ts
@@ -314,6 +314,7 @@ import * as ep___users_search from './endpoints/users/search.js';
import * as ep___users_show from './endpoints/users/show.js';
import * as ep___users_stats from './endpoints/users/stats.js';
import * as ep___fetchRss from './endpoints/fetch-rss.js';
+import * as ep___admin_driveCapOverride from './endpoints/admin/drive-capacity-override.js';
const eps = [
['admin/meta', ep___admin_meta],
@@ -629,6 +630,7 @@ const eps = [
['users/search', ep___users_search],
['users/show', ep___users_show],
['users/stats', ep___users_stats],
+ ['admin/drive-capacity-override', ep___admin_driveCapOverride],
['fetch-rss', ep___fetchRss],
];
diff --git a/packages/backend/src/server/api/endpoints/admin/drive-capacity-override.ts b/packages/backend/src/server/api/endpoints/admin/drive-capacity-override.ts
new file mode 100644
index 0000000000..a4b29770e1
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/drive-capacity-override.ts
@@ -0,0 +1,47 @@
+import define from '../../define.js';
+import { Users } from '@/models/index.js';
+import { User } from '@/models/entities/user.js';
+import { insertModerationLog } from '@/services/insert-moderation-log.js';
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true,
+ requireModerator: true,
+} as const;
+
+export const paramDef = {
+ type: 'object',
+ properties: {
+ userId: { type: 'string', format: 'misskey:id' },
+ overrideMb: { type: 'number', nullable: true },
+ },
+ required: ['userId', 'overrideMb'],
+} as const;
+
+// eslint-disable-next-line import/no-default-export
+export default define(meta, paramDef, async (ps, me) => {
+ const user = await Users.findOneBy({ id: ps.userId });
+
+ if (user == null) {
+ throw new Error('user not found');
+ }
+
+ if (!Users.isLocalUser(user)) {
+ throw new Error('user is not local user');
+ }
+
+ /*if (user.isAdmin) {
+ throw new Error('cannot suspend admin');
+ }
+ if (user.isModerator) {
+ throw new Error('cannot suspend moderator');
+ }*/
+
+ await Users.update(user.id, {
+ driveCapacityOverrideMb: ps.overrideMb,
+ });
+
+ insertModerationLog(me, 'change-drive-capacity-override', {
+ targetId: user.id,
+ });
+});
diff --git a/packages/backend/src/server/api/endpoints/drive.ts b/packages/backend/src/server/api/endpoints/drive.ts
index 47e940cddd..82497adefa 100644
--- a/packages/backend/src/server/api/endpoints/drive.ts
+++ b/packages/backend/src/server/api/endpoints/drive.ts
@@ -39,7 +39,7 @@ export default define(meta, paramDef, async (ps, user) => {
const usage = await DriveFiles.calcDriveUsageOf(user.id);
return {
- capacity: 1024 * 1024 * instance.localDriveCapacityMb,
+ capacity: 1024 * 1024 * (user.driveCapacityOverrideMb || instance.localDriveCapacityMb),
usage: usage,
};
});
diff --git a/packages/backend/src/services/drive/add-file.ts b/packages/backend/src/services/drive/add-file.ts
index a25413187b..0dfad11cfb 100644
--- a/packages/backend/src/services/drive/add-file.ts
+++ b/packages/backend/src/services/drive/add-file.ts
@@ -307,7 +307,7 @@ async function deleteOldFile(user: IRemoteUser) {
type AddFileArgs = {
/** User who wish to add file */
- user: { id: User['id']; host: User['host'] } | null;
+ user: { id: User['id']; host: User['host']; driveCapacityOverrideMb: User['driveCapacityOverrideMb'] } | null;
/** File path */
path: string;
/** Name */
@@ -371,9 +371,16 @@ export async function addFile({
//#region Check drive usage
if (user && !isLink) {
const usage = await DriveFiles.calcDriveUsageOf(user);
+ const u = await Users.findOneBy({ id: user.id });
const instance = await fetchMeta();
- const driveCapacity = 1024 * 1024 * (Users.isLocalUser(user) ? instance.localDriveCapacityMb : instance.remoteDriveCapacityMb);
+ let driveCapacity = 1024 * 1024 * (Users.isLocalUser(user) ? instance.localDriveCapacityMb : instance.remoteDriveCapacityMb);
+
+ if (Users.isLocalUser(user) && u?.driveCapacityOverrideMb != null) {
+ driveCapacity = 1024 * 1024 * u.driveCapacityOverrideMb;
+ logger.debug('drive capacity override applied');
+ logger.debug(`overrideCap: ${driveCapacity}bytes, usage: ${usage}bytes, u+s: ${usage + info.size}bytes`);
+ }
logger.debug(`drive usage is ${usage} (max: ${driveCapacity})`);