Skip to content

Commit 9d8c84f

Browse files
committed
Add "Secure" flag to all cookies
Resolves #3296
1 parent 67ce6ae commit 9d8c84f

File tree

8 files changed

+17
-13
lines changed

8 files changed

+17
-13
lines changed

configs/app/app.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const app = Object.freeze({
2121
isDev,
2222
isReview,
2323
isPw,
24-
protocol: appSchema,
24+
protocol: appSchema || 'https',
2525
host: appHost,
2626
port: appPort,
2727
baseUrl,

lib/cookies.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Cookies from 'js-cookie';
22

3+
import config from 'configs/app';
34
import { isBrowser } from 'toolkit/utils/isBrowser';
45

56
/**
@@ -40,6 +41,11 @@ export const PRIVATE_MODE_DISALLOWED: ReadonlyArray<NAMES> = [
4041
NAMES.MIXPANEL_DEBUG,
4142
];
4243

44+
export const getDefaultAttributes = () => ({
45+
path: '/',
46+
secure: config.app.protocol === 'https',
47+
});
48+
4349
export function get(name?: NAMES | undefined | null, serverCookie?: string) {
4450
if (!isBrowser()) {
4551
return serverCookie ? getFromCookieString(serverCookie, name) : undefined;
@@ -72,13 +78,11 @@ export function set(name: NAMES, value: string, attributes: Cookies.CookieAttrib
7278
return;
7379
}
7480

75-
attributes.path = '/';
76-
77-
return Cookies.set(name, value, attributes);
81+
return Cookies.set(name, value, { ...getDefaultAttributes(), ...attributes });
7882
}
7983

8084
export function remove(name: NAMES, attributes: Cookies.CookieAttributes = {}) {
81-
return Cookies.remove(name, attributes);
85+
return Cookies.remove(name, { ...getDefaultAttributes(), ...attributes });
8286
}
8387

8488
export function getFromCookieString(cookieString: string, name?: NAMES | undefined | null) {

nextjs/getServerSideProps/handlers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Promise<GetServerSidePropsResult<Props<Pathname>>> => {
4242
let uuid = cookies.getFromCookieString(req.headers.cookie || '', cookies.NAMES.UUID);
4343
if (!uuid && appProfile !== 'private') {
4444
uuid = crypto.randomUUID();
45-
res.setHeader('Set-Cookie', `${ cookies.NAMES.UUID }=${ uuid }`);
45+
res.setHeader('Set-Cookie', `${ cookies.NAMES.UUID }=${ uuid }; Path=/; ${ config.app.protocol === 'https' ? 'Secure' : '' }`);
4646
}
4747

4848
const isTrackingDisabled = process.env.DISABLE_TRACKING === 'true' || appProfile === 'private';

nextjs/middlewares/addressFormat.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ export default function addressFormatMiddleware(req: NextRequest, res: NextRespo
1212
if (addressFormatCookie) {
1313
const isValidCookie = config.UI.views.address.hashFormat.availableFormats.includes(addressFormatCookie.value as AddressFormat);
1414
if (!isValidCookie) {
15-
res.cookies.set(cookiesLib.NAMES.ADDRESS_FORMAT, defaultFormat, { path: '/' });
15+
res.cookies.set(cookiesLib.NAMES.ADDRESS_FORMAT, defaultFormat, cookiesLib.getDefaultAttributes());
1616
}
1717
} else {
18-
res.cookies.set(cookiesLib.NAMES.ADDRESS_FORMAT, defaultFormat, { path: '/' });
18+
res.cookies.set(cookiesLib.NAMES.ADDRESS_FORMAT, defaultFormat, cookiesLib.getDefaultAttributes());
1919
}
2020
}

nextjs/middlewares/appProfile.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export default function appProfileMiddleware(req: NextRequest, res: NextResponse
1313

1414
const profileValue = headerValue || queryValue;
1515
if (profileValue === PRIVATE_PROFILE_VALUE) {
16-
res.cookies.set(cookiesLib.NAMES.APP_PROFILE, PRIVATE_PROFILE_VALUE, { path: '/' });
16+
res.cookies.set(cookiesLib.NAMES.APP_PROFILE, PRIVATE_PROFILE_VALUE, cookiesLib.getDefaultAttributes());
1717
} else {
1818
res.cookies.delete(cookiesLib.NAMES.APP_PROFILE);
1919
}

nextjs/middlewares/colorTheme.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ export default function colorThemeMiddleware(req: NextRequest, res: NextResponse
88

99
if (!colorModeCookie) {
1010
if (appConfig.UI.colorTheme.default) {
11-
res.cookies.set(cookiesLib.NAMES.COLOR_MODE, appConfig.UI.colorTheme.default.colorMode, { path: '/' });
12-
res.cookies.set(cookiesLib.NAMES.COLOR_THEME, appConfig.UI.colorTheme.default.id, { path: '/' });
11+
res.cookies.set(cookiesLib.NAMES.COLOR_MODE, appConfig.UI.colorTheme.default.colorMode, cookiesLib.getDefaultAttributes());
12+
res.cookies.set(cookiesLib.NAMES.COLOR_THEME, appConfig.UI.colorTheme.default.id, cookiesLib.getDefaultAttributes());
1313
}
1414
}
1515
}

nextjs/middlewares/poorReputationTokens.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default function poorReputationTokensMiddleware(req: NextRequest, res: Ne
88
const showPoorReputationTokensCookie = req.cookies.get(cookiesLib.NAMES.SHOW_POOR_REPUTATION_TOKENS);
99

1010
if (!showPoorReputationTokensCookie) {
11-
res.cookies.set(cookiesLib.NAMES.SHOW_POOR_REPUTATION_TOKENS, 'false', { path: '/' });
11+
res.cookies.set(cookiesLib.NAMES.SHOW_POOR_REPUTATION_TOKENS, 'false', cookiesLib.getDefaultAttributes());
1212
}
1313
}
1414
}

nextjs/middlewares/scamTokens.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default function scamTokensMiddleware(req: NextRequest, res: NextResponse
88
const showScamTokensCookie = req.cookies.get(cookiesLib.NAMES.SHOW_SCAM_TOKENS);
99

1010
if (!showScamTokensCookie) {
11-
res.cookies.set(cookiesLib.NAMES.SHOW_SCAM_TOKENS, 'false', { path: '/' });
11+
res.cookies.set(cookiesLib.NAMES.SHOW_SCAM_TOKENS, 'false', cookiesLib.getDefaultAttributes());
1212
}
1313
}
1414
}

0 commit comments

Comments
 (0)