Skip to content

Commit 82a4770

Browse files
committed
feat(core): allow disabling guest cookies
Allow passing `null` to the cookie names for the guest tokens in order to disable them
1 parent 5ae7457 commit 82a4770

File tree

2 files changed

+68
-48
lines changed

2 files changed

+68
-48
lines changed

.changeset/quiet-clubs-check.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@labdigital/federated-token": minor
3+
---
4+
5+
Allow passing `null` for the `guest*` cookie names to disable them

packages/core/src/tokensource/cookies-base.ts

Lines changed: 63 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ import type { TokenSource } from "./base";
22

33
export type CookieNames = {
44
// Anonymous cookies
5-
guestData: string;
6-
guestToken: string; // HTTP ONLY
5+
guestData: string | null;
6+
guestToken: string | null; // HTTP ONLY
77

88
// Authenticated cookies
99
userData: string;
1010
userToken: string; // HTTP_ONLY
1111

1212
// Refresh token cookies
1313
refreshToken: string; // HTTP_ONLY
14-
guestRefreshTokenExists: string;
14+
guestRefreshTokenExists: string | null;
1515
userRefreshTokenExists: string;
1616
};
1717

@@ -88,24 +88,27 @@ export abstract class BaseCookieTokenSource<TRequest, TResponse>
8888
}
8989

9090
deleteAccessToken(request: TRequest, response: TResponse): void {
91-
const names = [this.cookieNames.userToken, this.cookieNames.guestToken];
91+
const names = [this.cookieNames.userToken, this.cookieNames.guestToken].filter((v) => v !== null);
9292

9393
for (const name of names) {
9494
this.deleteAccessTokenByName(request, response, name);
9595
}
9696
}
9797

98+
// Delete both the user and guest refresh token exists cookies
9899
deleteRefreshToken(request: TRequest, response: TResponse): void {
99100
this.adapter.clearCookie(request, response, this.cookieNames.refreshToken, {
100101
path: this._getRefreshTokenPath(request),
101102
domain: this.adapter.getPrivateDomain(request),
102103
});
103104

104-
this.deleteRefreshTokenExistsByName(
105-
request,
106-
response,
107-
this.cookieNames.guestRefreshTokenExists,
108-
);
105+
if (this.cookieNames.guestRefreshTokenExists) {
106+
this.deleteRefreshTokenExistsByName(
107+
request,
108+
response,
109+
this.cookieNames.guestRefreshTokenExists,
110+
);
111+
}
109112
this.deleteRefreshTokenExistsByName(
110113
request,
111114
response,
@@ -114,7 +117,7 @@ export abstract class BaseCookieTokenSource<TRequest, TResponse>
114117
}
115118

116119
deleteDataToken(request: TRequest, response: TResponse): void {
117-
const names = [this.cookieNames.userData, this.cookieNames.guestData];
120+
const names = [this.cookieNames.userData, this.cookieNames.guestData].filter((v) => v !== null);
118121

119122
for (const name of names) {
120123
this.deleteAccessTokenByName(request, response, name);
@@ -148,7 +151,7 @@ export abstract class BaseCookieTokenSource<TRequest, TResponse>
148151
}
149152

150153
getAccessToken(request: TRequest): string | undefined {
151-
const names = [this.cookieNames.userToken, this.cookieNames.guestToken];
154+
const names = [this.cookieNames.userToken, this.cookieNames.guestToken].filter((v) => v !== null);
152155
for (const name of names) {
153156
const value = this.adapter.getCookie(request, name);
154157
if (value) {
@@ -194,19 +197,23 @@ export abstract class BaseCookieTokenSource<TRequest, TResponse>
194197
token,
195198
cookieOptions,
196199
);
197-
this.deleteAccessTokenByName(
198-
request,
199-
response,
200-
this.cookieNames.guestData,
201-
);
200+
if (this.cookieNames.guestData) {
201+
this.deleteAccessTokenByName(
202+
request,
203+
response,
204+
this.cookieNames.guestData,
205+
);
206+
}
202207
} else {
203-
this.adapter.setCookie(
204-
request,
205-
response,
206-
this.cookieNames.guestData,
207-
token,
208-
cookieOptions,
209-
);
208+
if (this.cookieNames.guestData) {
209+
this.adapter.setCookie(
210+
request,
211+
response,
212+
this.cookieNames.guestData,
213+
token,
214+
cookieOptions,
215+
);
216+
}
210217
this.deleteAccessTokenByName(
211218
request,
212219
response,
@@ -216,7 +223,7 @@ export abstract class BaseCookieTokenSource<TRequest, TResponse>
216223
}
217224

218225
getDataToken(request: TRequest): string | undefined {
219-
const names = [this.cookieNames.userData, this.cookieNames.guestData];
226+
const names = [this.cookieNames.userData, this.cookieNames.guestData].filter((v) => v !== null);
220227
for (const name of names) {
221228
const value = this.adapter.getCookie(request, name);
222229
if (value) {
@@ -258,19 +265,23 @@ export abstract class BaseCookieTokenSource<TRequest, TResponse>
258265
token,
259266
cookieOptions,
260267
);
261-
this.deleteAccessTokenByName(
262-
request,
263-
response,
264-
this.cookieNames.guestToken,
265-
);
268+
if (this.cookieNames.guestToken) {
269+
this.deleteAccessTokenByName(
270+
request,
271+
response,
272+
this.cookieNames.guestToken,
273+
);
274+
}
266275
} else {
267-
this.adapter.setCookie(
268-
request,
269-
response,
270-
this.cookieNames.guestToken,
271-
token,
272-
cookieOptions,
273-
);
276+
if( this.cookieNames.guestToken) {
277+
this.adapter.setCookie(
278+
request,
279+
response,
280+
this.cookieNames.guestToken,
281+
token,
282+
cookieOptions,
283+
);
284+
}
274285
this.deleteAccessTokenByName(
275286
request,
276287
response,
@@ -314,19 +325,23 @@ export abstract class BaseCookieTokenSource<TRequest, TResponse>
314325
"1",
315326
cookieOptions,
316327
);
317-
this.deleteRefreshTokenExistsByName(
318-
request,
319-
response,
320-
this.cookieNames.guestRefreshTokenExists,
321-
);
328+
if (this.cookieNames.guestRefreshTokenExists) {
329+
this.deleteRefreshTokenExistsByName(
330+
request,
331+
response,
332+
this.cookieNames.guestRefreshTokenExists,
333+
);
334+
}
322335
} else {
323-
this.adapter.setCookie(
324-
request,
325-
response,
326-
this.cookieNames.guestRefreshTokenExists,
327-
"1",
328-
cookieOptions,
329-
);
336+
if (this.cookieNames.guestRefreshTokenExists) {
337+
this.adapter.setCookie(
338+
request,
339+
response,
340+
this.cookieNames.guestRefreshTokenExists,
341+
"1",
342+
cookieOptions,
343+
);
344+
}
330345
this.deleteRefreshTokenExistsByName(
331346
request,
332347
response,

0 commit comments

Comments
 (0)