Skip to content

Migration_Tempelate_ErrorFix and BugFix #1064 #1728

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: staging
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
180 changes: 97 additions & 83 deletions apps/OpenSignServer/cloud/parsefunction/usersignup.js
Original file line number Diff line number Diff line change
@@ -1,131 +1,145 @@
import axios from 'axios';
import { cloudServerUrl } from '../../Utils.js';
const serverUrl = cloudServerUrl; //process.env.SERVER_URL;
const serverUrl = cloudServerUrl;

const APPID = process.env.APP_ID;
const masterKEY = process.env.MASTER_KEY;

if (!APPID || !masterKEY) {
throw new Error('Missing APP_ID or MASTER_KEY in environment variables');
}

// Helper: Create a new tenant (partner)
async function createTenant(userDetails, userId) {
const partnerCls = Parse.Object.extend('partners_Tenant');
const partnerQuery = new partnerCls();

partnerQuery.set('UserId', {
__type: 'Pointer',
className: '_User',
objectId: userId,
});
partnerQuery.set('TenantName', userDetails.company || '');
partnerQuery.set('EmailAddress', userDetails.email);
partnerQuery.set('IsActive', true);
partnerQuery.set('CreatedBy', {
__type: 'Pointer',
className: '_User',
objectId: userId,
});

if (userDetails.phone) partnerQuery.set('ContactNumber', userDetails.phone);
if (userDetails.pincode) partnerQuery.set('PinCode', userDetails.pincode);
if (userDetails.country) partnerQuery.set('Country', userDetails.country);
if (userDetails.state) partnerQuery.set('State', userDetails.state);
if (userDetails.city) partnerQuery.set('City', userDetails.city);
if (userDetails.address) partnerQuery.set('Address', userDetails.address);

return await partnerQuery.save(null, { useMasterKey: true });
}

// Helper: Create a new extended user
async function createExtendedUser(userDetails, userId, tenantId, extClass) {
const extCls = Parse.Object.extend(`${extClass}_Users`);
const newObj = new extCls();

newObj.set('UserId', {
__type: 'Pointer',
className: '_User',
objectId: userId,
});
newObj.set('UserRole', userDetails.role);
newObj.set('Email', userDetails.email);
newObj.set('Name', userDetails.name);
newObj.set('TenantId', {
__type: 'Pointer',
className: 'partners_Tenant',
objectId: tenantId,
});

if (userDetails.phone) newObj.set('Phone', userDetails.phone);
if (userDetails.company) newObj.set('Company', userDetails.company);
if (userDetails.jobTitle) newObj.set('JobTitle', userDetails.jobTitle);
if (userDetails.timezone) newObj.set('Timezone', userDetails.timezone);

return await newObj.save(null, { useMasterKey: true });
}

