Skip to content

Commit 21ae9ee

Browse files
Merge pull request #356 from andrechristikan/development
Development
2 parents 1038451 + 804fd67 commit 21ae9ee

File tree

9 files changed

+86
-3
lines changed

9 files changed

+86
-3
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ack-nestjs-boilerplate",
3-
"version": "4.1.1",
3+
"version": "4.1.2",
44
"description": "Ack NestJs Boilerplate",
55
"repository": {
66
"type": "git",

src/common/api-key/docs/api-key.admin.doc.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export function ApiKeyListDoc(): MethodDecorator {
1818
DocPaging<ApiKeyListSerialization>('apiKey.list', {
1919
auth: {
2020
jwtAccessToken: true,
21+
permissionToken: true,
2122
},
2223
request: {
2324
queries: ApiKeyDocQueryIsActive,
@@ -36,6 +37,7 @@ export function ApiKeyGetDoc(): MethodDecorator {
3637
Doc<ApiKeyGetSerialization>('apiKey.get', {
3738
auth: {
3839
jwtAccessToken: true,
40+
permissionToken: true,
3941
},
4042
request: {
4143
params: ApiKeyDocParamsGet,
@@ -50,6 +52,7 @@ export function ApiKeyCreateDoc(): MethodDecorator {
5052
Doc<ApiKeyCreateSerialization>('apiKey.create', {
5153
auth: {
5254
jwtAccessToken: true,
55+
permissionToken: true,
5356
},
5457
response: {
5558
httpStatus: HttpStatus.CREATED,
@@ -64,6 +67,7 @@ export function ApiKeyActiveDoc(): MethodDecorator {
6467
Doc<void>('apiKey.active', {
6568
auth: {
6669
jwtAccessToken: true,
70+
permissionToken: true,
6771
},
6872
request: {
6973
params: ApiKeyDocParamsGet,
@@ -77,6 +81,7 @@ export function ApiKeyInactiveDoc(): MethodDecorator {
7781
Doc<void>('apiKey.inactive', {
7882
auth: {
7983
jwtAccessToken: true,
84+
permissionToken: true,
8085
},
8186
request: {
8287
params: ApiKeyDocParamsGet,
@@ -90,6 +95,7 @@ export function ApiKeyResetDoc(): MethodDecorator {
9095
Doc<void>('apiKey.reset', {
9196
auth: {
9297
jwtAccessToken: true,
98+
permissionToken: true,
9399
},
94100
request: {
95101
params: ApiKeyDocParamsGet,
@@ -106,6 +112,7 @@ export function ApiKeyUpdateDoc(): MethodDecorator {
106112
Doc<ResponseIdSerialization>('apiKey.update', {
107113
auth: {
108114
jwtAccessToken: true,
115+
permissionToken: true,
109116
},
110117
request: {
111118
params: ApiKeyDocParamsGet,

src/common/doc/decorators/doc.decorator.ts

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
ApiProduces,
1111
ApiQuery,
1212
ApiResponse,
13+
ApiSecurity,
1314
getSchemaPath,
1415
} from '@nestjs/swagger';
1516
import { APP_LANGUAGE } from 'src/app/constants/app.constant';
@@ -130,7 +131,7 @@ export function Doc<T>(
130131
}
131132

132133
if (options?.auth?.apiKey) {
133-
auths.push(ApiBearerAuth('apiKey'));
134+
auths.push(ApiSecurity('apiKey'));
134135
oneOfUnauthorized.push(
135136
{
136137
statusCode: ENUM_API_KEY_STATUS_CODE_ERROR.API_KEY_NEEDED_ERROR,
@@ -154,6 +155,27 @@ export function Doc<T>(
154155
);
155156
}
156157

158+
if (options?.auth?.permissionToken) {
159+
auths.push(ApiSecurity('permissionToken'));
160+
oneOfUnauthorized.push(
161+
{
162+
statusCode:
163+
ENUM_AUTH_STATUS_CODE_ERROR.AUTH_PERMISSION_TOKEN_ERROR,
164+
messagePath: 'auth.error.permissionTokenUnauthorized',
165+
},
166+
{
167+
statusCode:
168+
ENUM_AUTH_STATUS_CODE_ERROR.AUTH_PERMISSION_TOKEN_INVALID_ERROR,
169+
messagePath: 'auth.error.permissionTokenInvalid',
170+
},
171+
{
172+
statusCode:
173+
ENUM_AUTH_STATUS_CODE_ERROR.AUTH_PERMISSION_TOKEN_NOT_YOUR_ERROR,
174+
messagePath: 'auth.error.permissionTokenNotYour',
175+
}
176+
);
177+
}
178+
157179
// request headers
158180
const requestHeaders = [];
159181
if (options?.requestHeader?.userAgent) {
@@ -291,7 +313,7 @@ export function DocPaging<T>(
291313
}
292314

293315
if (options?.auth?.apiKey) {
294-
auths.push(ApiBearerAuth('apiKey'));
316+
auths.push(ApiSecurity('apiKey'));
295317
oneOfUnauthorized.push(
296318
{
297319
statusCode: ENUM_API_KEY_STATUS_CODE_ERROR.API_KEY_NEEDED_ERROR,
@@ -315,6 +337,27 @@ export function DocPaging<T>(
315337
);
316338
}
317339

340+
if (options?.auth?.permissionToken) {
341+
auths.push(ApiSecurity('permissionToken'));
342+
oneOfUnauthorized.push(
343+
{
344+
statusCode:
345+
ENUM_AUTH_STATUS_CODE_ERROR.AUTH_PERMISSION_TOKEN_ERROR,
346+
messagePath: 'auth.error.permissionTokenUnauthorized',
347+
},
348+
{
349+
statusCode:
350+
ENUM_AUTH_STATUS_CODE_ERROR.AUTH_PERMISSION_TOKEN_INVALID_ERROR,
351+
messagePath: 'auth.error.permissionTokenInvalid',
352+
},
353+
{
354+
statusCode:
355+
ENUM_AUTH_STATUS_CODE_ERROR.AUTH_PERMISSION_TOKEN_NOT_YOUR_ERROR,
356+
messagePath: 'auth.error.permissionTokenNotYour',
357+
}
358+
);
359+
}
360+
318361
// request headers
319362
const requestHeaders = [];
320363
if (options?.requestHeader?.userAgent) {

src/common/doc/interfaces/doc.interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export interface IDocAuthOptions {
5050
jwtAccessToken?: boolean;
5151
jwtRefreshToken?: boolean;
5252
apiKey?: boolean;
53+
permissionToken?: boolean;
5354
}
5455

5556
export interface IDocRequestHeaderOptions {

src/common/setting/docs/setting.admin.doc.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export function SettingUpdateDoc(): MethodDecorator {
88
Doc<ResponseIdSerialization>('setting.update', {
99
auth: {
1010
jwtAccessToken: true,
11+
permissionToken: true,
1112
},
1213
request: {
1314
params: SettingDocParamsGet,

src/modules/permission/docs/permission.admin.doc.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export function PermissionListDoc(): MethodDecorator {
1919
DocPaging<PermissionListSerialization>('permission.list', {
2020
auth: {
2121
jwtAccessToken: true,
22+
permissionToken: true,
2223
},
2324
request: {
2425
queries: [
@@ -40,6 +41,7 @@ export function PermissionGetDoc(): MethodDecorator {
4041
Doc<PermissionGetSerialization>('permission.get', {
4142
auth: {
4243
jwtAccessToken: true,
44+
permissionToken: true,
4345
},
4446
request: {
4547
params: PermissionDocParamsGet,
@@ -54,6 +56,7 @@ export function PermissionUpdateDoc(): MethodDecorator {
5456
Doc<ResponseIdSerialization>('permission.update', {
5557
auth: {
5658
jwtAccessToken: true,
59+
permissionToken: true,
5760
},
5861
request: {
5962
params: PermissionDocParamsGet,
@@ -68,6 +71,7 @@ export function PermissionActiveDoc(): MethodDecorator {
6871
Doc<void>('permission.active', {
6972
auth: {
7073
jwtAccessToken: true,
74+
permissionToken: true,
7175
},
7276
request: {
7377
params: PermissionDocParamsGet,
@@ -81,6 +85,7 @@ export function PermissionInactiveDoc(): MethodDecorator {
8185
Doc<void>('permission.inactive', {
8286
auth: {
8387
jwtAccessToken: true,
88+
permissionToken: true,
8489
},
8590
request: {
8691
params: PermissionDocParamsGet,
@@ -94,6 +99,7 @@ export function PermissionGroupDoc(): MethodDecorator {
9499
Doc<PermissionGroupsSerialization>('permission.group', {
95100
auth: {
96101
jwtAccessToken: true,
102+
permissionToken: true,
97103
},
98104
request: {
99105
queries: PermissionDocQueryGroup,

src/modules/role/docs/role.admin.doc.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export function RoleListDoc(): MethodDecorator {
1818
DocPaging<RoleListSerialization>('role.list', {
1919
auth: {
2020
jwtAccessToken: true,
21+
permissionToken: true,
2122
},
2223
request: {
2324
queries: [...RoleDocQueryIsActive, ...RoleDocQueryAccessFor],
@@ -36,6 +37,7 @@ export function RoleGetDoc(): MethodDecorator {
3637
Doc<RoleGetSerialization>('role.get', {
3738
auth: {
3839
jwtAccessToken: true,
40+
permissionToken: true,
3941
},
4042
request: {
4143
params: RoleDocParamsGet,
@@ -50,6 +52,7 @@ export function RoleCreateDoc(): MethodDecorator {
5052
Doc<ResponseIdSerialization>('role.create', {
5153
auth: {
5254
jwtAccessToken: true,
55+
permissionToken: true,
5356
},
5457
response: {
5558
httpStatus: HttpStatus.CREATED,
@@ -64,6 +67,7 @@ export function RoleUpdateDoc(): MethodDecorator {
6467
Doc<ResponseIdSerialization>('role.update', {
6568
auth: {
6669
jwtAccessToken: true,
70+
permissionToken: true,
6771
},
6872
request: {
6973
params: RoleDocParamsGet,
@@ -78,6 +82,7 @@ export function RoleDeleteDoc(): MethodDecorator {
7882
Doc<void>('role.delete', {
7983
auth: {
8084
jwtAccessToken: true,
85+
permissionToken: true,
8186
},
8287
request: {
8388
params: RoleDocParamsGet,
@@ -91,6 +96,7 @@ export function RoleActiveDoc(): MethodDecorator {
9196
Doc<void>('role.active', {
9297
auth: {
9398
jwtAccessToken: true,
99+
permissionToken: true,
94100
},
95101
request: {
96102
params: RoleDocParamsGet,
@@ -104,6 +110,7 @@ export function RoleInactiveDoc(): MethodDecorator {
104110
Doc<void>('role.inactive', {
105111
auth: {
106112
jwtAccessToken: true,
113+
permissionToken: true,
107114
},
108115
request: {
109116
params: RoleDocParamsGet,

src/modules/user/docs/user.admin.doc.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export function UserListDoc(): MethodDecorator {
1818
DocPaging<UserListSerialization>('user.list', {
1919
auth: {
2020
jwtAccessToken: true,
21+
permissionToken: true,
2122
},
2223
request: { queries: UserDocQueryIsActive },
2324
response: {
@@ -34,6 +35,7 @@ export function UserGetDoc(): MethodDecorator {
3435
Doc<UserGetSerialization>('user.get', {
3536
auth: {
3637
jwtAccessToken: true,
38+
permissionToken: true,
3739
},
3840
request: {
3941
params: UserDocParamsGet,
@@ -48,6 +50,7 @@ export function UserCreateDoc(): MethodDecorator {
4850
Doc<ResponseIdSerialization>('user.create', {
4951
auth: {
5052
jwtAccessToken: true,
53+
permissionToken: true,
5154
},
5255
response: {
5356
httpStatus: HttpStatus.CREATED,
@@ -62,6 +65,7 @@ export function UserUpdateDoc(): MethodDecorator {
6265
Doc<ResponseIdSerialization>('user.update', {
6366
auth: {
6467
jwtAccessToken: true,
68+
permissionToken: true,
6569
},
6670
request: {
6771
params: UserDocParamsGet,
@@ -76,6 +80,7 @@ export function UserDeleteDoc(): MethodDecorator {
7680
Doc<void>('user.delete', {
7781
auth: {
7882
jwtAccessToken: true,
83+
permissionToken: true,
7984
},
8085
request: {
8186
params: UserDocParamsGet,
@@ -89,6 +94,7 @@ export function UserImportDoc(): MethodDecorator {
8994
Doc<UserImportSerialization>('user.import', {
9095
auth: {
9196
jwtAccessToken: true,
97+
permissionToken: true,
9298
},
9399
response: {
94100
httpStatus: HttpStatus.CREATED,
@@ -103,6 +109,7 @@ export function UserExportDoc(): MethodDecorator {
103109
Doc('user.export', {
104110
auth: {
105111
jwtAccessToken: true,
112+
permissionToken: true,
106113
},
107114
response: {
108115
httpStatus: HttpStatus.OK,
@@ -116,6 +123,7 @@ export function UserActiveDoc(): MethodDecorator {
116123
Doc<void>('user.active', {
117124
auth: {
118125
jwtAccessToken: true,
126+
permissionToken: true,
119127
},
120128
request: {
121129
params: UserDocParamsGet,
@@ -129,6 +137,7 @@ export function UserInactiveDoc(): MethodDecorator {
129137
Doc<void>('user.inactive', {
130138
auth: {
131139
jwtAccessToken: true,
140+
permissionToken: true,
132141
},
133142
request: {
134143
params: UserDocParamsGet,

src/swagger.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ export default async function (app: NestApplication) {
4242
{ type: 'apiKey', in: 'header', name: 'x-api-key' },
4343
'apiKey'
4444
)
45+
.addApiKey(
46+
{
47+
type: 'apiKey',
48+
in: 'header',
49+
name: 'x-permission-token',
50+
description: 'grant permission for /admin prefix endpoints',
51+
},
52+
'permissionToken'
53+
)
4554
.build();
4655

4756
const document = SwaggerModule.createDocument(app, documentBuild, {

0 commit comments

Comments
 (0)