From 0ad444f43b357c48850fb1a91200ce170e773f6b Mon Sep 17 00:00:00 2001 From: rubikscraft Date: Sat, 12 Mar 2022 15:36:01 +0100 Subject: [PATCH] add info endpoint --- backend/src/app.module.ts | 15 +++------- backend/src/routes/api/api.module.ts | 15 ++++++++++ .../src/routes/api/info/info.controller.ts | 19 ++++++++++++ backend/src/routes/api/info/info.module.ts | 9 ++++++ backend/src/routes/routes.module.ts | 8 +++++ shared/src/dto/{ => api}/api.dto.ts | 0 shared/src/dto/{ => api}/auth.dto.ts | 30 +++++-------------- shared/src/dto/api/index.ts | 1 + shared/src/dto/api/info.dto.ts | 9 ++++++ shared/src/dto/jwt.dto.ts | 18 +++++++++++ 10 files changed, 91 insertions(+), 33 deletions(-) create mode 100644 backend/src/routes/api/api.module.ts create mode 100644 backend/src/routes/api/info/info.controller.ts create mode 100644 backend/src/routes/api/info/info.module.ts create mode 100644 backend/src/routes/routes.module.ts rename shared/src/dto/{ => api}/api.dto.ts (100%) rename shared/src/dto/{ => api}/auth.dto.ts (69%) create mode 100644 shared/src/dto/api/index.ts create mode 100644 shared/src/dto/api/info.dto.ts create mode 100644 shared/src/dto/jwt.dto.ts diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index d3fe6cc..79fda94 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -7,10 +7,7 @@ import { TypeOrmConfigService } from './config/typeorm.config.service'; import { PicsurLoggerModule } from './logger/logger.module'; import { AuthManagerModule } from './managers/auth/auth.module'; import { DemoManagerModule } from './managers/demo/demomanager.module'; -import { AuthModule } from './routes/api/auth/auth.module'; -import { ExperimentModule } from './routes/api/experiment/experiment.module'; -import { PrefModule } from './routes/api/pref/pref.module'; -import { ImageModule } from './routes/image/imageroute.module'; +import { PicsurRoutesModule } from './routes/routes.module'; @Module({ imports: [ @@ -22,14 +19,10 @@ import { ImageModule } from './routes/image/imageroute.module'; useExisting: ServeStaticConfigService, imports: [PicsurConfigModule], }), - - AuthManagerModule, - AuthModule, - ImageModule, - DemoManagerModule, - PrefModule, PicsurLoggerModule, - ExperimentModule, + AuthManagerModule, + DemoManagerModule, + PicsurRoutesModule, ], }) export class AppModule {} diff --git a/backend/src/routes/api/api.module.ts b/backend/src/routes/api/api.module.ts new file mode 100644 index 0000000..b22185e --- /dev/null +++ b/backend/src/routes/api/api.module.ts @@ -0,0 +1,15 @@ +import { Module } from '@nestjs/common'; +import { AuthModule } from './auth/auth.module'; +import { ExperimentModule } from './experiment/experiment.module'; +import { PrefModule } from './pref/pref.module'; +import { InfoModule } from './info/info.module'; + +@Module({ + imports: [ + AuthModule, + PrefModule, + ExperimentModule, + InfoModule, + ] +}) +export class PicsurApiModule {} diff --git a/backend/src/routes/api/info/info.controller.ts b/backend/src/routes/api/info/info.controller.ts new file mode 100644 index 0000000..40f4ab2 --- /dev/null +++ b/backend/src/routes/api/info/info.controller.ts @@ -0,0 +1,19 @@ +import { Controller, Get } from '@nestjs/common'; +import { InfoResponse } from 'picsur-shared/dist/dto/api/info.dto'; +import { HostConfigService } from '../../../config/host.config.service'; +import { NoAuth } from '../../../decorators/permissions.decorator'; + +@Controller('api/info') +export class InfoController { + constructor(private hostConfig: HostConfigService) {} + + @Get() + @NoAuth() + getInfo() { + const response: InfoResponse = { + demo: this.hostConfig.isDemo(), + production: this.hostConfig.isProduction(), + }; + return response; + } +} diff --git a/backend/src/routes/api/info/info.module.ts b/backend/src/routes/api/info/info.module.ts new file mode 100644 index 0000000..943c251 --- /dev/null +++ b/backend/src/routes/api/info/info.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { PicsurConfigModule } from '../../../config/config.module'; +import { InfoController } from './info.controller'; + +@Module({ + imports: [PicsurConfigModule], + controllers: [InfoController], +}) +export class InfoModule {} diff --git a/backend/src/routes/routes.module.ts b/backend/src/routes/routes.module.ts new file mode 100644 index 0000000..8bc7306 --- /dev/null +++ b/backend/src/routes/routes.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { PicsurApiModule } from './api/api.module'; +import { ImageModule } from './image/imageroute.module'; + +@Module({ + imports: [PicsurApiModule, ImageModule], +}) +export class PicsurRoutesModule {} diff --git a/shared/src/dto/api.dto.ts b/shared/src/dto/api/api.dto.ts similarity index 100% rename from shared/src/dto/api.dto.ts rename to shared/src/dto/api/api.dto.ts diff --git a/shared/src/dto/auth.dto.ts b/shared/src/dto/api/auth.dto.ts similarity index 69% rename from shared/src/dto/auth.dto.ts rename to shared/src/dto/api/auth.dto.ts index 6e85a88..ada92f2 100644 --- a/shared/src/dto/auth.dto.ts +++ b/shared/src/dto/api/auth.dto.ts @@ -1,12 +1,15 @@ import { Type } from 'class-transformer'; import { - IsArray, IsBoolean, - IsDefined, IsEnum, IsInt, IsNotEmpty, + IsArray, + IsBoolean, + IsDefined, + IsEnum, IsNotEmpty, IsOptional, - IsString, ValidateNested + IsString, + ValidateNested } from 'class-validator'; -import { EUser } from '../entities/user.entity'; -import { Permissions, PermissionsList } from './permissions'; +import { EUser } from '../../entities/user.entity'; +import { Permissions, PermissionsList } from '../permissions'; // Api @@ -63,20 +66,3 @@ export class AuthMeResponse { @IsDefined() newJwtToken: string; } - -// Extra - -export class JwtDataDto { - @IsDefined() - @ValidateNested() - @Type(() => EUser) - user: EUser; - - @IsOptional() - @IsInt() - iat?: number; - - @IsOptional() - @IsInt() - exp?: number; -} diff --git a/shared/src/dto/api/index.ts b/shared/src/dto/api/index.ts new file mode 100644 index 0000000..6deda0a --- /dev/null +++ b/shared/src/dto/api/index.ts @@ -0,0 +1 @@ +export * from './api.dto'; diff --git a/shared/src/dto/api/info.dto.ts b/shared/src/dto/api/info.dto.ts new file mode 100644 index 0000000..3dd9d8b --- /dev/null +++ b/shared/src/dto/api/info.dto.ts @@ -0,0 +1,9 @@ +import { IsDefined } from 'class-validator'; + +export class InfoResponse { + @IsDefined() + production: boolean; + + @IsDefined() + demo: boolean; +} diff --git a/shared/src/dto/jwt.dto.ts b/shared/src/dto/jwt.dto.ts new file mode 100644 index 0000000..f30704f --- /dev/null +++ b/shared/src/dto/jwt.dto.ts @@ -0,0 +1,18 @@ +import { Type } from 'class-transformer'; +import { IsDefined, IsInt, IsOptional, ValidateNested } from 'class-validator'; +import { EUser } from '../entities/user.entity'; + +export class JwtDataDto { + @IsDefined() + @ValidateNested() + @Type(() => EUser) + user: EUser; + + @IsOptional() + @IsInt() + iat?: number; + + @IsOptional() + @IsInt() + exp?: number; +}