Skip to content

Commit

Permalink
feat: invalidate cookies when refresh token is invalid
Browse files Browse the repository at this point in the history
  • Loading branch information
vlad-tkachenko committed Nov 17, 2023
1 parent e7119d2 commit cb8aed8
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
7 changes: 4 additions & 3 deletions src/handlers/ProxyHandler.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { IncomingMessage, ServerResponse } from "http";
import { HttpMethod, ProxyRequest, RequestHandlerConfig } from "prxi";
import { invalidateAuthCookies, sendErrorResponse, sendRedirect, setAuthCookies, setCookies } from "../utils/ResponseUtils";
import { invalidateAuthCookies, sendErrorResponse, sendRedirect, setAuthCookies } from "../utils/ResponseUtils";
import { getConfig } from "../config/getConfig";
import { Mapping } from "../config/Mapping";
import { JWTVerificationResult, OpenIDUtils } from "../utils/OpenIDUtils";
Expand Down Expand Up @@ -170,7 +170,6 @@ export class ProxyHandler implements RequestHandlerConfig {
accessToken = context.accessToken = null;
idToken = context.idToken = null;
refreshToken = context.refreshToken = null;
invalidateAuthCookies(res);

accessTokenVerificationResult = JWTVerificationResult.MISSING;
}
Expand All @@ -184,12 +183,14 @@ export class ProxyHandler implements RequestHandlerConfig {
query = req.url.substring(queryIdx);
}

setCookies(res, {
invalidateAuthCookies(res, {
[getConfig().cookies.names.originalPath]: {
value: path + query,
expires: new Date(Date.now() + 30 * 60 * 1000), // 30 minutes
}
});
} else {
invalidateAuthCookies(res);
}

if (context.mapping.auth.required) {
Expand Down
14 changes: 11 additions & 3 deletions src/utils/ResponseUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@ const getDomain = (): string => {
/**
* Invalidate auth cookies
* @param resp
* @param override
*/
export const invalidateAuthCookies = (resp: ServerResponse): void => {
export const invalidateAuthCookies = (resp: ServerResponse, override?: Record<string, { value: string, expires?: Date }>): void => {
getLogger('ResponseUtils').debug('Invalidate auth cookies');
const accessCookies: Record<string, { value: string, expires?: Date }> = {
let accessCookies: Record<string, { value: string, expires?: Date }> = {
[getConfig().cookies.names.originalPath]: {
value: 'n/a',
expires: new Date(0),
Expand All @@ -47,6 +48,13 @@ export const invalidateAuthCookies = (resp: ServerResponse): void => {
},
};

if (override) {
accessCookies = {
...accessCookies,
...override,
}
}

setCookies(resp, accessCookies);
}

Expand Down Expand Up @@ -101,7 +109,7 @@ export const setAuthCookies = (resp: ServerResponse, tokens: TokenSet, metaToken
* @param resp
* @param cookies
*/
export const setCookies = (resp: ServerResponse, cookies: Record<string, {value: string, expires?: Date}>): void => {
const setCookies = (resp: ServerResponse, cookies: Record<string, {value: string, expires?: Date}>): void => {
const setCookies = [];
for (const name of Object.keys(cookies)) {
setCookies.push(serialize(name, cookies[name].value, {
Expand Down

0 comments on commit cb8aed8

Please sign in to comment.