summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/auth/session
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-09-18 03:27:08 +0900
committerGitHub <noreply@github.com>2022-09-18 03:27:08 +0900
commitb75184ec8e3436200bacdcd832e3324702553d20 (patch)
tree8b7e316f29e95df921db57289c8b8da476d18f07 /packages/backend/src/server/api/endpoints/auth/session
parentUpdate ROADMAP.md (diff)
downloadsharkey-b75184ec8e3436200bacdcd832e3324702553d20.tar.gz
sharkey-b75184ec8e3436200bacdcd832e3324702553d20.tar.bz2
sharkey-b75184ec8e3436200bacdcd832e3324702553d20.zip
なんかもうめっちゃ変えた
Diffstat (limited to 'packages/backend/src/server/api/endpoints/auth/session')
-rw-r--r--packages/backend/src/server/api/endpoints/auth/session/generate.ts70
-rw-r--r--packages/backend/src/server/api/endpoints/auth/session/show.ts37
-rw-r--r--packages/backend/src/server/api/endpoints/auth/session/userkey.ts92
3 files changed, 126 insertions, 73 deletions
diff --git a/packages/backend/src/server/api/endpoints/auth/session/generate.ts b/packages/backend/src/server/api/endpoints/auth/session/generate.ts
index 717c3e5086..7f8325dbbd 100644
--- a/packages/backend/src/server/api/endpoints/auth/session/generate.ts
+++ b/packages/backend/src/server/api/endpoints/auth/session/generate.ts
@@ -1,9 +1,11 @@
import { v4 as uuid } from 'uuid';
-import config from '@/config/index.js';
-import define from '../../../define.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { AppsRepository, AuthSessionsRepository } from '@/models/index.js';
+import { IdService } from '@/core/IdService.js';
+import { Config } from '@/config.js';
+import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
-import { Apps, AuthSessions } from '@/models/index.js';
-import { genId } from '@/misc/gen-id.js';
export const meta = {
tags: ['auth'],
@@ -44,29 +46,45 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps) => {
- // Lookup app
- const app = await Apps.findOneBy({
- secret: ps.appSecret,
- });
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.config)
+ private config: Config,
- if (app == null) {
- throw new ApiError(meta.errors.noSuchApp);
- }
+ @Inject(DI.appsRepository)
+ private appsRepository: AppsRepository,
+
+ @Inject(DI.authSessionsRepository)
+ private authSessionsRepository: AuthSessionsRepository,
+
+ private idService: IdService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ // Lookup app
+ const app = await this.appsRepository.findOneBy({
+ secret: ps.appSecret,
+ });
- // Generate token
- const token = uuid();
+ if (app == null) {
+ throw new ApiError(meta.errors.noSuchApp);
+ }
- // Create session token document
- const doc = await AuthSessions.insert({
- id: genId(),
- createdAt: new Date(),
- appId: app.id,
- token: token,
- }).then(x => AuthSessions.findOneByOrFail(x.identifiers[0]));
+ // Generate token
+ const token = uuid();
- return {
- token: doc.token,
- url: `${config.authUrl}/${doc.token}`,
- };
-});
+ // Create session token document
+ const doc = await this.authSessionsRepository.insert({
+ id: this.idService.genId(),
+ createdAt: new Date(),
+ appId: app.id,
+ token: token,
+ }).then(x => this.authSessionsRepository.findOneByOrFail(x.identifiers[0]));
+
+ return {
+ token: doc.token,
+ url: `${this.config.authUrl}/${doc.token}`,
+ };
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/auth/session/show.ts b/packages/backend/src/server/api/endpoints/auth/session/show.ts
index 3f3a4d1427..dff4c74340 100644
--- a/packages/backend/src/server/api/endpoints/auth/session/show.ts
+++ b/packages/backend/src/server/api/endpoints/auth/session/show.ts
@@ -1,6 +1,9 @@
-import define from '../../../define.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { AuthSessionsRepository } from '@/models/index.js';
+import { AuthSessionEntityService } from '@/core/entities/AuthSessionEntityService.js';
+import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
-import { AuthSessions } from '@/models/index.js';
export const meta = {
tags: ['auth'],
@@ -46,15 +49,25 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, user) => {
- // Lookup session
- const session = await AuthSessions.findOneBy({
- token: ps.token,
- });
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.authSessionsRepository)
+ private authSessionsRepository: AuthSessionsRepository,
- if (session == null) {
- throw new ApiError(meta.errors.noSuchSession);
- }
+ private authSessionEntityService: AuthSessionEntityService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ // Lookup session
+ const session = await this.authSessionsRepository.findOneBy({
+ token: ps.token,
+ });
+
+ if (session == null) {
+ throw new ApiError(meta.errors.noSuchSession);
+ }
- return await AuthSessions.pack(session, user);
-});
+ return await this.authSessionEntityService.pack(session, me);
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/auth/session/userkey.ts b/packages/backend/src/server/api/endpoints/auth/session/userkey.ts
index 89884ed38a..9c9f13f502 100644
--- a/packages/backend/src/server/api/endpoints/auth/session/userkey.ts
+++ b/packages/backend/src/server/api/endpoints/auth/session/userkey.ts
@@ -1,6 +1,9 @@
-import define from '../../../define.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { UsersRepository, AppsRepository, AccessTokensRepository, AuthSessionsRepository } from '@/models/index.js';
+import { UserEntityService } from '@/core/entities/UserEntityService.js';
+import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
-import { Apps, AuthSessions, AccessTokens, Users } from '@/models/index.js';
export const meta = {
tags: ['auth'],
@@ -55,43 +58,62 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps) => {
- // Lookup app
- const app = await Apps.findOneBy({
- secret: ps.appSecret,
- });
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.usersRepository)
+ private usersRepository: UsersRepository,
- if (app == null) {
- throw new ApiError(meta.errors.noSuchApp);
- }
+ @Inject(DI.appsRepository)
+ private appsRepository: AppsRepository,
- // Fetch token
- const session = await AuthSessions.findOneBy({
- token: ps.token,
- appId: app.id,
- });
+ @Inject(DI.authSessionsRepository)
+ private authSessionsRepository: AuthSessionsRepository,
- if (session == null) {
- throw new ApiError(meta.errors.noSuchSession);
- }
+ @Inject(DI.accessTokensRepository)
+ private accessTokensRepository: AccessTokensRepository,
- if (session.userId == null) {
- throw new ApiError(meta.errors.pendingSession);
- }
+ private userEntityService: UserEntityService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ // Lookup app
+ const app = await this.appsRepository.findOneBy({
+ secret: ps.appSecret,
+ });
+
+ if (app == null) {
+ throw new ApiError(meta.errors.noSuchApp);
+ }
- // Lookup access token
- const accessToken = await AccessTokens.findOneByOrFail({
- appId: app.id,
- userId: session.userId,
- });
+ // Fetch token
+ const session = await this.authSessionsRepository.findOneBy({
+ token: ps.token,
+ appId: app.id,
+ });
- // Delete session
- AuthSessions.delete(session.id);
+ if (session == null) {
+ throw new ApiError(meta.errors.noSuchSession);
+ }
- return {
- accessToken: accessToken.token,
- user: await Users.pack(session.userId, null, {
- detail: true,
- }),
- };
-});
+ if (session.userId == null) {
+ throw new ApiError(meta.errors.pendingSession);
+ }
+
+ // Lookup access token
+ const accessToken = await this.accessTokensRepository.findOneByOrFail({
+ appId: app.id,
+ userId: session.userId,
+ });
+
+ // Delete session
+ this.authSessionsRepository.delete(session.id);
+
+ return {
+ accessToken: accessToken.token,
+ user: await this.userEntityService.pack(session.userId, null, {
+ detail: true,
+ }),
+ };
+ });
+ }
+}