pull/1171/head
parent
9fbf01c19e
commit
4aacbed28b
@ -1,62 +1,65 @@
|
|||||||
import {
|
import { AuthMethod, User } from "../../../models";
|
||||||
AuthMethod,
|
|
||||||
User
|
|
||||||
} from "../../../models";
|
|
||||||
import { createToken } from "../../../helpers/auth";
|
import { createToken } from "../../../helpers/auth";
|
||||||
import { AuthTokenType } from "../../../variables";
|
import { AuthTokenType } from "../../../variables";
|
||||||
import { getAuthSecret, getJwtProviderAuthLifetime} from "../../../config";
|
import { getAuthSecret, getJwtProviderAuthLifetime } from "../../../config";
|
||||||
|
import { getServerConfig } from "../../../config/serverConfig";
|
||||||
|
|
||||||
interface SSOUserTokenFlowParams {
|
interface SSOUserTokenFlowParams {
|
||||||
email: string;
|
email: string;
|
||||||
firstName: string;
|
firstName: string;
|
||||||
lastName: string;
|
lastName: string;
|
||||||
authMethod: AuthMethod;
|
authMethod: AuthMethod;
|
||||||
callbackPort?: string;
|
callbackPort?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const handleSSOUserTokenFlow = async ({
|
export const handleSSOUserTokenFlow = async ({
|
||||||
email,
|
email,
|
||||||
firstName,
|
firstName,
|
||||||
lastName,
|
lastName,
|
||||||
authMethod,
|
authMethod,
|
||||||
callbackPort
|
callbackPort
|
||||||
}: SSOUserTokenFlowParams) => {
|
}: SSOUserTokenFlowParams) => {
|
||||||
let user = await User.findOne({
|
let user = await User.findOne({
|
||||||
email
|
email
|
||||||
}).select("+publicKey");
|
}).select("+publicKey");
|
||||||
|
|
||||||
if (!user) {
|
|
||||||
user = await new User({
|
|
||||||
email,
|
|
||||||
authMethods: [authMethod],
|
|
||||||
firstName,
|
|
||||||
lastName
|
|
||||||
}).save();
|
|
||||||
}
|
|
||||||
|
|
||||||
let isLinkingRequired = false;
|
const serverCfg = getServerConfig();
|
||||||
if (!user.authMethods.includes(authMethod)) {
|
if (!user && !serverCfg.allowSignUp) throw new Error("User signup disabled");
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
user = await new User({
|
||||||
|
email,
|
||||||
|
authMethods: [authMethod],
|
||||||
|
firstName,
|
||||||
|
lastName
|
||||||
|
}).save();
|
||||||
|
}
|
||||||
|
|
||||||
|
let isLinkingRequired = false;
|
||||||
|
if (!user.authMethods.includes(authMethod)) {
|
||||||
isLinkingRequired = true;
|
isLinkingRequired = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isUserCompleted = !!user.publicKey;
|
const isUserCompleted = !!user.publicKey;
|
||||||
const providerAuthToken = createToken({
|
const providerAuthToken = createToken({
|
||||||
payload: {
|
payload: {
|
||||||
authTokenType: AuthTokenType.PROVIDER_TOKEN,
|
authTokenType: AuthTokenType.PROVIDER_TOKEN,
|
||||||
userId: user._id.toString(),
|
userId: user._id.toString(),
|
||||||
email: user.email,
|
email: user.email,
|
||||||
firstName: user.firstName,
|
firstName: user.firstName,
|
||||||
lastName: user.lastName,
|
lastName: user.lastName,
|
||||||
authMethod,
|
authMethod,
|
||||||
isUserCompleted,
|
isUserCompleted,
|
||||||
isLinkingRequired,
|
isLinkingRequired,
|
||||||
...(callbackPort ? {
|
...(callbackPort
|
||||||
|
? {
|
||||||
callbackPort
|
callbackPort
|
||||||
} : {})
|
}
|
||||||
|
: {})
|
||||||
},
|
},
|
||||||
expiresIn: await getJwtProviderAuthLifetime(),
|
expiresIn: await getJwtProviderAuthLifetime(),
|
||||||
secret: await getAuthSecret(),
|
secret: await getAuthSecret()
|
||||||
});
|
});
|
||||||
|
|
||||||
return { isUserCompleted, providerAuthToken };
|
return { isUserCompleted, providerAuthToken };
|
||||||
}
|
};
|
||||||
|
Loading…
Reference in new issue