(request: Request)
| 159 | } |
| 160 | |
| 161 | export async function logoutUser(request: Request) { |
| 162 | const tomorrow = new Date(new Date().setDate(new Date().getDate() + 1)); |
| 163 | |
| 164 | const cookies = getCookies(request.headers); |
| 165 | |
| 166 | const result = await getDataFromCookie(cookies[COOKIE_NAME]); |
| 167 | |
| 168 | if (!result || !result.tokenData?.session_id || !result.user) { |
| 169 | throw new Error('Invalid session'); |
| 170 | } |
| 171 | |
| 172 | const { tokenData } = result; |
| 173 | const { session_id } = tokenData; |
| 174 | |
| 175 | // Delete user session |
| 176 | await UserSessionModel.delete(session_id); |
| 177 | |
| 178 | // Generate response with empty and expiring cookie |
| 179 | const cookie: Cookie = { |
| 180 | name: COOKIE_NAME, |
| 181 | value: '', |
| 182 | expires: tomorrow, |
| 183 | path: '/', |
| 184 | secure: isRunningLocally(request) ? false : true, |
| 185 | httpOnly: true, |
| 186 | sameSite: 'Lax', |
| 187 | domain: await resolveCookieDomain(request), |
| 188 | }; |
| 189 | |
| 190 | if (await AppConfig.isCookieDomainSecurityDisabled()) { |
| 191 | delete cookie.domain; |
| 192 | } |
| 193 | |
| 194 | const response = new Response('Logged Out', { |
| 195 | status: 303, |
| 196 | headers: { 'Location': '/', 'Content-Type': 'text/html; charset=utf-8' }, |
| 197 | }); |
| 198 | |
| 199 | setCookie(response.headers, cookie); |
| 200 | |
| 201 | return response; |
| 202 | } |
| 203 | |
| 204 | export async function createSessionResponse( |
| 205 | request: Request, |
no test coverage detected