mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-09-13 21:27:40 +02:00
Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18a4c8523a | ||
|
|
f7b39409a8 | ||
|
|
6283524d2f | ||
|
|
216288fd09 |
@@ -3,6 +3,7 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- 'main'
|
- 'main'
|
||||||
|
- 'staging'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
docker:
|
docker:
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const AddSigner = (props) => {
|
|||||||
if (savedUserDetails && addYourself) {
|
if (savedUserDetails && addYourself) {
|
||||||
setName(savedUserDetails.name);
|
setName(savedUserDetails.name);
|
||||||
setPhone(savedUserDetails?.phone || "");
|
setPhone(savedUserDetails?.phone || "");
|
||||||
setEmail(savedUserDetails.email);
|
setEmail(savedUserDetails.email?.toLowerCase()?.replace(/\s/g, ""));
|
||||||
}
|
}
|
||||||
}, [addYourself]);
|
}, [addYourself]);
|
||||||
|
|
||||||
|
|||||||
@@ -75,156 +75,46 @@ const AddUser = (props) => {
|
|||||||
setIsFormLoader(false);
|
setIsFormLoader(false);
|
||||||
} else {
|
} else {
|
||||||
if (localStorage.getItem("TenantId")) {
|
if (localStorage.getItem("TenantId")) {
|
||||||
|
const timezone = usertimezone;
|
||||||
try {
|
try {
|
||||||
const extUser = new Parse.Object("contracts_Users");
|
const params = {
|
||||||
extUser.set("Name", formdata.name);
|
name: formdata.name,
|
||||||
if (formdata.phone) {
|
email: formdata.email,
|
||||||
extUser.set("Phone", formdata.phone);
|
phone: formdata.phone,
|
||||||
}
|
password: formdata.password,
|
||||||
extUser.set("Email", formdata.email);
|
role: formdata.role,
|
||||||
extUser.set("UserRole", `contracts_${formdata.role}`);
|
team: formdata.team,
|
||||||
if (formdata?.team) {
|
timezone: timezone,
|
||||||
extUser.set("TeamIds", [
|
tenantId: localStorage.getItem("TenantId"),
|
||||||
{
|
organization: {
|
||||||
__type: "Pointer",
|
objectId: localUser?.OrganizationId?.objectId,
|
||||||
className: "contracts_Teams",
|
company: localUser?.Company
|
||||||
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 user = await _user.save();
|
const res = await Parse.Cloud.run("adduser", params);
|
||||||
if (user) {
|
const parseData = JSON.parse(JSON.stringify(res));
|
||||||
const currentUser = Parse.User.current();
|
console.log("parseData ", parseData);
|
||||||
extUser.set(
|
if (props.closePopup) {
|
||||||
"CreatedBy",
|
props.closePopup();
|
||||||
Parse.User.createWithoutData(currentUser.id)
|
}
|
||||||
|
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", 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)
|
|
||||||
);
|
|
||||||
|
|
||||||
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) {
|
} catch (err) {
|
||||||
console.log("err", err);
|
console.log("err", err);
|
||||||
setIsFormLoader(false);
|
setIsFormLoader(false);
|
||||||
|
|||||||
@@ -16,8 +16,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { emailRegex } from "../constant/const";
|
import { emailRegex } from "../constant/const";
|
||||||
|
|
||||||
const AddAdmin = () => {
|
const AddAdmin = () => {
|
||||||
const appName =
|
const appName = "OpenSign™";
|
||||||
"OpenSign™";
|
|
||||||
const { t, i18n } = useTranslation();
|
const { t, i18n } = useTranslation();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
@@ -96,7 +95,7 @@ const AddAdmin = () => {
|
|||||||
setState({ loading: true });
|
setState({ loading: true });
|
||||||
const userDetails = {
|
const userDetails = {
|
||||||
name: name,
|
name: name,
|
||||||
email: email,
|
email: email?.toLowerCase()?.replace(/\s/g, ""),
|
||||||
phone: phone,
|
phone: phone,
|
||||||
company: company,
|
company: company,
|
||||||
jobTitle: jobTitle
|
jobTitle: jobTitle
|
||||||
@@ -106,10 +105,10 @@ const AddAdmin = () => {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const user = new Parse.User();
|
const user = new Parse.User();
|
||||||
user.set("name", name);
|
user.set("name", name);
|
||||||
user.set("email", email);
|
user.set("email", email?.toLowerCase()?.replace(/\s/g, ""));
|
||||||
user.set("password", password);
|
user.set("password", password);
|
||||||
user.set("phone", phone);
|
user.set("phone", phone);
|
||||||
user.set("username", email);
|
user.set("username", email?.toLowerCase()?.replace(/\s/g, ""));
|
||||||
const userRes = await user.save();
|
const userRes = await user.save();
|
||||||
if (userRes) {
|
if (userRes) {
|
||||||
const params = {
|
const params = {
|
||||||
@@ -117,7 +116,7 @@ const AddAdmin = () => {
|
|||||||
jobTitle: jobTitle,
|
jobTitle: jobTitle,
|
||||||
company: company,
|
company: company,
|
||||||
name: name,
|
name: name,
|
||||||
email: email,
|
email: email?.toLowerCase()?.replace(/\s/g, ""),
|
||||||
phone: phone,
|
phone: phone,
|
||||||
role: "contracts_Admin",
|
role: "contracts_Admin",
|
||||||
timezone: usertimezone
|
timezone: usertimezone
|
||||||
|
|||||||
@@ -11,7 +11,11 @@ export const SSOAuth = {
|
|||||||
Authorization: `Bearer ${authData.access_token}`,
|
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;
|
return;
|
||||||
}
|
}
|
||||||
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'SSO auth is invalid for this user.');
|
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'SSO auth is invalid for this user.');
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ import forwardDoc from './parsefunction/ForwardDoc.js';
|
|||||||
import saveAsTemplate from './parsefunction/saveAsTemplate.js';
|
import saveAsTemplate from './parsefunction/saveAsTemplate.js';
|
||||||
import updateTenant from './parsefunction/updateTenant.js';
|
import updateTenant from './parsefunction/updateTenant.js';
|
||||||
import recreateDocument from './parsefunction/recreateDocument.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.
|
// 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);
|
Parse.Cloud.afterSave('contracts_Document', DocumentAftersave);
|
||||||
@@ -114,3 +115,4 @@ Parse.Cloud.define('forwarddoc', forwardDoc);
|
|||||||
Parse.Cloud.define('saveastemplate', saveAsTemplate);
|
Parse.Cloud.define('saveastemplate', saveAsTemplate);
|
||||||
Parse.Cloud.define('updatetenant', updateTenant);
|
Parse.Cloud.define('updatetenant', updateTenant);
|
||||||
Parse.Cloud.define('recreatedoc', recreateDocument);
|
Parse.Cloud.define('recreatedoc', recreateDocument);
|
||||||
|
Parse.Cloud.define('adduser', addUser);
|
||||||
|
|||||||
@@ -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.');
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user