basic support for Shared Access Accounts
This commit is contained in:
parent
7715f36a99
commit
fa5a46f379
22 changed files with 789 additions and 32 deletions
|
|
@ -88,6 +88,7 @@ import {
|
|||
SkApContext,
|
||||
SkApFetchLog,
|
||||
SkApInboxLog,
|
||||
SkSharedAccessToken,
|
||||
} from './_.js';
|
||||
import type { Provider } from '@nestjs/common';
|
||||
import type { DataSource } from 'typeorm';
|
||||
|
|
@ -152,6 +153,12 @@ const $apInboxLogsRepository: Provider = {
|
|||
inject: [DI.db],
|
||||
};
|
||||
|
||||
const $skSharedAccessToken: Provider = {
|
||||
provide: DI.sharedAccessToken,
|
||||
useFactory: (db: DataSource) => db.getRepository(SkSharedAccessToken).extend(miRepository as MiRepository<SkSharedAccessToken>),
|
||||
inject: [DI.db],
|
||||
};
|
||||
|
||||
const $noteFavoritesRepository: Provider = {
|
||||
provide: DI.noteFavoritesRepository,
|
||||
useFactory: (db: DataSource) => db.getRepository(MiNoteFavorite).extend(miRepository as MiRepository<MiNoteFavorite>),
|
||||
|
|
@ -585,6 +592,7 @@ const $noteScheduleRepository: Provider = {
|
|||
$apContextRepository,
|
||||
$apFetchLogsRepository,
|
||||
$apInboxLogsRepository,
|
||||
$skSharedAccessToken,
|
||||
$noteFavoritesRepository,
|
||||
$noteThreadMutingsRepository,
|
||||
$noteReactionsRepository,
|
||||
|
|
@ -667,6 +675,7 @@ const $noteScheduleRepository: Provider = {
|
|||
$apContextRepository,
|
||||
$apFetchLogsRepository,
|
||||
$apInboxLogsRepository,
|
||||
$skSharedAccessToken,
|
||||
$noteFavoritesRepository,
|
||||
$noteThreadMutingsRepository,
|
||||
$noteReactionsRepository,
|
||||
|
|
|
|||
51
packages/backend/src/models/SkSharedAccessToken.ts
Normal file
51
packages/backend/src/models/SkSharedAccessToken.ts
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { Column, Entity, Index, JoinColumn, ManyToOne, PrimaryColumn } from 'typeorm';
|
||||
import { id } from '@/models/util/id.js';
|
||||
import { MiUser } from '@/models/User.js';
|
||||
import { MiAccessToken } from '@/models/AccessToken.js';
|
||||
|
||||
@Entity('shared_access_token')
|
||||
export class SkSharedAccessToken {
|
||||
@PrimaryColumn({
|
||||
...id(),
|
||||
comment: 'ID of the access token that is shared',
|
||||
})
|
||||
public accessTokenId: string;
|
||||
|
||||
@ManyToOne(() => MiAccessToken, {
|
||||
onDelete: 'CASCADE',
|
||||
})
|
||||
@JoinColumn({
|
||||
name: 'accessTokenId',
|
||||
referencedColumnName: 'id',
|
||||
foreignKeyConstraintName: 'FK_shared_access_token_accessTokenId',
|
||||
})
|
||||
public accessToken: MiAccessToken;
|
||||
|
||||
@Index('IDX_shared_access_token_granteeId')
|
||||
@Column({
|
||||
...id(),
|
||||
comment: 'ID of the user who is allowed to use this access token',
|
||||
})
|
||||
public granteeId: string;
|
||||
|
||||
@ManyToOne(() => MiUser, {
|
||||
onDelete: 'CASCADE',
|
||||
})
|
||||
@JoinColumn({
|
||||
name: 'granteeId',
|
||||
referencedColumnName: 'id',
|
||||
foreignKeyConstraintName: 'FK_shared_access_token_granteeId',
|
||||
})
|
||||
public grantee?: MiUser;
|
||||
|
||||
constructor(props?: Partial<SkSharedAccessToken>) {
|
||||
if (props) {
|
||||
Object.assign(this, props);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -98,6 +98,7 @@ import { SkApInboxLog } from '@/models/SkApInboxLog.js';
|
|||
import { SkApFetchLog } from '@/models/SkApFetchLog.js';
|
||||
import { SkApContext } from '@/models/SkApContext.js';
|
||||
import { SkLatestNote } from '@/models/LatestNote.js';
|
||||
import { SkSharedAccessToken } from '@/models/SkSharedAccessToken.js';
|
||||
|
||||
export interface MiRepository<T extends ObjectLiteral> {
|
||||
createTableColumnNames(this: Repository<T> & MiRepository<T>): string[];
|
||||
|
|
@ -168,6 +169,7 @@ export {
|
|||
SkApContext,
|
||||
SkApFetchLog,
|
||||
SkApInboxLog,
|
||||
SkSharedAccessToken,
|
||||
MiAbuseUserReport,
|
||||
MiAbuseReportNotificationRecipient,
|
||||
MiAccessToken,
|
||||
|
|
@ -327,4 +329,5 @@ export type ChatApprovalsRepository = Repository<MiChatApproval> & MiRepository<
|
|||
export type BubbleGameRecordsRepository = Repository<MiBubbleGameRecord> & MiRepository<MiBubbleGameRecord>;
|
||||
export type ReversiGamesRepository = Repository<MiReversiGame> & MiRepository<MiReversiGame>;
|
||||
export type NoteEditRepository = Repository<NoteEdit> & MiRepository<NoteEdit>;
|
||||
export type NoteScheduleRepository = Repository<MiNoteSchedule>;
|
||||
export type NoteScheduleRepository = Repository<MiNoteSchedule> & MiRepository<MiNoteSchedule>;
|
||||
export type SharedAccessTokensRepository = Repository<SkSharedAccessToken> & MiRepository<SkSharedAccessToken>;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue