Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,16 @@ All notable changes to this project will be documented in this file. Dates are d

Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).

#### [v1.80.0](https://github.com/opengovsg/GoGovSG/compare/v1.79.2...v1.80.0)

- chore: escape raw html [`#2395`](https://github.com/opengovsg/GoGovSG/pull/2395)
- chore: fix compoute issue from tags [`#2396`](https://github.com/opengovsg/GoGovSG/pull/2396)
- Release 1.79.2 `develop` [`#2392`](https://github.com/opengovsg/GoGovSG/pull/2392)

#### [v1.79.2](https://github.com/opengovsg/GoGovSG/compare/v1.79.1...v1.79.2)

> 9 July 2025

- chore: correct capitalization of GoGovSG in README.md [`#2390`](https://github.com/opengovsg/GoGovSG/pull/2390)
- chore: fix codeql [`#2385`](https://github.com/opengovsg/GoGovSG/pull/2385)
- chore: fix formatting [`#2384`](https://github.com/opengovsg/GoGovSG/pull/2384)
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "GoGovSG",
"version": "1.79.2",
"version": "1.80.0",
"description": "Link shortener for Singapore government.",
"main": "src/server/index.js",
"scripts": {
Expand Down
25 changes: 16 additions & 9 deletions src/server/api/user/validators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,23 @@ export const hasApiKeySchema = Joi.object({
userId: Joi.number().required(),
})

const singleTagSchema = Joi.string()
.pattern(/^[A-Za-z0-9-_]+$/)
.max(25)

const tagSchema = Joi.array()
.max(MAX_NUM_TAGS_PER_LINK)
.optional()
// letters, numbers, hyphens, underscores, 25 digits
.items(
Joi.string().custom((tag: string, helpers) => {
if (!isValidTag(tag)) {
return helpers.message({ custom: `tag: ${tag} format is invalid` })
}
return tag
}),
singleTagSchema
.custom((tag: string, helpers) => {
if (!isValidTag(tag)) {
return helpers.error('tag:invalid')
}
return tag
})
.messages({ 'tag:invalid': 'Tag format is invalid.' }),
)
.unique((a, b) => a === b)

Expand All @@ -60,13 +67,13 @@ export const userTagsQueryConditions = Joi.object({
.min(3)
.custom((tag: string, helpers) => {
if (!isValidTag(tag)) {
return helpers.message({
custom: `tag: ${tag} query format is invalid.`,
})
return helpers.error('tag:invalid')
}
return tag
})
.messages({ 'tag:invalid': 'Tag format is invalid.' })
.required(),

limit: Joi.number().required(),
})

Expand Down
8 changes: 4 additions & 4 deletions src/server/views/404.error.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Content-Language" content="en">
<meta charset="UTF-8">
<title><%- displayHostname %>: Page not found</title>
<title><%= displayHostname %>: Page not found</title>
<base href="~/" />
<link href="/assets/styles/shared/shared-styles.css" rel="stylesheet">
<link href="/assets/<%- assetVariant %>/styles/colours.css" rel="stylesheet">
<link href="/assets/<%= assetVariant %>/styles/colours.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;700&display=swap" rel="stylesheet">
<link href="/assets/styles/not-found-page/not-found-page.css" rel="stylesheet">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
Expand All @@ -29,11 +29,11 @@
<div id="divider" class="divider"></div>
<div id="graphics-container">
<div id="graphic-div">
<img src="/assets/<%- assetVariant %>/not-found-page/images/not-found-graphic.svg" draggable="false" />
<img src="/assets/<%= assetVariant %>/not-found-page/images/not-found-graphic.svg" draggable="false" />
</div>
<div id="go-logo-div">
<!-- go logo -->
<img src="/assets/<%- assetVariant %>/not-found-page/icons/go-logo.svg" draggable="false" />
<img src="/assets/<%= assetVariant %>/not-found-page/icons/go-logo.svg" draggable="false" />
</div>
</div>
</main>
Expand Down
16 changes: 8 additions & 8 deletions src/server/views/transition-page.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Content-Language" content="en">
<meta charset="UTF-8">
<title><%- displayHostname %></title>
<title><%= displayHostname %></title>
<link href="/assets/styles/shared/shared-styles.css" rel="stylesheet">
<link href="/assets/<%- assetVariant %>/styles/colours.css" rel="stylesheet">
<link href="/assets/<%= assetVariant %>/styles/colours.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;700&display=swap" rel="stylesheet">
<link href="/assets/styles/transition-page/transition-page.css" rel="stylesheet">
<link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
Expand All @@ -22,23 +22,23 @@
<div class="top-half">
<div class="top-half-content">
<h3>Check your address bar</h3>
<a href="https://go.gov.sg/go-antiphishing" target="_blank" rel="noreferrer noopener">Beware of phishing! <br class="mobile-break">Make sure your link starts with <%- displayHostname.toLowerCase() %></a>
<a href="https://go.gov.sg/go-antiphishing" target="_blank" rel="noreferrer noopener">Beware of phishing! <br class="mobile-break">Make sure your link starts with <%= displayHostname.toLowerCase() %></a>
<p id="url" data-href="<%- escapedLongUrl %>">You will be redirected in <span id="countdown-seconds">6</span> second<span id="s">s</span></p>
<img id="spinner" src="/assets/<%- assetVariant %>/transition-page/images/spinner.gif" alt="loading" />
<div class="browser-image" style="background-image: url('/assets/<%- assetVariant %>/transition-page/images/browser.svg');">
<div class="links links-<%- assetVariant %>" ><%- displayHostname.toLowerCase() %>/</div>
<img id="spinner" src="/assets/<%= assetVariant %>/transition-page/images/spinner.gif" alt="loading" />
<div class="browser-image" style="background-image: url('/assets/<%= assetVariant %>/transition-page/images/browser.svg');">
<div class="links links-<%= assetVariant %>" ><%= displayHostname.toLowerCase() %>/</div>
</div>
</div>
</div>
<div class="bottom-half">

<div id="skip">
<span>I've checked the link. Skip ahead</span>
<img src="/assets/<%- assetVariant %>/transition-page/icons/icon-arrow-right.svg" alt="right arrow" />
<img src="/assets/<%= assetVariant %>/transition-page/icons/icon-arrow-right.svg" alt="right arrow" />
</div>
<div class="footer">
<div id="logo">
<img src="/assets/<%- assetVariant %>/transition-page/icons/ogp-logo.svg" alt="ogp logo" />
<img src="/assets/<%= assetVariant %>/transition-page/icons/ogp-logo.svg" alt="ogp logo" />
</div>
<p>You will only be shown this page the first time you access this short link.</p>
</div>
Expand Down
Loading