mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-08-17 21:25:54 +02:00
133 lines
4.6 KiB
JavaScript
133 lines
4.6 KiB
JavaScript
import axios from 'axios';
|
|
|
|
const serverUrl = process.env.SERVER_URL;
|
|
const APPID = process.env.APP_ID;
|
|
const masterKEY = process.env.MASTER_KEY;
|
|
const clientUrl = process.env.PUBLIC_URL;
|
|
const ssoApiUrl = process.env.SSO_API_URL || 'https://sso.opensignlabs.com/api'; //'https://osl-jacksonv2.vercel.app/api';
|
|
/**
|
|
* ssoSign is function which is used to sign up/sign in with SSO
|
|
* @param code It is code return by jackson using authorize endpoint
|
|
* @param email It is user's email with user sign in/sign up
|
|
* @returns if success {email, name, phone message, sessiontoken} else on reject error {code, message}
|
|
*/
|
|
|
|
export default async function ssoSignin(request) {
|
|
const code = request.params.code;
|
|
const userEmail = request.params.email;
|
|
try {
|
|
const headers = { 'content-type': 'application/x-www-form-urlencoded' };
|
|
const axiosRes = await axios.post(
|
|
ssoApiUrl + '/oauth/token',
|
|
{
|
|
grant_type: 'authorization_code',
|
|
client_id: 'dummy',
|
|
tenant: 'Okta-dev-nxglabs-in',
|
|
product: 'OpenSign',
|
|
client_secret: 'dummy',
|
|
redirect_uri: clientUrl + '/sso',
|
|
code: code,
|
|
},
|
|
{ headers: headers }
|
|
);
|
|
const ssoAccessToken = axiosRes.data && axiosRes.data.access_token;
|
|
const authData = { sso: { id: userEmail, access_token: ssoAccessToken } };
|
|
const userQuery = new Parse.Query(Parse.User);
|
|
userQuery.equalTo('username', userEmail);
|
|
const res = await userQuery.first({ useMasterKey: true });
|
|
if (res) {
|
|
try {
|
|
const SignIn = await axios.put(
|
|
serverUrl + '/users/' + res.id,
|
|
{ authData: authData },
|
|
{
|
|
headers: {
|
|
'X-Parse-Application-Id': APPID,
|
|
'X-Parse-Master-key': masterKEY,
|
|
},
|
|
}
|
|
);
|
|
|
|
if (SignIn.data) {
|
|
const response = await axios.get(ssoApiUrl + '/oauth/userinfo', {
|
|
headers: {
|
|
Authorization: `Bearer ${ssoAccessToken}`,
|
|
},
|
|
});
|
|
const sessiontoken = SignIn.data.sessionToken;
|
|
// console.log('sso sessiontoken', sessiontoken);
|
|
const payload = {
|
|
email: userEmail,
|
|
name: response.data?.firstName + ' ' + response.data?.lastName,
|
|
phone: response?.data?.phone || '',
|
|
message: 'User Sign In',
|
|
sessiontoken: sessiontoken,
|
|
};
|
|
return payload;
|
|
}
|
|
} catch (err) {
|
|
const errCode = err?.response?.data?.code || err?.response?.status || err?.code || 400;
|
|
const message =
|
|
err?.response?.data?.error ||
|
|
err?.response?.data ||
|
|
err?.message ||
|
|
'Internal server error.';
|
|
console.log('err in user sso sign in', errCode, message);
|
|
throw new Parse.Error(errCode, message);
|
|
}
|
|
} else {
|
|
// console.log("in sign up condition");
|
|
const response = await axios.get(ssoApiUrl + '/oauth/userinfo', {
|
|
headers: {
|
|
Authorization: `Bearer ${ssoAccessToken}`,
|
|
},
|
|
});
|
|
if (response.data && response.data.id) {
|
|
try {
|
|
const SignUp = await axios.post(
|
|
serverUrl + '/users',
|
|
{
|
|
authData: authData,
|
|
username: response.data.email,
|
|
email: response.data.email,
|
|
phone: response.data?.phone,
|
|
name: response.data?.firstName + ' ' + response.data?.lastName,
|
|
},
|
|
{
|
|
headers: {
|
|
'X-Parse-Application-Id': APPID,
|
|
'X-Parse-Revocable-Session': '1',
|
|
},
|
|
}
|
|
);
|
|
if (SignUp.data) {
|
|
const sessiontoken = SignUp.data.sessionToken;
|
|
const payload = {
|
|
email: userEmail,
|
|
name: SignUp?.data?.name,
|
|
phone: SignUp?.data?.phone || '',
|
|
message: 'User Sign Up',
|
|
sessiontoken: sessiontoken,
|
|
};
|
|
return payload;
|
|
}
|
|
} catch (err) {
|
|
const errCode = err?.response?.data?.code || err?.response?.status || err?.code || 400;
|
|
const message =
|
|
err?.response?.data?.error ||
|
|
err?.response?.data ||
|
|
err?.message ||
|
|
'Internal server error.';
|
|
console.log('err in user sso sign up', errCode, message);
|
|
throw new Parse.Error(errCode, message);
|
|
}
|
|
}
|
|
}
|
|
} catch (err) {
|
|
const errCode = err?.response?.status || err?.code || 400;
|
|
const message = err?.response?.data || err?.message || 'Internal server error.';
|
|
console.log('err in ssoSign', errCode, message);
|
|
throw new Parse.Error(errCode, message);
|
|
}
|
|
}
|