diff --git a/apps/OpenSign/src/components/AddSigner.js b/apps/OpenSign/src/components/AddSigner.js index ca605b626a..4bf088502c 100644 --- a/apps/OpenSign/src/components/AddSigner.js +++ b/apps/OpenSign/src/components/AddSigner.js @@ -24,7 +24,7 @@ const AddSigner = (props) => { if (savedUserDetails && addYourself) { setName(savedUserDetails.name); setPhone(savedUserDetails?.phone || ""); - setEmail(savedUserDetails.email); + setEmail(savedUserDetails.email?.toLowerCase()?.replace(/\s/g, "")); } }, [addYourself]); diff --git a/apps/OpenSign/src/components/AddUser.js b/apps/OpenSign/src/components/AddUser.js index 50106d63ff..0fa459f64e 100644 --- a/apps/OpenSign/src/components/AddUser.js +++ b/apps/OpenSign/src/components/AddUser.js @@ -75,156 +75,46 @@ const AddUser = (props) => { setIsFormLoader(false); } else { if (localStorage.getItem("TenantId")) { + const timezone = usertimezone; try { - const extUser = new Parse.Object("contracts_Users"); - extUser.set("Name", formdata.name); - if (formdata.phone) { - extUser.set("Phone", formdata.phone); - } - extUser.set("Email", formdata.email); - extUser.set("UserRole", `contracts_${formdata.role}`); - if (formdata?.team) { - extUser.set("TeamIds", [ - { - __type: "Pointer", - className: "contracts_Teams", - objectId: formdata.team - } - ]); - } - if (localUser && localUser.OrganizationId) { - extUser.set("OrganizationId", { - __type: "Pointer", - className: "contracts_Organizations", - objectId: localUser.OrganizationId.objectId - }); - } - if (localUser && localUser.Company) { - extUser.set("Company", localUser.Company); - } - - if (localStorage.getItem("TenantId")) { - extUser.set("TenantId", { - __type: "Pointer", - className: "partners_Tenant", - objectId: localStorage.getItem("TenantId") - }); - } - const timezone = usertimezone; - if (timezone) { - extUser.set("Timezone", timezone); - } - try { - const _users = Parse.Object.extend("User"); - const _user = new _users(); - _user.set("name", formdata.name); - _user.set("username", formdata.email); - _user.set("email", formdata.email); - _user.set("password", formdata.password); - if (formdata.phone) { - _user.set("phone", formdata.phone); + const params = { + name: formdata.name, + email: formdata.email, + phone: formdata.phone, + password: formdata.password, + role: formdata.role, + team: formdata.team, + timezone: timezone, + tenantId: localStorage.getItem("TenantId"), + organization: { + objectId: localUser?.OrganizationId?.objectId, + company: localUser?.Company } - - const user = await _user.save(); - if (user) { - const currentUser = Parse.User.current(); - extUser.set( - "CreatedBy", - Parse.User.createWithoutData(currentUser.id) - ); - - extUser.set("UserId", user); - const acl = new Parse.ACL(); - acl.setPublicReadAccess(true); - acl.setPublicWriteAccess(true); - acl.setReadAccess(currentUser.id, true); - acl.setWriteAccess(currentUser.id, true); - - extUser.setACL(acl); - - const res = await extUser.save(); - - const parseData = JSON.parse(JSON.stringify(res)); - - if (props.closePopup) { - props.closePopup(); - } - if (props.handleUserData) { - if (formdata?.team) { - const team = teamList.find( - (x) => x.objectId === formdata.team - ); - parseData.TeamIds = parseData.TeamIds.map((y) => - y.objectId === team.objectId ? team : y - ); - } - props.handleUserData(parseData); - } - - setIsFormLoader(false); - setFormdata({ - name: "", - email: "", - phone: "", - team: "", - role: "" - }); - props.showAlert("success", t("user-created-successfully")); - } - } catch (err) { - console.log("err ", err); - if (err.code === 202) { - const params = { email: formdata.email }; - const userRes = await Parse.Cloud.run("getUserId", params); - const currentUser = Parse.User.current(); - extUser.set( - "CreatedBy", - Parse.User.createWithoutData(currentUser.id) + }; + const res = await Parse.Cloud.run("adduser", params); + const parseData = JSON.parse(JSON.stringify(res)); + console.log("parseData ", parseData); + if (props.closePopup) { + props.closePopup(); + } + if (props.handleUserData) { + if (formdata?.team) { + const team = teamList.find((x) => x.objectId === formdata.team); + parseData.TeamIds = parseData.TeamIds.map((y) => + y.objectId === team.objectId ? team : y ); - - extUser.set("UserId", { - __type: "Pointer", - className: "_User", - objectId: userRes.id - }); - const acl = new Parse.ACL(); - acl.setPublicReadAccess(true); - acl.setPublicWriteAccess(true); - acl.setReadAccess(currentUser.id, true); - acl.setWriteAccess(currentUser.id, true); - - extUser.setACL(acl); - const res = await extUser.save(); - - const parseData = JSON.parse(JSON.stringify(res)); - if (props.closePopup) { - props.closePopup(); - } - if (props.handleUserData) { - if (formdata?.team) { - const team = teamList.find( - (x) => x.objectId === formdata.team - ); - parseData.TeamIds = parseData.TeamIds.map((y) => - y.objectId === team.objectId ? team : y - ); - } - props.handleUserData(parseData); - } - setIsFormLoader(false); - setFormdata({ - name: "", - email: "", - phone: "", - team: "", - role: "" - }); - props.showAlert("success", t("user-created-successfully")); - } else { - setIsFormLoader(false); - props.showAlert("danger", t("something-went-wrong-mssg")); } + props.handleUserData(parseData); } + setIsFormLoader(false); + setFormdata({ + name: "", + email: "", + phone: "", + team: "", + role: "" + }); + props.showAlert("success", t("user-created-successfully")); } catch (err) { console.log("err", err); setIsFormLoader(false); diff --git a/apps/OpenSign/src/pages/AddAdmin.js b/apps/OpenSign/src/pages/AddAdmin.js index 65d254f1cb..5681f7def9 100644 --- a/apps/OpenSign/src/pages/AddAdmin.js +++ b/apps/OpenSign/src/pages/AddAdmin.js @@ -16,8 +16,7 @@ import { useTranslation } from "react-i18next"; import { emailRegex } from "../constant/const"; const AddAdmin = () => { - const appName = - "OpenSign™"; + const appName = "OpenSign™"; const { t, i18n } = useTranslation(); const navigate = useNavigate(); const dispatch = useDispatch(); @@ -96,7 +95,7 @@ const AddAdmin = () => { setState({ loading: true }); const userDetails = { name: name, - email: email, + email: email?.toLowerCase()?.replace(/\s/g, ""), phone: phone, company: company, jobTitle: jobTitle @@ -106,10 +105,10 @@ const AddAdmin = () => { event.preventDefault(); const user = new Parse.User(); user.set("name", name); - user.set("email", email); + user.set("email", email?.toLowerCase()?.replace(/\s/g, "")); user.set("password", password); user.set("phone", phone); - user.set("username", email); + user.set("username", email?.toLowerCase()?.replace(/\s/g, "")); const userRes = await user.save(); if (userRes) { const params = { @@ -117,7 +116,7 @@ const AddAdmin = () => { jobTitle: jobTitle, company: company, name: name, - email: email, + email: email?.toLowerCase()?.replace(/\s/g, ""), phone: phone, role: "contracts_Admin", timezone: usertimezone diff --git a/apps/OpenSignServer/auth/authadapter.js b/apps/OpenSignServer/auth/authadapter.js index 1e12c78363..f47a2097df 100644 --- a/apps/OpenSignServer/auth/authadapter.js +++ b/apps/OpenSignServer/auth/authadapter.js @@ -11,7 +11,11 @@ export const SSOAuth = { Authorization: `Bearer ${authData.access_token}`, }, }); - if (response.data && response.data.id && response.data.email === authData.id) { + if ( + response.data && + response.data.id && + response.data.email?.toLowerCase()?.replace(/\s/g, '') === authData.id + ) { return; } throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'SSO auth is invalid for this user.'); diff --git a/apps/OpenSignServer/cloud/main.js b/apps/OpenSignServer/cloud/main.js index aa7b91d087..f97e68b5be 100644 --- a/apps/OpenSignServer/cloud/main.js +++ b/apps/OpenSignServer/cloud/main.js @@ -52,6 +52,7 @@ import forwardDoc from './parsefunction/ForwardDoc.js'; import saveAsTemplate from './parsefunction/saveAsTemplate.js'; import updateTenant from './parsefunction/updateTenant.js'; import recreateDocument from './parsefunction/recreateDocument.js'; +import addUser from './parsefunction/addUser.js'; // This afterSave function triggers after an object is added or updated in the specified class, allowing for post-processing logic. Parse.Cloud.afterSave('contracts_Document', DocumentAftersave); @@ -114,3 +115,4 @@ Parse.Cloud.define('forwarddoc', forwardDoc); Parse.Cloud.define('saveastemplate', saveAsTemplate); Parse.Cloud.define('updatetenant', updateTenant); Parse.Cloud.define('recreatedoc', recreateDocument); +Parse.Cloud.define('adduser', addUser); diff --git a/apps/OpenSignServer/cloud/parsefunction/addUser.js b/apps/OpenSignServer/cloud/parsefunction/addUser.js new file mode 100644 index 0000000000..7e1495db83 --- /dev/null +++ b/apps/OpenSignServer/cloud/parsefunction/addUser.js @@ -0,0 +1,106 @@ +export default async function addUser(request) { + const { phone, name, password, organization, team, tenantId, timezone, role } = request.params; + const email = request.params?.email?.toLowerCase()?.replace(/\s/g, ''); + if (!request.user) { + throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'Invalid session token.'); + } + const currentUser = { __type: 'Pointer', className: '_User', objectId: request.user.id }; + if (name && email && password && organization && team && role && tenantId) { + try { + const extUser = new Parse.Object('contracts_Users'); + extUser.set('Name', name); + if (phone) { + extUser.set('Phone', phone); + } + extUser.set('Email', email); + extUser.set('UserRole', `contracts_${role}`); + if (team) { + extUser.set('TeamIds', [ + { + __type: 'Pointer', + className: 'contracts_Teams', + objectId: team, + }, + ]); + } + if (organization.objectId) { + extUser.set('OrganizationId', { + __type: 'Pointer', + className: 'contracts_Organizations', + objectId: organization.objectId, + }); + } + if (organization.company) { + extUser.set('Company', organization.company); + } + + if (tenantId) { + extUser.set('TenantId', { + __type: 'Pointer', + className: 'partners_Tenant', + objectId: tenantId, + }); + } + if (timezone) { + extUser.set('Timezone', timezone); + } + try { + const _users = Parse.Object.extend('User'); + const _user = new _users(); + _user.set('name', name); + _user.set('username', email); + _user.set('email', email); + _user.set('password', password); + if (phone) { + _user.set('phone', phone); + } + + const user = await _user.save(); + if (user) { + extUser.set('CreatedBy', currentUser); + + extUser.set('UserId', user); + const acl = new Parse.ACL(); + acl.setPublicReadAccess(true); + acl.setPublicWriteAccess(true); + acl.setReadAccess(request.user.id, true); + acl.setWriteAccess(request.user.id, true); + extUser.setACL(acl); + const extUserRes = await extUser.save(); + + const parseData = JSON.parse(JSON.stringify(extUserRes)); + return parseData; + } + } catch (err) { + console.log('err ', err); + if (err.code === 202) { + const userQuery = new Parse.Query(Parse.User); + userQuery.equalTo('email', email); + const userRes = await userQuery.first({ useMasterKey: true }); + userRes.setPassword(password); + await userRes.save(null, { useMasterKey: true }); + extUser.set('CreatedBy', currentUser); + extUser.set('UserId', { __type: 'Pointer', className: '_User', objectId: userRes.id }); + const acl = new Parse.ACL(); + acl.setPublicReadAccess(true); + acl.setPublicWriteAccess(true); + acl.setReadAccess(request.user.id, true); + acl.setWriteAccess(request.user.id, true); + + extUser.setACL(acl); + const res = await extUser.save(); + + const parseData = JSON.parse(JSON.stringify(res)); + return parseData; + } else { + throw new Parse.Error(400, err?.message || 'something went wrong'); + } + } + } catch (err) { + console.log('err', err); + throw new Parse.Error(400, err?.message || 'something went wrong'); + } + } else { + throw new Parse.Error(400, 'Please provide all required fields.'); + } +}