mirror of https://github.com/ghostfolio/ghostfolio
committed by
GitHub
22 changed files with 172 additions and 545 deletions
@ -1,87 +1,48 @@ |
|||||
|
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; |
||||
|
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; |
||||
import { AdminJobs } from '@ghostfolio/common/interfaces'; |
import { AdminJobs } from '@ghostfolio/common/interfaces'; |
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; |
import { permissions } from '@ghostfolio/common/permissions'; |
||||
import type { RequestWithUser } from '@ghostfolio/common/types'; |
|
||||
import { |
import { |
||||
Controller, |
Controller, |
||||
Delete, |
Delete, |
||||
Get, |
Get, |
||||
HttpException, |
|
||||
Inject, |
|
||||
Param, |
Param, |
||||
Query, |
Query, |
||||
UseGuards |
UseGuards |
||||
} from '@nestjs/common'; |
} from '@nestjs/common'; |
||||
import { REQUEST } from '@nestjs/core'; |
|
||||
import { AuthGuard } from '@nestjs/passport'; |
import { AuthGuard } from '@nestjs/passport'; |
||||
import { JobStatus } from 'bull'; |
import { JobStatus } from 'bull'; |
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
||||
|
|
||||
import { QueueService } from './queue.service'; |
import { QueueService } from './queue.service'; |
||||
|
|
||||
@Controller('admin/queue') |
@Controller('admin/queue') |
||||
export class QueueController { |
export class QueueController { |
||||
public constructor( |
public constructor(private readonly queueService: QueueService) {} |
||||
private readonly queueService: QueueService, |
|
||||
@Inject(REQUEST) private readonly request: RequestWithUser |
|
||||
) {} |
|
||||
|
|
||||
@Delete('job') |
@Delete('job') |
||||
@UseGuards(AuthGuard('jwt')) |
@HasPermission(permissions.accessAdminControl) |
||||
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
||||
public async deleteJobs( |
public async deleteJobs( |
||||
@Query('status') filterByStatus?: string |
@Query('status') filterByStatus?: string |
||||
): Promise<void> { |
): Promise<void> { |
||||
if ( |
|
||||
!hasPermission( |
|
||||
this.request.user.permissions, |
|
||||
permissions.accessAdminControl |
|
||||
) |
|
||||
) { |
|
||||
throw new HttpException( |
|
||||
getReasonPhrase(StatusCodes.FORBIDDEN), |
|
||||
StatusCodes.FORBIDDEN |
|
||||
); |
|
||||
} |
|
||||
|
|
||||
const status = <JobStatus[]>filterByStatus?.split(',') ?? undefined; |
const status = <JobStatus[]>filterByStatus?.split(',') ?? undefined; |
||||
return this.queueService.deleteJobs({ status }); |
return this.queueService.deleteJobs({ status }); |
||||
} |
} |
||||
|
|
||||
@Get('job') |
@Get('job') |
||||
@UseGuards(AuthGuard('jwt')) |
@HasPermission(permissions.accessAdminControl) |
||||
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
||||
public async getJobs( |
public async getJobs( |
||||
@Query('status') filterByStatus?: string |
@Query('status') filterByStatus?: string |
||||
): Promise<AdminJobs> { |
): Promise<AdminJobs> { |
||||
if ( |
|
||||
!hasPermission( |
|
||||
this.request.user.permissions, |
|
||||
permissions.accessAdminControl |
|
||||
) |
|
||||
) { |
|
||||
throw new HttpException( |
|
||||
getReasonPhrase(StatusCodes.FORBIDDEN), |
|
||||
StatusCodes.FORBIDDEN |
|
||||
); |
|
||||
} |
|
||||
|
|
||||
const status = <JobStatus[]>filterByStatus?.split(',') ?? undefined; |
const status = <JobStatus[]>filterByStatus?.split(',') ?? undefined; |
||||
return this.queueService.getJobs({ status }); |
return this.queueService.getJobs({ status }); |
||||
} |
} |
||||
|
|
||||
@Delete('job/:id') |
@Delete('job/:id') |
||||
@UseGuards(AuthGuard('jwt')) |
@HasPermission(permissions.accessAdminControl) |
||||
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
||||
public async deleteJob(@Param('id') id: string): Promise<void> { |
public async deleteJob(@Param('id') id: string): Promise<void> { |
||||
if ( |
|
||||
!hasPermission( |
|
||||
this.request.user.permissions, |
|
||||
permissions.accessAdminControl |
|
||||
) |
|
||||
) { |
|
||||
throw new HttpException( |
|
||||
getReasonPhrase(StatusCodes.FORBIDDEN), |
|
||||
StatusCodes.FORBIDDEN |
|
||||
); |
|
||||
} |
|
||||
|
|
||||
return this.queueService.deleteJob(id); |
return this.queueService.deleteJob(id); |
||||
} |
} |
||||
} |
} |
||||
|
@ -1,40 +1,18 @@ |
|||||
import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; |
import { AuthDeviceService } from '@ghostfolio/api/app/auth-device/auth-device.service'; |
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; |
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; |
||||
import type { RequestWithUser } from '@ghostfolio/common/types'; |
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; |
||||
import { |
import { permissions } from '@ghostfolio/common/permissions'; |
||||
Controller, |
import { Controller, Delete, Param, UseGuards } from '@nestjs/common'; |
||||
Delete, |
|
||||
HttpException, |
|
||||
Inject, |
|
||||
Param, |
|
||||
UseGuards |
|
||||
} from '@nestjs/common'; |
|
||||
import { REQUEST } from '@nestjs/core'; |
|
||||
import { AuthGuard } from '@nestjs/passport'; |
import { AuthGuard } from '@nestjs/passport'; |
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
||||
|
|
||||
@Controller('auth-device') |
@Controller('auth-device') |
||||
export class AuthDeviceController { |
export class AuthDeviceController { |
||||
public constructor( |
public constructor(private readonly authDeviceService: AuthDeviceService) {} |
||||
private readonly authDeviceService: AuthDeviceService, |
|
||||
@Inject(REQUEST) private readonly request: RequestWithUser |
|
||||
) {} |
|
||||
|
|
||||
@Delete(':id') |
@Delete(':id') |
||||
@UseGuards(AuthGuard('jwt')) |
@HasPermission(permissions.deleteAuthDevice) |
||||
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
||||
public async deleteAuthDevice(@Param('id') id: string): Promise<void> { |
public async deleteAuthDevice(@Param('id') id: string): Promise<void> { |
||||
if ( |
|
||||
!hasPermission( |
|
||||
this.request.user.permissions, |
|
||||
permissions.deleteAuthDevice |
|
||||
) |
|
||||
) { |
|
||||
throw new HttpException( |
|
||||
getReasonPhrase(StatusCodes.FORBIDDEN), |
|
||||
StatusCodes.FORBIDDEN |
|
||||
); |
|
||||
} |
|
||||
|
|
||||
await this.authDeviceService.deleteAuthDevice({ id }); |
await this.authDeviceService.deleteAuthDevice({ id }); |
||||
} |
} |
||||
} |
} |
||||
|
@ -1,39 +1,18 @@ |
|||||
import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; |
import { RedisCacheService } from '@ghostfolio/api/app/redis-cache/redis-cache.service'; |
||||
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; |
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; |
||||
import type { RequestWithUser } from '@ghostfolio/common/types'; |
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; |
||||
import { |
import { permissions } from '@ghostfolio/common/permissions'; |
||||
Controller, |
import { Controller, Post, UseGuards } from '@nestjs/common'; |
||||
HttpException, |
|
||||
Inject, |
|
||||
Post, |
|
||||
UseGuards |
|
||||
} from '@nestjs/common'; |
|
||||
import { REQUEST } from '@nestjs/core'; |
|
||||
import { AuthGuard } from '@nestjs/passport'; |
import { AuthGuard } from '@nestjs/passport'; |
||||
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; |
|
||||
|
|
||||
@Controller('cache') |
@Controller('cache') |
||||
export class CacheController { |
export class CacheController { |
||||
public constructor( |
public constructor(private readonly redisCacheService: RedisCacheService) {} |
||||
private readonly redisCacheService: RedisCacheService, |
|
||||
@Inject(REQUEST) private readonly request: RequestWithUser |
|
||||
) {} |
|
||||
|
|
||||
|
@HasPermission(permissions.accessAdminControl) |
||||
@Post('flush') |
@Post('flush') |
||||
@UseGuards(AuthGuard('jwt')) |
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
||||
public async flushCache(): Promise<void> { |
public async flushCache(): Promise<void> { |
||||
if ( |
|
||||
!hasPermission( |
|
||||
this.request.user.permissions, |
|
||||
permissions.accessAdminControl |
|
||||
) |
|
||||
) { |
|
||||
throw new HttpException( |
|
||||
getReasonPhrase(StatusCodes.FORBIDDEN), |
|
||||
StatusCodes.FORBIDDEN |
|
||||
); |
|
||||
} |
|
||||
|
|
||||
return this.redisCacheService.reset(); |
return this.redisCacheService.reset(); |
||||
} |
} |
||||
} |
} |
||||
|
Loading…
Reference in new issue