-
Notifications
You must be signed in to change notification settings - Fork 322
/
Copy pathsso.ts
52 lines (45 loc) · 1.35 KB
/
sso.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { createLoginURL, isCallbackUrlValid } from '../../../src/serverless/nus-auth';
import {
createRouteHandler,
defaultFallback,
defaultRescue,
Handler,
MethodHandlers,
} from '../../../src/serverless/handler';
const errors = {
noCallbackUrl: 'ERR_NO_REFERER',
invalidCallbackUrl: 'ERR_INVALID_REFERER',
};
function getCallbackUrl(callback: string | string[] | undefined) {
if (typeof callback === 'string') return callback;
if (Array.isArray(callback) && callback.length > 0) return callback[0];
throw new Error(errors.noCallbackUrl);
}
const handleGet: Handler = async (req, res) => {
try {
const callback = getCallbackUrl(req.query.callback);
if (!callback) {
throw new Error(errors.noCallbackUrl);
}
if (!isCallbackUrlValid(callback)) {
throw new Error(errors.invalidCallbackUrl);
}
res.send(createLoginURL(callback));
} catch (err) {
if (err.message === errors.noCallbackUrl) {
res.json({
message: 'Request needs a referer',
});
} else if (err.message === errors.invalidCallbackUrl) {
res.json({
message: 'Invalid referer given. URL must be from a valid domain.',
});
} else {
throw err;
}
}
};
const methodHandlers: MethodHandlers = {
GET: handleGet,
};
export default createRouteHandler(methodHandlers, defaultFallback, defaultRescue(true));