From 6186f0f3d4135e315b9cfc5f5fe12800406ea25e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 7 Dec 2024 08:47:24 +0100 Subject: [PATCH] Setup API key strategy --- apps/api/src/app/auth/api-key.strategy.ts | 23 ++++++++++++++++++- .../ghostfolio/ghostfolio.service.ts | 3 +-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/apps/api/src/app/auth/api-key.strategy.ts b/apps/api/src/app/auth/api-key.strategy.ts index 0582326c9..1b86f9e9b 100644 --- a/apps/api/src/app/auth/api-key.strategy.ts +++ b/apps/api/src/app/auth/api-key.strategy.ts @@ -1,6 +1,9 @@ import { UserService } from '@ghostfolio/api/app/user/user.service'; import { ApiKeyService } from '@ghostfolio/api/services/api-key/api-key.service'; +import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { HEADER_KEY_TOKEN } from '@ghostfolio/common/config'; +import { hasRole } from '@ghostfolio/common/permissions'; import { HttpException, Injectable } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; @@ -14,6 +17,8 @@ export class ApiKeyStrategy extends PassportStrategy( ) { constructor( private readonly apiKeyService: ApiKeyService, + private readonly configurationService: ConfigurationService, + private readonly prismaService: PrismaService, private readonly userService: UserService ) { super( @@ -23,7 +28,23 @@ export class ApiKeyStrategy extends PassportStrategy( try { const user = await this.validateApiKey(apiKey); - // TODO: Add checks from JwtStrategy + if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { + if (hasRole(user, 'INACTIVE')) { + throw new HttpException( + getReasonPhrase(StatusCodes.TOO_MANY_REQUESTS), + StatusCodes.TOO_MANY_REQUESTS + ); + } + + await this.prismaService.analytics.upsert({ + create: { User: { connect: { id: user.id } } }, + update: { + activityCount: { increment: 1 }, + lastRequestAt: new Date() + }, + where: { userId: user.id } + }); + } done(null, user); } catch (error) { diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts index 7858e24f0..78685a61b 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts @@ -220,8 +220,7 @@ export class GhostfolioService { public async incrementDailyRequests({ userId }: { userId: string }) { await this.prismaService.analytics.update({ data: { - dataProviderGhostfolioDailyRequests: { increment: 1 }, - lastRequestAt: new Date() + dataProviderGhostfolioDailyRequests: { increment: 1 } }, where: { userId } });