(@Request() req, @Response() res)
| 133 | @Post('refresh') |
| 134 | @HttpCode(HttpStatus.OK) |
| 135 | async refresh(@Request() req, @Response() res) { |
| 136 | const refreshToken = req.cookies?.refresh_token; |
| 137 | |
| 138 | if (!refreshToken) { |
| 139 | throw new UnauthorizedException('No refresh token provided'); |
| 140 | } |
| 141 | |
| 142 | const ipAddress = req.ip || req.connection.remoteAddress; |
| 143 | const userAgent = req.get('User-Agent'); |
| 144 | |
| 145 | const result = await this.authService.refreshAccessToken( |
| 146 | refreshToken, |
| 147 | ipAddress, |
| 148 | userAgent, |
| 149 | ); |
| 150 | |
| 151 | // Set new httpOnly cookies |
| 152 | res.cookie('access_token', result.access_token, { |
| 153 | httpOnly: true, |
| 154 | secure: process.env.NODE_ENV === 'production', |
| 155 | sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax', |
| 156 | maxAge: 15 * 60 * 1000, // 15 minutes |
| 157 | }); |
| 158 | |
| 159 | res.cookie('refresh_token', result.refresh_token, { |
| 160 | httpOnly: true, |
| 161 | secure: process.env.NODE_ENV === 'production', |
| 162 | sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'lax', |
| 163 | maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days |
| 164 | }); |
| 165 | |
| 166 | return res.json({ message: 'Tokens refreshed successfully' }); |
| 167 | } |
| 168 | |
| 169 | @Post('logout') |
| 170 | @HttpCode(HttpStatus.OK) |
no test coverage detected