/
loginUsingIdToken.js
42 lines (35 loc) · 1.1 KB
/
loginUsingIdToken.js
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
// @flow
import { Response, ErrorResponse } from "@webiny/commodo-graphql";
import generateJWT from "../generateJWT";
type GetModelType = (context: Object) => Function;
const invalidCredentials = new ErrorResponse({
code: "INVALID_CREDENTIALS",
message: "Invalid credentials."
});
export default (getModel: GetModelType) => async (root: any, args: Object, context: Object) => {
const SecurityUser = getModel(context);
// Decode the login token
let user;
try {
const authPlugin = context.plugins
.byType("security-authentication-provider")
.filter(pl => pl.hasOwnProperty("getUser"))
.pop();
user = await authPlugin.getUser({ idToken: args.idToken, SecurityUser }, context);
} catch (err) {
return new ErrorResponse({
code: err.code,
message: err.message
});
}
if (!user) {
return invalidCredentials;
}
// Generate token
const { token, expiresOn } = await generateJWT(user, context);
return new Response({
user,
token,
expiresOn
});
};