Skip to content

Commit f7b4963

Browse files
authored
Added Parsing of Queries to Alias Urls (#92)
* added parsing * Added some safe conditional logic for encryption endpoint
1 parent 76db62d commit f7b4963

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

routes/survey.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,16 @@ const getsurvey = async (query: string | ParsedQs, req: Request<{}>, res: Respon
9090
res.redirect("/");
9191
}
9292
}
93+
94+
95+
const add_query = (query: Object, parsed: Object) => {
96+
Object.entries(query).forEach(([key, value]) => {
97+
if (parsed[key] === undefined) { // never overwrites parsed params
98+
parsed[key] = value;
99+
}
100+
});
101+
}
102+
93103
// Test URL: https://raw.githubusercontent.com/Watts-Lab/surveyor/main/surveys/CRT.csv
94104
// e.g. http://localhost:4000/s/?url=https://raw.githubusercontent.com/Watts-Lab/surveyor/main/surveys/CRT.csv&name=Mark
95105
router.get("/s/", csrfProtection, async (req, res) => {
@@ -121,8 +131,12 @@ router.get("/sa/:alias/", csrfProtection, async (req, res: Response) => {
121131
return res.status(400).send('Invalid URL. Please Email Researcher for url')
122132
}
123133

124-
const parsed = record[0]
134+
let parsed = record[0]
125135

136+
// queryies in the url
137+
if (req.query) {
138+
add_query(req.query, parsed);
139+
}
126140
if (parsed.status == 'inactive') {
127141
return res.status(400).send("URL has expired.")
128142
}
@@ -163,15 +177,9 @@ router.get("/se/:encrypted", csrfProtection, async (req, res) => {
163177
const decrypted = decrypt(encrypted)
164178
const parsed = await JSON.parse(decrypted)
165179

166-
// queryies in the url
167-
const queries: Object = req.query
168-
169-
Object.entries(queries).forEach(([key, value]) => { // encrypted takes precedence
170-
if (parsed[key] === undefined) {
171-
parsed[key] = value
172-
}
173-
})
174-
180+
if (req.query) {
181+
add_query(req.query, parsed)
182+
}
175183
if (!(parsed.url)) { // only query require is url
176184
return res.status(400).send("Wrong encryption. No URL is found.")
177185
}

0 commit comments

Comments
 (0)