@@ -7,18 +7,20 @@ import {
7
7
Param ,
8
8
Post ,
9
9
Query ,
10
+ Req ,
10
11
Res ,
11
12
UnauthorizedException ,
12
- UseFilters
13
+ UseFilters ,
14
+ UseGuards
13
15
} from '@nestjs/common' ;
14
16
import { AuthzService } from './authz.service' ;
15
17
import { CommonService } from '../../../../libs/common/src/common.service' ;
16
- import { ApiBody , ApiOperation , ApiQuery , ApiResponse , ApiTags } from '@nestjs/swagger' ;
18
+ import { ApiBearerAuth , ApiBody , ApiOperation , ApiQuery , ApiResponse , ApiTags } from '@nestjs/swagger' ;
17
19
import { ApiResponseDto } from '../dtos/apiResponse.dto' ;
18
20
import { UserEmailVerificationDto } from '../user/dto/create-user.dto' ;
19
21
import IResponseType from '@credebl/common/interfaces/response.interface' ;
20
22
import { ResponseMessages } from '@credebl/common/response-messages' ;
21
- import { Response } from 'express' ;
23
+ import { Response , Request } from 'express' ;
22
24
import { EmailVerificationDto } from '../user/dto/email-verify.dto' ;
23
25
import { AuthTokenResponse } from './dtos/auth-token-res.dto' ;
24
26
import { LoginUserDto } from '../user/dto/login-user.dto' ;
@@ -30,7 +32,10 @@ import { ResetTokenPasswordDto } from './dtos/reset-token-password';
30
32
import { RefreshTokenDto } from './dtos/refresh-token.dto' ;
31
33
import { getDefaultClient } from '../user/utils' ;
32
34
import { ClientAliasValidationPipe } from './decorators/user-auth-client' ;
33
-
35
+ import { SessionGuard } from './guards/session.guard' ;
36
+ import { UserLogoutDto } from './dtos/user-logout.dto' ;
37
+ import { AuthGuard } from '@nestjs/passport' ;
38
+ import { ISessionData } from 'apps/user/interfaces/user.interface' ;
34
39
@Controller ( 'auth' )
35
40
@ApiTags ( 'auth' )
36
41
@UseFilters ( CustomExceptionFilter )
@@ -139,6 +144,7 @@ export class AuthzController {
139
144
} ;
140
145
return res . status ( HttpStatus . CREATED ) . json ( finalResponse ) ;
141
146
}
147
+
142
148
/**
143
149
* Authenticates a user and returns an access token.
144
150
*
@@ -168,6 +174,42 @@ export class AuthzController {
168
174
}
169
175
}
170
176
177
+ /**
178
+ * Fetch session details
179
+ *
180
+ * @returns User's access token details
181
+ */
182
+ @Get ( '/sessionDetails' )
183
+ @UseGuards ( SessionGuard )
184
+ @ApiOperation ( {
185
+ summary : 'Fetch session details' ,
186
+ description : 'Fetch session details against logged in user'
187
+ } )
188
+ @ApiQuery ( {
189
+ name : 'sessionId' ,
190
+ required : false
191
+ } )
192
+ @ApiResponse ( { status : HttpStatus . OK , description : 'Success' , type : AuthTokenResponse } )
193
+ async sessionDetails ( @Res ( ) res : Response , @Req ( ) req : Request , @Query ( ) sessionId : ISessionData ) : Promise < Response > {
194
+ this . logger . debug ( `in authz controller` ) ;
195
+
196
+ let sessionDetails ;
197
+ if ( 0 < Object . keys ( sessionId ) . length ) {
198
+ sessionDetails = await this . authzService . getSession ( sessionId ) ;
199
+ }
200
+ if ( req . user ) {
201
+ sessionDetails = req . user ;
202
+ }
203
+
204
+ const finalResponse : IResponseType = {
205
+ statusCode : HttpStatus . OK ,
206
+ message : ResponseMessages . user . success . fetchSession ,
207
+ data : sessionDetails
208
+ } ;
209
+
210
+ return res . status ( HttpStatus . OK ) . json ( finalResponse ) ;
211
+ }
212
+
171
213
/**
172
214
* Resets user's password.
173
215
*
@@ -263,4 +305,30 @@ export class AuthzController {
263
305
264
306
return res . status ( HttpStatus . OK ) . json ( finalResponse ) ;
265
307
}
308
+
309
+ /**
310
+ * Log out user.
311
+ *
312
+ * @body LogoutUserDto
313
+ * @returns Logged out user from current session
314
+ */
315
+ @Post ( '/signout' )
316
+ @ApiOperation ( {
317
+ summary : 'Logout user' ,
318
+ description : 'Logout user from current session.'
319
+ } )
320
+ @ApiResponse ( { status : HttpStatus . OK , description : 'Success' , type : ApiResponseDto } )
321
+ @UseGuards ( AuthGuard ( 'jwt' ) )
322
+ @ApiBearerAuth ( )
323
+ @ApiBody ( { type : UserLogoutDto } )
324
+ async logout ( @Body ( ) logoutUserDto : UserLogoutDto , @Res ( ) res : Response ) : Promise < Response > {
325
+ await this . authzService . logout ( logoutUserDto ) ;
326
+
327
+ const finalResponse : IResponseType = {
328
+ statusCode : HttpStatus . OK ,
329
+ message : ResponseMessages . user . success . logout
330
+ } ;
331
+
332
+ return res . status ( HttpStatus . OK ) . json ( finalResponse ) ;
333
+ }
266
334
}
0 commit comments