Allow securing public api

This commit is contained in:
jaina heartles 2024-02-23 12:04:47 -08:00
parent d1e8653449
commit acec9de658
374 changed files with 412 additions and 353 deletions

View file

@ -91,6 +91,7 @@ type Source = {
signToActivityPubGet?: boolean;
checkActivityPubGetSignature?: boolean;
secureApiMode?: boolean;
perChannelMaxNoteCacheCount?: number;
perUserNotificationsMaxCount?: number;
@ -151,6 +152,7 @@ export type Config = {
customMOTD: string[] | undefined;
signToActivityPubGet: boolean | undefined;
checkActivityPubGetSignature: boolean | undefined;
secureApiMode: boolean | undefined;
version: string;
host: string;
@ -267,6 +269,7 @@ export function loadConfig(): Config {
customMOTD: config.customMOTD,
signToActivityPubGet: config.signToActivityPubGet,
checkActivityPubGetSignature: config.checkActivityPubGetSignature,
secureApiMode: config.secureApiMode,
mediaProxy: externalMediaProxy ?? internalMediaProxy,
externalMediaProxyEnabled: externalMediaProxy !== null && externalMediaProxy !== internalMediaProxy,
videoThumbnailGenerator: config.videoThumbnailGenerator ?

View file

@ -24,6 +24,7 @@ import { AuthenticateService, AuthenticationError } from './AuthenticateService.
import type { FastifyRequest, FastifyReply } from 'fastify';
import type { OnApplicationShutdown } from '@nestjs/common';
import type { IEndpointMeta, IEndpoint } from './endpoints.js';
import type { Config } from '@/config.js';
const accessDenied = {
message: 'Access denied.',
@ -38,6 +39,9 @@ export class ApiCallService implements OnApplicationShutdown {
private userIpHistoriesClearIntervalId: NodeJS.Timeout;
constructor(
@Inject(DI.config)
private config: Config,
@Inject(DI.userIpsRepository)
private userIpsRepository: UserIpsRepository,
@ -268,7 +272,9 @@ export class ApiCallService implements OnApplicationShutdown {
}
}
if (ep.meta.requireCredential || ep.meta.requireModerator || ep.meta.requireAdmin) {
const requireCredential = (ep.meta.requireCredential === 'always' ||
(ep.meta.requireCredential === 'conditional' && this.config.secureApiMode));
if (requireCredential || ep.meta.requireModerator || ep.meta.requireAdmin) {
if (user == null) {
throw new ApiError({
message: 'Credential required.',
@ -331,7 +337,7 @@ export class ApiCallService implements OnApplicationShutdown {
}
if (token && ((ep.meta.kind && !token.permission.some(p => p === ep.meta.kind))
|| (!ep.meta.kind && (ep.meta.requireCredential || ep.meta.requireModerator || ep.meta.requireAdmin)))) {
|| (!ep.meta.kind && (requireCredential || ep.meta.requireModerator || ep.meta.requireAdmin)))) {
throw new ApiError({
message: 'Your app does not have the necessary permissions to use this endpoint.',
code: 'PERMISSION_DENIED',

View file

@ -28,16 +28,16 @@ type File = {
// TODO: paramsの型をT['params']のスキーマ定義から推論する
type Executor<T extends IEndpointMeta, Ps extends Schema> =
(params: SchemaType<Ps>, user: T['requireCredential'] extends true ? MiLocalUser : MiLocalUser | null, token: MiAccessToken | null, file?: File, cleanup?: () => any, ip?: string | null, headers?: Record<string, string> | null) =>
(params: SchemaType<Ps>, user: T['requireCredential'] extends 'always' ? MiLocalUser : MiLocalUser | null, token: MiAccessToken | null, file?: File, cleanup?: () => any, ip?: string | null, headers?: Record<string, string> | null) =>
Promise<T['res'] extends undefined ? Response : SchemaType<NonNullable<T['res']>>>;
export abstract class Endpoint<T extends IEndpointMeta, Ps extends Schema> {
public exec: (params: any, user: T['requireCredential'] extends true ? MiLocalUser : MiLocalUser | null, token: MiAccessToken | null, file?: File, ip?: string | null, headers?: Record<string, string> | null) => Promise<any>;
public exec: (params: any, user: T['requireCredential'] extends 'always' ? MiLocalUser : MiLocalUser | null, token: MiAccessToken | null, file?: File, ip?: string | null, headers?: Record<string, string> | null) => Promise<any>;
constructor(meta: T, paramDef: Ps, cb: Executor<T, Ps>) {
const validate = ajv.compile(paramDef);
this.exec = (params: any, user: T['requireCredential'] extends true ? MiLocalUser : MiLocalUser | null, token: MiAccessToken | null, file?: File, ip?: string | null, headers?: Record<string, string> | null) => {
this.exec = (params: any, user: T['requireCredential'] extends 'always' ? MiLocalUser : MiLocalUser | null, token: MiAccessToken | null, file?: File, ip?: string | null, headers?: Record<string, string> | null) => {
let cleanup: undefined | (() => void) = undefined;
if (meta.requireFile) {

View file

@ -770,7 +770,7 @@ interface IEndpointMetaBase {
*
* false
*/
readonly requireCredential?: boolean;
readonly requireCredential?: 'always' | 'conditional' | 'never';
/**
* isModeratorなロールを必要とするか
@ -851,13 +851,13 @@ interface IEndpointMetaBase {
}
export type IEndpointMeta = (Omit<IEndpointMetaBase, 'requireCrential' | 'requireModerator' | 'requireAdmin'> & {
requireCredential?: false,
requireCredential?: 'conditional',
requireAdmin?: false,
requireModerator?: false,
}) | (Omit<IEndpointMetaBase, 'secure'> & {
secure: true,
}) | (Omit<IEndpointMetaBase, 'requireCredential' | 'kind'> & {
requireCredential: true,
requireCredential: 'always',
kind: (typeof permissions)[number],
}) | (Omit<IEndpointMetaBase, 'requireModerator' | 'kind'> & {
requireModerator: true,

View file

@ -13,7 +13,7 @@ import { AbuseUserReportEntityService } from '@/core/entities/AbuseUserReportEnt
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:abuse-user-reports',

View file

@ -15,6 +15,8 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: 'never',
res: {
type: 'object',
optional: false, nullable: false,

View file

@ -14,7 +14,7 @@ import { UserEntityService } from '@/core/entities/UserEntityService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'write:admin:account',
} as const;

View file

@ -13,7 +13,7 @@ import { ApiError } from '@/server/api/error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'read:admin:account',

View file

@ -13,7 +13,7 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:ad',
res: {

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:ad',

View file

@ -12,7 +12,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:ad',
res: {

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:ad',

View file

@ -10,7 +10,7 @@ import { AnnouncementService } from '@/core/AnnouncementService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:announcements',

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:announcements',

View file

@ -14,7 +14,7 @@ import { IdService } from '@/core/IdService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:announcements',

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:announcements',

View file

@ -8,7 +8,7 @@ import { EmailService } from '@/core/EmailService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:approve-user',
} as const;

View file

@ -10,7 +10,7 @@ import { AvatarDecorationService } from '@/core/AvatarDecorationService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageAvatarDecorations',
kind: 'write:admin:avatar-decorations',
} as const;

View file

@ -12,7 +12,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageAvatarDecorations',
kind: 'write:admin:avatar-decorations',
errors: {

View file

@ -15,7 +15,7 @@ import { AvatarDecorationService } from '@/core/AvatarDecorationService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageAvatarDecorations',
kind: 'read:admin:avatar-decorations',

View file

@ -12,7 +12,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageAvatarDecorations',
kind: 'write:admin:avatar-decorations',

View file

@ -12,7 +12,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'write:admin:delete-account',

View file

@ -12,7 +12,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'write:admin:delete-all-files-of-a-user',
} as const;

View file

@ -10,7 +10,7 @@ import { QueueService } from '@/core/QueueService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:drive',
} as const;

View file

@ -13,7 +13,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:drive',
} as const;

View file

@ -13,7 +13,7 @@ import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.j
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:drive',

View file

@ -14,7 +14,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:drive',

View file

@ -10,7 +10,7 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',
} as const;

View file

@ -14,7 +14,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',

View file

@ -17,7 +17,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',

View file

@ -10,7 +10,7 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',
} as const;

View file

@ -10,7 +10,7 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',

View file

@ -9,7 +9,7 @@ import { QueueService } from '@/core/QueueService.js';
export const meta = {
secure: true,
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
} as const;

View file

@ -15,7 +15,7 @@ import { sqlLikeEscape } from '@/misc/sql-like-escape.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'read:admin:emoji',

View file

@ -15,7 +15,7 @@ import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'read:admin:emoji',

View file

@ -10,7 +10,7 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',
} as const;

View file

@ -10,7 +10,7 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',
} as const;

View file

@ -10,7 +10,7 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',
} as const;

View file

@ -10,7 +10,7 @@ import { CustomEmojiService } from '@/core/CustomEmojiService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',
} as const;

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireRolePolicy: 'canManageCustomEmojis',
kind: 'write:admin:emoji',

View file

@ -12,7 +12,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:federation',
} as const;

View file

@ -13,7 +13,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:federation',
} as const;

View file

@ -12,7 +12,7 @@ import { QueueService } from '@/core/QueueService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:federation',
} as const;

View file

@ -14,7 +14,7 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:federation',
} as const;

View file

@ -9,7 +9,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
import { DI } from '@/di-symbols.js';
export const meta = {
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'read:admin:index-stats',

View file

@ -9,7 +9,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
import { DI } from '@/di-symbols.js';
export const meta = {
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'read:admin:table-stats',

View file

@ -12,7 +12,7 @@ import { IdService } from '@/core/IdService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:user-ips',
res: {

View file

@ -16,7 +16,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:invite-codes',

View file

@ -12,7 +12,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:invite-codes',

View file

@ -13,7 +13,7 @@ import { DEFAULT_POLICIES } from '@/core/RoleService.js';
export const meta = {
tags: ['meta'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'read:admin:meta',

View file

@ -6,7 +6,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:nsfw-user',
} as const;

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:promo',

View file

@ -11,7 +11,7 @@ import { QueueService } from '@/core/QueueService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:queue',
} as const;

View file

@ -11,7 +11,7 @@ import type { DeliverQueue } from '@/core/QueueModule.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:queue',

View file

@ -11,7 +11,7 @@ import type { InboxQueue } from '@/core/QueueModule.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:queue',

View file

@ -11,7 +11,7 @@ import { QueueService } from '@/core/QueueService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:queue',
} as const;

View file

@ -10,7 +10,7 @@ import type { DbQueue, DeliverQueue, EndedPollNotificationQueue, InboxQueue, Obj
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:emoji',

View file

@ -12,7 +12,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:relays',

View file

@ -10,7 +10,7 @@ import { RelayService } from '@/core/RelayService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:relays',

View file

@ -10,7 +10,7 @@ import { RelayService } from '@/core/RelayService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:relays',
} as const;

View file

@ -15,7 +15,7 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:reset-password',

View file

@ -15,7 +15,7 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:resolve-abuse-user-report',
} as const;

View file

@ -13,7 +13,7 @@ import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['admin', 'role'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:roles',

View file

@ -11,7 +11,7 @@ import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['admin', 'role'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'write:admin:roles',

View file

@ -13,7 +13,7 @@ import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['admin', 'role'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'write:admin:roles',

View file

@ -12,7 +12,7 @@ import { RoleEntityService } from '@/core/entities/RoleEntityService.js';
export const meta = {
tags: ['admin', 'role'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:roles',

View file

@ -13,7 +13,7 @@ import { RoleEntityService } from '@/core/entities/RoleEntityService.js';
export const meta = {
tags: ['admin', 'role'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:roles',

View file

@ -13,7 +13,7 @@ import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['admin', 'role'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:roles',

View file

@ -11,7 +11,7 @@ import { MetaService } from '@/core/MetaService.js';
export const meta = {
tags: ['admin', 'role'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'write:admin:roles',
} as const;

View file

@ -14,7 +14,7 @@ import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['admin', 'role'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'write:admin:roles',

View file

@ -16,7 +16,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['admin', 'role', 'users'],
requireCredential: false,
requireCredential: 'never',
requireAdmin: true,
kind: 'read:admin:roles',

View file

@ -10,7 +10,7 @@ import { EmailService } from '@/core/EmailService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:send-email',
} as const;

View file

@ -12,7 +12,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js';
import { DI } from '@/di-symbols.js';
export const meta = {
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:server-info',

View file

@ -13,7 +13,7 @@ import { ModerationLogEntityService } from '@/core/entities/ModerationLogEntityS
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'read:admin:show-moderation-log',

View file

@ -14,7 +14,7 @@ import { IdService } from '@/core/IdService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:show-user',

View file

@ -14,7 +14,7 @@ import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'read:admin:show-users',

View file

@ -7,7 +7,7 @@ import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:silence-user',
} as const;

View file

@ -19,7 +19,7 @@ import { QueueService } from '@/core/QueueService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:suspend-user',
} as const;

View file

@ -6,7 +6,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:unnsfw-user',
} as const;

View file

@ -12,7 +12,7 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:unset-user-avatar',
} as const;

View file

@ -12,7 +12,7 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:unset-user-banner',
} as const;

View file

@ -6,7 +6,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:unsilence-user',
} as const;

View file

@ -13,7 +13,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:unsuspend-user',
} as const;

View file

@ -12,7 +12,7 @@ import { MetaService } from '@/core/MetaService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireAdmin: true,
kind: 'write:admin:meta',
} as const;

View file

@ -12,7 +12,7 @@ import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireCredential: 'always',
requireModerator: true,
kind: 'write:admin:user-note',
} as const;

View file

@ -14,7 +14,7 @@ import type { AnnouncementReadsRepository, AnnouncementsRepository } from '@/mod
export const meta = {
tags: ['meta'],
requireCredential: false,
requireCredential: 'never',
res: {
type: 'array',

View file

@ -16,7 +16,7 @@ import { ApiError } from '../../error.js';
export const meta = {
tags: ['antennas'],
requireCredential: true,
requireCredential: 'always',
prohibitMoved: true,

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../error.js';
export const meta = {
tags: ['antennas'],
requireCredential: true,
requireCredential: 'always',
kind: 'write:account',

View file

@ -12,7 +12,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['antennas', 'account'],
requireCredential: true,
requireCredential: 'always',
kind: 'read:account',

View file

@ -19,7 +19,7 @@ import { ApiError } from '../../error.js';
export const meta = {
tags: ['antennas', 'account', 'notes'],
requireCredential: true,
requireCredential: 'always',
kind: 'read:account',

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../error.js';
export const meta = {
tags: ['antennas', 'account'],
requireCredential: true,
requireCredential: 'always',
kind: 'read:account',

View file

@ -14,7 +14,7 @@ import { ApiError } from '../../error.js';
export const meta = {
tags: ['antennas'],
requireCredential: true,
requireCredential: 'always',
prohibitMoved: true,

View file

@ -11,7 +11,7 @@ import { ApResolverService } from '@/core/activitypub/ApResolverService.js';
export const meta = {
tags: ['federation'],
requireCredential: true,
requireCredential: 'always',
kind: 'read:federation',
limit: {

View file

@ -24,7 +24,7 @@ import { ApiError } from '../../error.js';
export const meta = {
tags: ['federation'],
requireCredential: true,
requireCredential: 'always',
kind: 'read:account',
limit: {

View file

@ -15,7 +15,7 @@ import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['app'],
requireCredential: false,
requireCredential: 'never',
res: {
type: 'object',

View file

@ -13,6 +13,8 @@ import { ApiError } from '../../error.js';
export const meta = {
tags: ['app'],
requireCredential: 'never',
errors: {
noSuchApp: {
message: 'No such app.',

View file

@ -15,7 +15,7 @@ import { ApiError } from '../../error.js';
export const meta = {
tags: ['auth'],
requireCredential: true,
requireCredential: 'always',
secure: true,

View file

@ -15,7 +15,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['auth'],
requireCredential: false,
requireCredential: 'never',
res: {
type: 'object',

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['auth'],
requireCredential: false,
requireCredential: 'never',
errors: {
noSuchSession: {

View file

@ -13,7 +13,7 @@ import { ApiError } from '../../../error.js';
export const meta = {
tags: ['auth'],
requireCredential: false,
requireCredential: 'never',
res: {
type: 'object',

Some files were not shown because too many files have changed in this diff Show more