summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/UtilityService.ts
diff options
context:
space:
mode:
authoranatawa12 <anatawa12@icloud.com>2025-05-01 17:58:34 +0900
committerGitHub <noreply@github.com>2025-05-01 17:58:34 +0900
commit795b8366b50324a92c39816fb4a3189177175d75 (patch)
treee5869a67a1e89b075105c772d88caf33a97af82c /packages/backend/src/core/UtilityService.ts
parentExclude suspended users note from most timelines (#15775) (diff)
downloadmisskey-795b8366b50324a92c39816fb4a3189177175d75.tar.gz
misskey-795b8366b50324a92c39816fb4a3189177175d75.tar.bz2
misskey-795b8366b50324a92c39816fb4a3189177175d75.zip
Block deliver by software (#15727)
* feat(backend): suspend instance by software * feat(frontend): suspend instance by software * docs(chaangelog): 連合先のソフトウェア及びバージョン名により配信停止を行えるようになりました * chore: 例で使うバージョン名を変える * fix: broken lockfile * fix: broken lock file * fix broken lock file * update changelog * fix dependencies * Update CHANGELOG.md --------- Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Diffstat (limited to 'packages/backend/src/core/UtilityService.ts')
-rw-r--r--packages/backend/src/core/UtilityService.ts20
1 files changed, 19 insertions, 1 deletions
diff --git a/packages/backend/src/core/UtilityService.ts b/packages/backend/src/core/UtilityService.ts
index 23fb928ac9..67ec6cc7b0 100644
--- a/packages/backend/src/core/UtilityService.ts
+++ b/packages/backend/src/core/UtilityService.ts
@@ -6,10 +6,12 @@
import { URL, domainToASCII } from 'node:url';
import { Inject, Injectable } from '@nestjs/common';
import RE2 from 're2';
+import semver from 'semver';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { bindThis } from '@/decorators.js';
-import { MiMeta } from '@/models/Meta.js';
+import { MiMeta, SoftwareSuspension } from '@/models/Meta.js';
+import { MiInstance } from '@/models/Instance.js';
@Injectable()
export class UtilityService {
@@ -143,4 +145,20 @@ export class UtilityService {
const host = this.extractDbHost(uri);
return this.isFederationAllowedHost(host);
}
+
+ @bindThis
+ public isDeliverSuspendedSoftware(software: Pick<MiInstance, 'softwareName' | 'softwareVersion'>): SoftwareSuspension | undefined {
+ if (software.softwareName == null) return undefined;
+ if (software.softwareVersion == null) {
+ // software version is null; suspend iff versionRange is *
+ return this.meta.deliverSuspendedSoftware.find(x =>
+ x.software === software.softwareName
+ && x.versionRange.trim() === '*');
+ } else {
+ const softwareVersion = software.softwareVersion;
+ return this.meta.deliverSuspendedSoftware.find(x =>
+ x.software === software.softwareName
+ && semver.satisfies(softwareVersion, x.versionRange, { includePrerelease: true }));
+ }
+ }
}