Skip to content

Commit

Permalink
βœ” Fix πŸŽ‰ Req. Lifecycle ✨
Browse files Browse the repository at this point in the history
  • Loading branch information
bifeldy committed Jul 6, 2023
1 parent 179b4a3 commit e17e67b
Show file tree
Hide file tree
Showing 32 changed files with 122 additions and 121 deletions.
2 changes: 1 addition & 1 deletion dist/fansubid/browser/ngsw.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"configVersion": 1,
"timestamp": 1688654909000,
"timestamp": 1688657467218,
"index": "/index.html",
"assetGroups": [
{
Expand Down
2 changes: 1 addition & 1 deletion dist/fansubid/server/main.js

Large diffs are not rendered by default.

8 changes: 5 additions & 3 deletions src/api/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,9 @@ import { CacheMiddleware } from './middlewares/cache.middleware';
import { HttpExceptionFilter } from './filters/http-exception.filter';

import { RateLimitGuard } from './guards/rate-limit.guard';
import { RolesGuard } from './guards/roles.guard';
import { FilterApiKeyAccessGuard } from './guards/filter-api-key-access.guard';
import { VerifiedOnlyGuard } from './guards/verified-only.guard';
import { RolesGuard } from './guards/roles.guard';

import { ExcludeFieldInterceptor } from './interceptors/exclude-field.interceptor';
import { ReqResInterceptor } from './interceptors/req-res.interceptor';
Expand Down Expand Up @@ -223,12 +224,13 @@ import { UserService } from './repository/user.service';
VerifySosmedController
],
providers: [
// Global Lifecycle - Exception Filter => Middleware => Guards => Interceptors => Controller
// Global Lifecycle :: Filter => Middleware => Guards => Interceptors => Controller
// https://docs.nestjs.com/faq/request-lifecycle
{ provide: APP_FILTER, useClass: HttpExceptionFilter },
{ provide: APP_GUARD, useClass: RateLimitGuard },
{ provide: APP_GUARD, useClass: RolesGuard },
{ provide: APP_GUARD, useClass: FilterApiKeyAccessGuard },
{ provide: APP_GUARD, useClass: VerifiedOnlyGuard },
{ provide: APP_GUARD, useClass: RolesGuard },
{ provide: APP_INTERCEPTOR, useClass: ExcludeFieldInterceptor },
{ provide: APP_INTERCEPTOR, useClass: ReqResInterceptor },
{
Expand Down
14 changes: 7 additions & 7 deletions src/api/controllers/api-key.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ export class ApiKeyController {

@Get('/')
@HttpCode(200)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@ApiTags(CONSTANTS.apiTagApiKey)
@ApiQuery({ name: 'q', required: false, type: 'string' })
@ApiQuery({ name: 'row', required: false, type: 'number' })
@ApiQuery({ name: 'page', required: false, type: 'number' })
@ApiQuery({ name: 'username', type: 'string' })
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async getAll(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
const searchQuery = req.query['q'] || '';
try {
Expand Down Expand Up @@ -145,8 +145,6 @@ export class ApiKeyController {

@Post('/')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
@VerifiedOnly()
@ApiTags(CONSTANTS.apiTagApiKey)
@ApiBody({
schema: {
Expand All @@ -157,6 +155,8 @@ export class ApiKeyController {
required: ['name', 'ip_domain']
}
})
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
async addNew(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if ('name' in req.body && 'ip_domain' in req.body) {
Expand Down Expand Up @@ -212,8 +212,6 @@ export class ApiKeyController {

@Put('/:id')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
@VerifiedOnly()
@ApiTags(CONSTANTS.apiTagApiKey)
@ApiParam({ name: 'id', type: 'number' })
@ApiBody({
Expand All @@ -224,6 +222,8 @@ export class ApiKeyController {
}
}
})
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
async updateById(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if ('name' in req.body || 'ip_domain' in req.body) {
Expand Down Expand Up @@ -279,10 +279,10 @@ export class ApiKeyController {

@Delete('/:id')
@HttpCode(202)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
@VerifiedOnly()
@ApiTags(CONSTANTS.apiTagApiKey)
@ApiParam({ name: 'id', type: 'number' })
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
async deleteById(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
const user: UserModel = res.locals['user'];
Expand Down
20 changes: 10 additions & 10 deletions src/api/controllers/attachment.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ export class AttachmentController {

@Get('/')
@HttpCode(200)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
@VerifiedOnly()
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
async searchLampiranPending(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
const queryPage = parseInt(req.query['page'] as string);
Expand Down Expand Up @@ -97,10 +97,10 @@ export class AttachmentController {

@Post('/')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@VerifiedOnly()
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async uploadLampiran(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
const file = req.body as DiskFile;
try {
Expand Down Expand Up @@ -153,10 +153,10 @@ export class AttachmentController {

@Get('/:id')
@HttpCode(206)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@VerifiedOnly()
@ApiTags(CONSTANTS.apiTagAttachment)
@ApiParam({ name: 'id', type: 'string' })
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async getById(@Req() req: Request, @Res( /* { passthrough: true } */ ) res: Response): Promise<any> {
try {
const attachment = await this.attachmentRepo.findOneOrFail({
Expand Down Expand Up @@ -257,10 +257,10 @@ export class AttachmentController {

@Patch('/')
@HttpCode(202)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
@VerifiedOnly()
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
async reUploadAttachment(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if ('id' in req.body) {
Expand Down Expand Up @@ -387,10 +387,10 @@ export class AttachmentController {

@Delete('/:id')
@HttpCode(202)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
@VerifiedOnly()
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
async deleteById(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
const attachment = await this.attachmentRepo.findOneOrFail({
Expand Down
4 changes: 2 additions & 2 deletions src/api/controllers/banned.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ export class BannedController {
@HttpCode(201)
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
async addNew(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
const adminMod: UserModel = res.locals['user'];
Expand Down Expand Up @@ -242,8 +242,8 @@ export class BannedController {
@HttpCode(202)
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
async deleteById(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
const adminMod: UserModel = res.locals['user'];
Expand Down
8 changes: 4 additions & 4 deletions src/api/controllers/berkas.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,9 +151,9 @@ export class BerkasController {

@Post('/')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async addNew(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if (
Expand Down Expand Up @@ -590,9 +590,9 @@ export class BerkasController {

@Put('/:id')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async updateById(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if (
Expand Down Expand Up @@ -779,10 +779,10 @@ export class BerkasController {

@Delete('/:id')
@HttpCode(202)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
@VerifiedOnly()
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
async deleteById(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
const berkas = await this.berkasRepo.findOneOrFail({
Expand Down
6 changes: 3 additions & 3 deletions src/api/controllers/comment.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ export class CommentController {

@Post('/')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@FilterApiKeyAccess()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async addNew(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if ('path' in req.body && 'comment' in req.body) {
Expand Down Expand Up @@ -234,9 +234,9 @@ export class CommentController {

@Delete('/:id')
@HttpCode(202)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
@VerifiedOnly()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
async deleteById(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
const komen = await this.komentarRepo.findOneOrFail({
Expand Down
8 changes: 4 additions & 4 deletions src/api/controllers/ddl-file.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ export class DdlPartController {

@Get('/:id')
@HttpCode(206)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@VerifiedOnly()
@ApiTags(CONSTANTS.apiTagDdlFile)
@ApiParam({ name: 'id', type: 'string' })
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async downloadChunk(@Req() req: Request, @Res( /* { passthrough: true } */ ) res: Response): Promise<any> {
try {
const ddlFile = await this.ddlFileRepo.findOneOrFail({
Expand Down Expand Up @@ -102,11 +102,11 @@ export class DdlSeekController {

@Get('/:id')
@HttpCode(206)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@VerifiedOnly()
@ApiTags(CONSTANTS.apiTagDdlFile)
@ApiParam({ name: 'id', type: 'string' })
@ApiHeader({ name: 'range', required: true })
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async streamFull(@Req() req: Request, @Res( /* { passthrough: true } */ ) res: Response): Promise<any> {
try {
let headerRangeFull = req.headers.range || 'bytes=0-';
Expand Down
2 changes: 1 addition & 1 deletion src/api/controllers/dorama.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ export class DoramaController {

@Patch('/')
@HttpCode(202)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@ApiExcludeEndpoint()
@FilterApiKeyAccess()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async updateDorama(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if ('id' in req.body && 'name' in req.body && 'image_url' in req.body) {
Expand Down
12 changes: 6 additions & 6 deletions src/api/controllers/fansub-/fansub-dns.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -281,9 +281,9 @@ export class FansubDnsController {

@Post('/')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
@VerifiedOnly()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
async createNew(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if ('slug' in req.body && 'server_target' in req.body) {
Expand Down Expand Up @@ -344,9 +344,9 @@ export class FansubDnsController {
// GET `/api/fansub-dns/:slug`
@Get('/:slug')
@HttpCode(200)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
@VerifiedOnly()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
async getBySlug(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
const user: UserModel = res.locals['user'];
Expand Down Expand Up @@ -427,9 +427,9 @@ export class FansubDnsController {
// PUT `/api/fansub-dns/:slug`
@Put('/:slug')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
@VerifiedOnly()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER)
async updateBySlug(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if ('server_target' in req.body) {
Expand Down
16 changes: 8 additions & 8 deletions src/api/controllers/fansub-/fansub-member.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ export class FansubMemberController {
// GET `/api/fansub-member`
@Get('/')
@HttpCode(200)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
@VerifiedOnly()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR)
async getAll(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
const searchQuery = req.query['q'] || '';
try {
Expand Down Expand Up @@ -107,9 +107,9 @@ export class FansubMemberController {
// POST `/api/fansub-member`
@Post('/')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@VerifiedOnly()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async requestJoinFansubMember(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if ('slug' in req.body) {
Expand Down Expand Up @@ -210,9 +210,9 @@ export class FansubMemberController {
// PUT `/api/fansub-member/:id`
@Put('/:id')
@HttpCode(201)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@VerifiedOnly()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async approveJoinOrRejectFansubMember(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
if ('approved' in req.body) {
Expand Down Expand Up @@ -341,9 +341,9 @@ export class FansubMemberController {
// DELETE `/api/fansub-member/:id`
@Delete('/:id')
@HttpCode(202)
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
@VerifiedOnly()
@FilterApiKeyAccess()
@VerifiedOnly()
@Roles(RoleModel.ADMIN, RoleModel.MODERATOR, RoleModel.FANSUBBER, RoleModel.USER)
async leaveFansubMember(@Req() req: Request, @Res({ passthrough: true }) res: Response): Promise<any> {
try {
const user: UserModel = res.locals['user'];
Expand Down
Loading

0 comments on commit e17e67b

Please sign in to comment.