spec(OAuth2): クライアント情報のDiscoveryの対応していないクライアントでも認証できるように (MisskeyIO#443)

This commit is contained in:
まっちゃとーにゅ 2024-02-12 11:35:19 +09:00 committed by GitHub
parent dea2e3183f
commit bb4583f0be
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 969 additions and 10 deletions

View file

@ -0,0 +1,30 @@
/*
* SPDX-FileCopyrightText: syuilo and other misskey contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { PrimaryColumn, Entity, Column, Index } from 'typeorm';
@Entity('indie_auth_client')
export class MiIndieAuthClient {
@PrimaryColumn('varchar', {
length: 512,
})
public id: string;
@Index()
@Column('timestamp with time zone', {
default: () => 'CURRENT_TIMESTAMP',
})
public createdAt: Date;
@Column('varchar', {
length: 256, nullable: true,
})
public name: string | null;
@Column('varchar', {
array: true, length: 512, default: '{}',
})
public redirectUris: string[];
}

View file

@ -5,7 +5,77 @@
import { Module } from '@nestjs/common';
import { DI } from '@/di-symbols.js';
import { MiAbuseReportResolver, MiAbuseUserReport, MiAccessToken, MiAd, MiAnnouncement, MiAnnouncementRead, MiAntenna, MiApp, MiAuthSession, MiAvatarDecoration, MiBlocking, MiChannel, MiChannelFavorite, MiChannelFollowing, MiClip, MiClipFavorite, MiClipNote, MiDriveFile, MiDriveFolder, MiEmoji, MiFlash, MiFlashLike, MiFollowRequest, MiFollowing, MiGalleryLike, MiGalleryPost, MiHashtag, MiInstance, MiMeta, MiModerationLog, MiMuting, MiNote, MiNoteFavorite, MiNoteReaction, MiNoteThreadMuting, MiNoteUnread, MiPage, MiPageLike, MiPasswordResetRequest, MiPoll, MiPollVote, MiPromoNote, MiPromoRead, MiRegistrationTicket, MiRegistryItem, MiRelay, MiRenoteMuting, MiRetentionAggregation, MiRole, MiRoleAssignment, MiSignin, MiSwSubscription, MiUsedUsername, MiUser, MiUserIp, MiUserKeypair, MiUserList, MiUserListFavorite, MiUserListMembership, MiUserMemo, MiUserNotePining, MiUserPending, MiUserProfile, MiUserPublickey, MiUserSecurityKey, MiWebhook, MiBubbleGameRecord, MiReversiGame } from './_.js';
import {
MiAbuseReportResolver,
MiAbuseUserReport,
MiAccessToken,
MiAd,
MiAnnouncement,
MiAnnouncementRead,
MiAntenna,
MiApp,
MiAuthSession,
MiAvatarDecoration,
MiBlocking,
MiChannel,
MiChannelFavorite,
MiChannelFollowing,
MiClip,
MiClipFavorite,
MiClipNote,
MiDriveFile,
MiDriveFolder,
MiEmoji,
MiFlash,
MiFlashLike,
MiFollowRequest,
MiFollowing,
MiGalleryLike,
MiGalleryPost,
MiHashtag,
MiIndieAuthClient,
MiInstance,
MiMeta,
MiModerationLog,
MiMuting,
MiNote,
MiNoteFavorite,
MiNoteReaction,
MiNoteThreadMuting,
MiNoteUnread,
MiPage,
MiPageLike,
MiPasswordResetRequest,
MiPoll,
MiPollVote,
MiPromoNote,
MiPromoRead,
MiRegistrationTicket,
MiRegistryItem,
MiRelay,
MiRenoteMuting,
MiRetentionAggregation,
MiRole,
MiRoleAssignment,
MiSignin,
MiSwSubscription,
MiUsedUsername,
MiUser,
MiUserIp,
MiUserKeypair,
MiUserList,
MiUserListFavorite,
MiUserListMembership,
MiUserMemo,
MiUserNotePining,
MiUserPending,
MiUserProfile,
MiUserPublickey,
MiUserSecurityKey,
MiWebhook,
MiBubbleGameRecord,
MiReversiGame,
} from './_.js';
import type { DataSource } from 'typeorm';
import type { Provider } from '@nestjs/common';
@ -219,6 +289,12 @@ const $hashtagsRepository: Provider = {
inject: [DI.db],
};
const $indieAuthClientsRepository: Provider = {
provide: DI.indieAuthClientsRepository,
useFactory: (db: DataSource) => db.getRepository(MiIndieAuthClient),
inject: [DI.db],
};
const $abuseUserReportsRepository: Provider = {
provide: DI.abuseUserReportsRepository,
useFactory: (db: DataSource) => db.getRepository(MiAbuseUserReport),
@ -456,6 +532,7 @@ const $abuseReportResolversRepository: Provider = {
$blockingsRepository,
$swSubscriptionsRepository,
$hashtagsRepository,
$indieAuthClientsRepository,
$abuseUserReportsRepository,
$registrationTicketsRepository,
$authSessionsRepository,
@ -526,6 +603,7 @@ const $abuseReportResolversRepository: Provider = {
$blockingsRepository,
$swSubscriptionsRepository,
$hashtagsRepository,
$indieAuthClientsRepository,
$abuseUserReportsRepository,
$registrationTicketsRepository,
$authSessionsRepository,

View file

@ -27,6 +27,7 @@ import { MiFollowRequest } from '@/models/FollowRequest.js';
import { MiGalleryLike } from '@/models/GalleryLike.js';
import { MiGalleryPost } from '@/models/GalleryPost.js';
import { MiHashtag } from '@/models/Hashtag.js';
import { MiIndieAuthClient } from '@/models/IndieAuthClient.js';
import { MiInstance } from '@/models/Instance.js';
import { MiMeta } from '@/models/Meta.js';
import { MiModerationLog } from '@/models/ModerationLog.js';
@ -98,6 +99,7 @@ export {
MiGalleryLike,
MiGalleryPost,
MiHashtag,
MiIndieAuthClient,
MiInstance,
MiMeta,
MiModerationLog,
@ -168,6 +170,7 @@ export type FollowRequestsRepository = Repository<MiFollowRequest>;
export type GalleryLikesRepository = Repository<MiGalleryLike>;
export type GalleryPostsRepository = Repository<MiGalleryPost>;
export type HashtagsRepository = Repository<MiHashtag>;
export type IndieAuthClientsRepository = Repository<MiIndieAuthClient>;
export type InstancesRepository = Repository<MiInstance>;
export type MetasRepository = Repository<MiMeta>;
export type ModerationLogsRepository = Repository<MiModerationLog>;