Browse Source

Setup API key strategy

pull/4093/head
Thomas Kaul 9 months ago
parent
commit
6186f0f3d4
  1. 23
      apps/api/src/app/auth/api-key.strategy.ts
  2. 3
      apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts

23
apps/api/src/app/auth/api-key.strategy.ts

@ -1,6 +1,9 @@
import { UserService } from '@ghostfolio/api/app/user/user.service'; import { UserService } from '@ghostfolio/api/app/user/user.service';
import { ApiKeyService } from '@ghostfolio/api/services/api-key/api-key.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 { HEADER_KEY_TOKEN } from '@ghostfolio/common/config';
import { hasRole } from '@ghostfolio/common/permissions';
import { HttpException, Injectable } from '@nestjs/common'; import { HttpException, Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport'; import { PassportStrategy } from '@nestjs/passport';
@ -14,6 +17,8 @@ export class ApiKeyStrategy extends PassportStrategy(
) { ) {
constructor( constructor(
private readonly apiKeyService: ApiKeyService, private readonly apiKeyService: ApiKeyService,
private readonly configurationService: ConfigurationService,
private readonly prismaService: PrismaService,
private readonly userService: UserService private readonly userService: UserService
) { ) {
super( super(
@ -23,7 +28,23 @@ export class ApiKeyStrategy extends PassportStrategy(
try { try {
const user = await this.validateApiKey(apiKey); 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); done(null, user);
} catch (error) { } catch (error) {

3
apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts

@ -220,8 +220,7 @@ export class GhostfolioService {
public async incrementDailyRequests({ userId }: { userId: string }) { public async incrementDailyRequests({ userId }: { userId: string }) {
await this.prismaService.analytics.update({ await this.prismaService.analytics.update({
data: { data: {
dataProviderGhostfolioDailyRequests: { increment: 1 }, dataProviderGhostfolioDailyRequests: { increment: 1 }
lastRequestAt: new Date()
}, },
where: { userId } where: { userId }
}); });

Loading…
Cancel
Save