// Core user creation/login
async function saveUser(userDetails) {
const normalizedEmail = userDetails.email?.toLowerCase()?.trim().replace(/\s/g, '');

const userQuery = new Parse.Query(Parse.User);
userQuery.equalTo('username', userDetails.email);
userQuery.equalTo('username', normalizedEmail);
const userRes = await userQuery.first({ useMasterKey: true });

if (userRes) {
const url = `${serverUrl}/loginAs`;
const axiosRes = await axios({
method: 'POST',
url: url,
url,
headers: {
'Content-Type': 'application/json;charset=utf-8',
'X-Parse-Application-Id': APPID,
'X-Parse-Master-Key': masterKEY,
},
params: {
userId: userRes.id,
},
params: { userId: userRes.id },
});
const login = await axiosRes.data;
// console.log("login ", login);

const login = axiosRes.data;
return { id: login.objectId, sessionToken: login.sessionToken };
} else {
const user = new Parse.User();
user.set('username', userDetails.email);
user.set('username', normalizedEmail);
user.set('password', userDetails.password);
user.set('email', userDetails?.email?.toLowerCase()?.replace(/\s/g, ''));
if (userDetails?.phone) {
user.set('email', normalizedEmail);
user.set('name', userDetails.name);

if (userDetails.phone) {
user.set('phone', userDetails.phone);
}
user.set('name', userDetails.name);

const res = await user.signUp();
// console.log("res ", res);
return { id: res.id, sessionToken: res.getSessionToken() };
}
}

// Main export function
export default async function usersignup(request) {
const userDetails = request.params.userDetails;
const user = await saveUser(userDetails);

try {
userDetails.email = userDetails.email?.toLowerCase()?.trim().replace(/\s/g, '');

const user = await saveUser(userDetails);
const extClass = userDetails.role.split('_')[0];

const extQuery = new Parse.Query(extClass + '_Users');
const extQuery = new Parse.Query(`${extClass}_Users`);
extQuery.equalTo('UserId', {
__type: 'Pointer',
className: '_User',
objectId: user.id,
});

const extUser = await extQuery.first({ useMasterKey: true });

if (extUser) {
return { message: 'User already exist' };
return { message: 'User already exists' };
} else {
// console.log("role ", role);
const partnerCls = Parse.Object.extend('partners_Tenant');
const partnerQuery = new partnerCls();
partnerQuery.set('UserId', {
__type: 'Pointer',
className: '_User',
objectId: user.id,
});

if (userDetails?.phone) {
partnerQuery.set('ContactNumber', userDetails.phone);
}
partnerQuery.set('TenantName', userDetails.company);
partnerQuery.set('EmailAddress', userDetails?.email?.toLowerCase()?.replace(/\s/g, ''));
partnerQuery.set('IsActive', true);
partnerQuery.set('CreatedBy', {
__type: 'Pointer',
className: '_User',
objectId: user.id,
});
if (userDetails && userDetails.pincode) {
partnerQuery.set('PinCode', userDetails.pincode);
}
if (userDetails && userDetails.country) {
partnerQuery.set('Country', userDetails.country);
}
if (userDetails && userDetails.state) {
partnerQuery.set('State', userDetails.state);
}
if (userDetails && userDetails.city) {
partnerQuery.set('City', userDetails.city);
}
if (userDetails && userDetails.address) {
partnerQuery.set('Address', userDetails.address);
}
const tenantRes = await partnerQuery.save(null, { useMasterKey: true });
// console.log("tenantRes ", tenantRes);
const extCls = Parse.Object.extend(extClass + '_Users');
const newObj = new extCls();
newObj.set('UserId', {
__type: 'Pointer',
className: '_User',
objectId: user.id,
});
newObj.set('UserRole', userDetails.role);
newObj.set('Email', userDetails?.email?.toLowerCase()?.replace(/\s/g, ''));
newObj.set('Name', userDetails.name);
if (userDetails?.phone) {
newObj.set('Phone', userDetails?.phone);
}
newObj.set('TenantId', {
__type: 'Pointer',
className: 'partners_Tenant',
objectId: tenantRes.id,
});
if (userDetails && userDetails.company) {
newObj.set('Company', userDetails.company);
}
if (userDetails && userDetails.jobTitle) {
newObj.set('JobTitle', userDetails.jobTitle);
}
if (userDetails && userDetails?.timezone) {
newObj.set('Timezone', userDetails.timezone);
}
const extRes = await newObj.save(null, { useMasterKey: true });
return { message: 'User sign up', sessionToken: user.sessionToken };
const tenantRes = await createTenant(userDetails, user.id);
await createExtendedUser(userDetails, user.id, tenantRes.id, extClass);

return {
message: 'User signed up successfully',
sessionToken: user.sessionToken,
userId: user.id,
};
}
} catch (err) {
console.log('Err ', err);
console.error('Signup Error:', err);
return {
error: true,
message: err.message || 'Unknown error occurred during signup',
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
*
* @param {Parse} Parse
*/
exports.up = async Parse => {
const up = async Parse => {
const className = 'contracts_Template';
const schema = new Parse.Schema(className);
schema.addString('OriginIp');
Expand All @@ -13,9 +13,11 @@ exports.up = async Parse => {
*
* @param {Parse} Parse
*/
exports.down = async Parse => {
const down = async Parse => {
const className = 'contracts_Template';
const schema = new Parse.Schema(className);
schema.deleteField('OriginIp');
return schema.update();
};

module.exports = { up, down };