diff options
| author | anatawa12 <anatawa12@icloud.com> | 2025-05-01 17:58:34 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-01 17:58:34 +0900 |
| commit | 795b8366b50324a92c39816fb4a3189177175d75 (patch) | |
| tree | e5869a67a1e89b075105c772d88caf33a97af82c /packages/backend/src/core/UtilityService.ts | |
| parent | Exclude suspended users note from most timelines (#15775) (diff) | |
| download | misskey-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.ts | 20 |
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 })); + } + } } |