Compare commits

...
27 Commits
Author SHA1 Message Date
AndrewandGitHub 879279a382 Merge pull request #1276 from OpenSignLabs/validation 2024-09-30 16:25:31 +05:30
prafull-opensignlabs 74df84e449 feat: add upload option in initials in my signature 2024-09-30 16:23:48 +05:30
ZathielandGitHub 2862ae3302 Merge pull request #1270 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSignServer/mongoose-8.7.0 2024-09-30 11:47:27 +02:00
ZathielandGitHub 7d0dfe480c Merge pull request #1271 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSign/react-bootstrap-2.10.5 2024-09-30 11:47:10 +02:00
ZathielandGitHub c47748ed4d Merge pull request #1272 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSign/eslint-plugin-react-7.37.0 2024-09-30 11:46:59 +02:00
ZathielandGitHub 396504138c Merge pull request #1274 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSign/commitizen-4.3.1 2024-09-30 11:46:44 +02:00
ZathielandGitHub 6e067a160c Merge pull request #1268 from OpenSignLabs/dependabot/npm_and_yarn/apps/OpenSign/npm_and_yarn-dcddfe2757 2024-09-30 11:46:27 +02:00
prafull-opensignlabsandGitHub 63b2693fe0 Merge pull request #1275 from OpenSignLabs/validation
fix: enableOTP is not working correctly
2024-09-30 10:44:14 +05:30
prafull-opensignlabs 76a69d8f3b fix: enableOTP is not working correctly 2024-09-30 10:42:31 +05:30
dependabot[bot]andGitHub 5cd0f55cb2 build(deps-dev): bump commitizen from 4.3.0 to 4.3.1 in /apps/OpenSign
Bumps [commitizen](https://github.com/commitizen/cz-cli) from 4.3.0 to 4.3.1.
- [Release notes](https://github.com/commitizen/cz-cli/releases)
- [Commits](https://github.com/commitizen/cz-cli/compare/v4.3.0...v4.3.1)

---
updated-dependencies:
- dependency-name: commitizen
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 01:05:02 +00:00
dependabot[bot]andGitHub db640b04a6 build(deps-dev): bump eslint-plugin-react in /apps/OpenSign
Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.36.1 to 7.37.0.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.36.1...v7.37.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 01:04:29 +00:00
dependabot[bot]andGitHub 0665bcf30a build(deps): bump react-bootstrap in /apps/OpenSign
Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.10.4 to 2.10.5.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.10.4...v2.10.5)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 01:04:19 +00:00
dependabot[bot]andGitHub 7e8ed42f46 build(deps): bump mongoose from 8.6.3 to 8.7.0 in /apps/OpenSignServer
Bumps [mongoose](https://github.com/Automattic/mongoose) from 8.6.3 to 8.7.0.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Automattic/mongoose/compare/8.6.3...8.7.0)

---
updated-dependencies:
- dependency-name: mongoose
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 00:49:48 +00:00
dependabot[bot]andGitHub 8d7b1a5b9b build(deps): bump rollup in /apps/OpenSign in the npm_and_yarn group
Bumps the npm_and_yarn group in /apps/OpenSign with 1 update: [rollup](https://github.com/rollup/rollup).


Updates `rollup` from 2.79.1 to 2.79.2
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.79.1...v2.79.2)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-28 10:45:46 +00:00
prafull-opensignlabsandGitHub c6829a7d5e Merge pull request #1267 from OpenSignLabs/feat-embed
update the Angular code snippet syntax for use in the @opensign/angular package
2024-09-27 15:17:56 +05:30
RaktimaNXG bef8fbf183 update the Angular code snippet syntax for use in the @opensign/angular package 2024-09-27 14:56:38 +05:30
prafull-opensignlabsandGitHub fca95f09cc Merge pull request #1266 from OpenSignLabs/validation
fix: when pull latest using docker pdf files get remove with useLocal
2024-09-26 17:09:49 +05:30
prafull-opensignlabs 4d6cdf8823 fix: admin exists error 2024-09-26 17:05:06 +05:30
prafull-opensignlabs e34f52dcc5 fix: when pull latest using docker pdf files get remove with useLocal 2024-09-26 17:02:42 +05:30
prafull-opensignlabsandGitHub 91cc4e6f3d Merge pull request #1265 from OpenSignLabs/feat-embed
feat: add copy public URL option in template report to copy public template URL for public signing
2024-09-26 16:20:37 +05:30
RaktimaNXG 429b7dcb0e fix: refactor code 2024-09-26 16:06:37 +05:30
RaktimaNXG 5ffa681a80 feat: add copy public URL option to copy public url 2024-09-26 14:56:25 +05:30
AndrewandGitHub 91364db608 Merge pull request #1263 from OpenSignLabs/validation 2024-09-25 21:24:04 +05:30
prafull-opensignlabs 2433c68f27 fix: capture error message correctly 2024-09-25 21:22:48 +05:30
prafull-opensignlabs 6ea254d9ac fix: show proper error if server down in self-hosting 2024-09-25 21:01:17 +05:30
AndrewandGitHub a4d1df8324 Merge pull request #1262 from OpenSignLabs/validation
feat: add signature and png type image with transparent background in pdf
2024-09-25 17:02:05 +05:30
prafull-opensignlabs ba15611903 feat: add signature and png type image with transparent background in pdf 2024-09-25 17:01:03 +05:30
27 changed files with 364 additions and 243 deletions
+15 -15
View File
@@ -28,7 +28,7 @@
"print-js": "^1.6.0", "print-js": "^1.6.0",
"radix-ui": "^1.0.1", "radix-ui": "^1.0.1",
"react": "^18.2.0", "react": "^18.2.0",
"react-bootstrap": "^2.10.4", "react-bootstrap": "^2.10.5",
"react-confetti": "^6.1.0", "react-confetti": "^6.1.0",
"react-cookie": "^7.2.0", "react-cookie": "^7.2.0",
"react-datepicker": "^7.4.0", "react-datepicker": "^7.4.0",
@@ -70,7 +70,7 @@
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"babel-loader": "^9.2.1", "babel-loader": "^9.2.1",
"clean-webpack-plugin": "^4.0.0", "clean-webpack-plugin": "^4.0.0",
"commitizen": "^4.3.0", "commitizen": "^4.3.1",
"concurrently": "^9.0.1", "concurrently": "^9.0.1",
"css-loader": "^7.1.2", "css-loader": "^7.1.2",
"daisyui": "^4.12.10", "daisyui": "^4.12.10",
@@ -78,7 +78,7 @@
"dotenv-webpack": "^8.1.0", "dotenv-webpack": "^8.1.0",
"eslint": "^9.11.1", "eslint": "^9.11.1",
"eslint-plugin-prettier": "^5.2.1", "eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.36.1", "eslint-plugin-react": "^7.37.0",
"lint-staged": "^15.2.10", "lint-staged": "^15.2.10",
"mini-css-extract-plugin": "^2.9.1", "mini-css-extract-plugin": "^2.9.1",
"postcss": "^8.4.47", "postcss": "^8.4.47",
@@ -8750,9 +8750,9 @@
} }
}, },
"node_modules/commitizen": { "node_modules/commitizen": {
"version": "4.3.0", "version": "4.3.1",
"resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.1.tgz",
"integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", "integrity": "sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"cachedir": "2.3.0", "cachedir": "2.3.0",
@@ -10856,9 +10856,9 @@
} }
}, },
"node_modules/eslint-plugin-react": { "node_modules/eslint-plugin-react": {
"version": "7.36.1", "version": "7.37.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.0.tgz",
"integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", "integrity": "sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA==",
"dependencies": { "dependencies": {
"array-includes": "^3.1.8", "array-includes": "^3.1.8",
"array.prototype.findlast": "^1.2.5", "array.prototype.findlast": "^1.2.5",
@@ -20271,9 +20271,9 @@
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
}, },
"node_modules/react-bootstrap": { "node_modules/react-bootstrap": {
"version": "2.10.4", "version": "2.10.5",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.4.tgz", "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.5.tgz",
"integrity": "sha512-W3398nBM2CBfmGP2evneEO3ZZwEMPtHs72q++eNw60uDGDAdiGn0f9yNys91eo7/y8CTF5Ke1C0QO8JFVPU40Q==", "integrity": "sha512-XueAOEn64RRkZ0s6yzUTdpFtdUXs5L5491QU//8ZcODKJNDLt/r01tNyriZccjgRImH1REynUc9pqjiRMpDLWQ==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.24.7", "@babel/runtime": "^7.24.7",
"@restart/hooks": "^0.4.9", "@restart/hooks": "^0.4.9",
@@ -22508,9 +22508,9 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "2.79.1", "version": "2.79.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
"integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
}, },
+3 -3
View File
@@ -23,7 +23,7 @@
"print-js": "^1.6.0", "print-js": "^1.6.0",
"radix-ui": "^1.0.1", "radix-ui": "^1.0.1",
"react": "^18.2.0", "react": "^18.2.0",
"react-bootstrap": "^2.10.4", "react-bootstrap": "^2.10.5",
"react-confetti": "^6.1.0", "react-confetti": "^6.1.0",
"react-cookie": "^7.2.0", "react-cookie": "^7.2.0",
"react-datepicker": "^7.4.0", "react-datepicker": "^7.4.0",
@@ -102,7 +102,7 @@
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"babel-loader": "^9.2.1", "babel-loader": "^9.2.1",
"clean-webpack-plugin": "^4.0.0", "clean-webpack-plugin": "^4.0.0",
"commitizen": "^4.3.0", "commitizen": "^4.3.1",
"concurrently": "^9.0.1", "concurrently": "^9.0.1",
"css-loader": "^7.1.2", "css-loader": "^7.1.2",
"daisyui": "^4.12.10", "daisyui": "^4.12.10",
@@ -110,7 +110,7 @@
"dotenv-webpack": "^8.1.0", "dotenv-webpack": "^8.1.0",
"eslint": "^9.11.1", "eslint": "^9.11.1",
"eslint-plugin-prettier": "^5.2.1", "eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.36.1", "eslint-plugin-react": "^7.37.0",
"lint-staged": "^15.2.10", "lint-staged": "^15.2.10",
"mini-css-extract-plugin": "^2.9.1", "mini-css-extract-plugin": "^2.9.1",
"postcss": "^8.4.47", "postcss": "^8.4.47",
@@ -132,7 +132,8 @@
"View": "View", "View": "View",
"option": "Option", "option": "Option",
"Embed": "Embed", "Embed": "Embed",
"Copy TemplateId":"Copy TemplateId" "Copy TemplateId":"Copy TemplateId",
"Copy Public URL":"Copy Public URL"
}, },
"report-heading": { "report-heading": {
"Sr.No": "Sr.No", "Sr.No": "Sr.No",
@@ -639,7 +640,7 @@
"public-template-mssg-3" :"Need more details or examples?", "public-template-mssg-3" :"Need more details or examples?",
"public-template-mssg-4": "Visit the", "public-template-mssg-4": "Visit the",
"public-template-mssg-5": " npm for the latest updates, detailed documentation, and version history.", "public-template-mssg-5": " npm for the latest updates, detailed documentation, and version history.",
"public-template-mssg-6" :"You need to set this template as public before you can utilize this code snippet.", "public-template-mssg-6" :"Before you can use this code snippet, you must make this template public.",
"copy-code":"COPY", "copy-code":"COPY",
"copied-code":"COPIED", "copied-code":"COPIED",
"Installation":"Installation", "Installation":"Installation",
@@ -668,6 +669,9 @@
"download-files":"Download files", "download-files":"Download files",
"download-pdf":"Download Pdf", "download-pdf":"Download Pdf",
"pdf-certificate":"Download Pdf + Certificate", "pdf-certificate":"Download Pdf + Certificate",
"document-logs":"Document logs" "document-logs":"Document logs",
"server-down": "Unable to connect to the OpenSign server. If you are self-hosting OpenSign, please ensure that all the steps in the documentation have been followed correctly. If you're running OpenSign locally, you might be accessing it through an incorrect port number.",
"admin-exists": "Admin already exists. Please login to the application using admin credentials in order to manage users.",
"public-tour-message":"Please make template public to copy public URL"
} }
@@ -152,7 +152,8 @@
"View": "Voir", "View": "Voir",
"option": "Option", "option": "Option",
"Embed": "Intégrer", "Embed": "Intégrer",
"Copy TemplateId": "Copier l'ID du modèle" "Copy TemplateId": "Copier l'ID du modèle",
"Copy Public URL":"Copier l'URL publique"
}, },
"report-help": { "report-help": {
"Draft Documents": "Il s'agit de documents que vous avez commencés mais que vous n'avez pas finalisés pour envoi.", "Draft Documents": "Il s'agit de documents que vous avez commencés mais que vous n'avez pas finalisés pour envoi.",
@@ -638,7 +639,7 @@
"public-template-mssg-3" :"Besoin de plus de détails ou d'exemples ?", "public-template-mssg-3" :"Besoin de plus de détails ou d'exemples ?",
"public-template-mssg-4": "Visitez le", "public-template-mssg-4": "Visitez le",
"public-template-mssg-5": "npm pour les dernières mises à jour, une documentation détaillée et l'historique des versions.", "public-template-mssg-5": "npm pour les dernières mises à jour, une documentation détaillée et l'historique des versions.",
"public-template-mssg-6":"Vous devez définir ce modèle comme public avant de pouvoir utiliser cet extrait de code.", "public-template-mssg-6":"Avant de pouvoir utiliser cet extrait de code, vous devez rendre ce modèle public.",
"copy-code":"COPIE", "copy-code":"COPIE",
"copied-code":"COPIÉ", "copied-code":"COPIÉ",
"Installation":"Installation", "Installation":"Installation",
@@ -667,6 +668,10 @@
"download-files" :"Télécharger des fichiers", "download-files" :"Télécharger des fichiers",
"download-pdf" :"Télécharger le PDF", "download-pdf" :"Télécharger le PDF",
"pdf-certificate" :"Télécharger Pdf + Certificat", "pdf-certificate" :"Télécharger Pdf + Certificat",
"document-logs":"Journaux de documents" "document-logs":"Journaux de documents",
"server-down": "Impossible de se connecter au serveur OpenSign. Si vous hébergez vous-même OpenSign, veuillez vous assurer que toutes les étapes de la documentation ont été correctement suivies. Si vous exécutez OpenSign localement, vous y accédez peut-être via un numéro de port incorrect.",
"admin-exists": "L'administrateur existe déjà. Veuillez vous connecter à l'application en utilisant les informations d'identification de l'administrateur afin de gérer les utilisateurs.",
"public-tour-message":"Veuillez rendre le modèle public pour copier l'URL publique"
} }
Binary file not shown.
@@ -2,7 +2,6 @@ import React, { useState, useEffect, useRef } from "react";
import "../../styles/opensigndrive.css"; import "../../styles/opensigndrive.css";
import axios from "axios"; import axios from "axios";
import * as ContextMenu from "@radix-ui/react-context-menu"; import * as ContextMenu from "@radix-ui/react-context-menu";
import { saveAs } from "file-saver";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import Table from "react-bootstrap/Table"; import Table from "react-bootstrap/Table";
import * as HoverCard from "@radix-ui/react-hover-card"; import * as HoverCard from "@radix-ui/react-hover-card";
@@ -264,12 +263,6 @@ function DriveBody(props) {
setIsOpenMoveModal(false); setIsOpenMoveModal(false);
} }
}; };
const sanitizeFileName = (pdfName) => {
// Replace spaces with underscore
return pdfName.replace(/ /g, "_");
};
const handleEnterPress = (e, data) => { const handleEnterPress = (e, data) => {
if (e.key === "Enter") { if (e.key === "Enter") {
handledRenameDoc(data); handledRenameDoc(data);
+13 -11
View File
@@ -34,7 +34,7 @@ export function App() {
<Opensign <Opensign
onLoad={() => console.log("success")} onLoad={() => console.log("success")}
onLoadError={(error) => console.log(error)} onLoadError={(error) => console.log(error)}
templateId= {"${props.templateId}"} templateId= "${props.templateId}"
/> />
</div> </div>
); );
@@ -63,10 +63,10 @@ import {OpensignComponent} from "@opensign/angular"
selector:'app-root', selector:'app-root',
standalone: true, standalone: true,
imports: [OpensignComponent], imports: [OpensignComponent],
template: '<opensign templateId={"${props.templateId}"} template:\`<opensign templateId="${props.templateId}"
(onLoad)="handleLoad()" (onLoad)="handleLoad()"
(onLoadError)="handleError($event)" (onLoadError)="handleError($event)"
></opensign>', ></opensign>\`,
}) })
export class AppComponent{ export class AppComponent{
handleLoad() { handleLoad() {
@@ -129,9 +129,11 @@ export class AppComponent{
<p className="font-medium text-[18px]"> <p className="font-medium text-[18px]">
{t(`${data.title}`)} {t(`${data.title}`)}
</p> </p>
<p className="text-[13px] mt-2"> {ind === 0 && (
{t("public-template-mssg-1")} <p className="text-[13px] mt-2">
</p> {t("public-template-mssg-1")}
</p>
)}
<div className="relative p-1"> <div className="relative p-1">
<div <div
onClick={() => handleCopy(data.codeString, ind)} onClick={() => handleCopy(data.codeString, ind)}
@@ -210,11 +212,11 @@ export class AppComponent{
<p className="font-medium text-[18px]"> <p className="font-medium text-[18px]">
{t(`${data.title}`)} {t(`${data.title}`)}
</p> </p>
{ind === 0 && (
<p className="text-[13px] mt-2"> <p className="text-[13px] mt-2">
{t("angular-npm-mssg-1")} {t("angular-npm-mssg-1")}
</p> </p>
)}
<div className="relative p-1"> <div className="relative p-1">
<div <div
onClick={() => handleCopy(data.codeString, ind)} onClick={() => handleCopy(data.codeString, ind)}
@@ -725,7 +725,9 @@ function Placeholder(props) {
: props?.pos?.zIndex : props?.pos?.zIndex
? props.pos.zIndex ? props.pos.zIndex
: "5", : "5",
background: props.data ? props.data.blockColor : "rgb(203 233 237)" background: props.data
? props.data?.blockColor + "b0"
: "rgba(203, 233, 237, 0.69)"
}} }}
onDrag={() => { onDrag={() => {
setDraggingEnabled(true); setDraggingEnabled(true);
+1 -1
View File
@@ -596,7 +596,7 @@ function SignPad({
borderRadius: "2px" borderRadius: "2px"
} }
}} }}
backgroundColor="rgb(255, 255, 255)" // backgroundColor="rgb(255, 255, 255)"
onEnd={() => onEnd={() =>
handleSignatureChange(canvasRef.current?.toDataURL()) handleSignatureChange(canvasRef.current?.toDataURL())
} }
+8 -14
View File
@@ -1350,11 +1350,6 @@ export const multiSignEmbed = async (
widgetsPositionArr.map(async (url) => { widgetsPositionArr.map(async (url) => {
let signUrl = url.SignUrl && url.SignUrl; let signUrl = url.SignUrl && url.SignUrl;
if (signUrl) { if (signUrl) {
if (url.ImageType === "image/png") {
//function for convert signature png base64 url to jpeg base64
const newUrl = await convertPNGtoJPEG(signUrl);
signUrl = newUrl;
}
const res = await fetch(signUrl); const res = await fetch(signUrl);
return res.arrayBuffer(); return res.arrayBuffer();
} }
@@ -1364,19 +1359,14 @@ export const multiSignEmbed = async (
widgetsPositionArr.forEach(async (position, id) => { widgetsPositionArr.forEach(async (position, id) => {
let img; let img;
if (["signature", "stamp", "initials", "image"].includes(position.type)) { if (["signature", "stamp", "initials", "image"].includes(position.type)) {
if ( if (position.ImageType && position.ImageType === "image/jpeg") {
(position.ImageType && position.ImageType === "image/png") ||
position.ImageType === "image/jpeg"
) {
img = await pdfDoc.embedJpg(images[id]); img = await pdfDoc.embedJpg(images[id]);
} else { } else {
img = await pdfDoc.embedPng(images[id]); img = await pdfDoc.embedPng(images[id]);
} }
} else if (!position.type) { } else if (!position.type) {
if ( // to handle old widget when only stamp and signature are exists
(position.ImageType && position.ImageType === "image/png") || if (position.ImageType && position.ImageType === "image/jpeg") {
position.ImageType === "image/jpeg"
) {
img = await pdfDoc.embedJpg(images[id]); img = await pdfDoc.embedJpg(images[id]);
} else { } else {
img = await pdfDoc.embedPng(images[id]); img = await pdfDoc.embedPng(images[id]);
@@ -1936,7 +1926,11 @@ export const getAppLogo = async () => {
} }
} catch (err) { } catch (err) {
console.log("err in getlogo ", err); console.log("err in getlogo ", err);
return { logo: appInfo.applogo, user: "exist" }; if (err?.message?.includes("valid JSON")) {
return { logo: appInfo.applogo, user: "exist", error: "invalid_json" };
} else {
return { logo: appInfo.applogo, user: "exist" };
}
} }
} }
}; };
+16 -12
View File
@@ -39,6 +39,13 @@ export default function reportJson(id) {
hoverLabel: "Copy TemplateId", hoverLabel: "Copy TemplateId",
btnIcon: "fa-light fa-copy", btnIcon: "fa-light fa-copy",
action: "CopyTemplateId" action: "CopyTemplateId"
},
{
btnId: "2434",
btnLabel: "Copy Public URL",
hoverLabel: "Copy Public URL",
btnIcon: "fa-light fa-copy",
action: "CopyPublicURL"
} }
] ]
: []; : [];
@@ -405,18 +412,15 @@ export default function reportJson(id) {
if (item.action === "option") { if (item.action === "option") {
// Make a shallow copy of the item // Make a shallow copy of the item
const newItem = { ...item }; const newItem = { ...item };
newItem.subaction = [ //splice method used to add `Share with team` option on second index of list
{ newItem.subaction.splice(1, 0, {
btnId: "1873", btnId: "1873",
btnLabel: "Share with team", btnLabel: "Share with team",
hoverLabel: "Share with team", hoverLabel: "Share with team",
btnIcon: "fa-light fa-share-nodes", btnIcon: "fa-light fa-share-nodes",
redirectUrl: "", redirectUrl: "",
action: "sharewith" action: "sharewith"
}, });
...newItem.subaction
];
return newItem; return newItem;
} }
return item; return item;
+1 -1
View File
@@ -46,7 +46,7 @@ const AddAdmin = () => {
try { try {
const app = await getAppLogo(); const app = await getAppLogo();
if (app?.user === "exist") { if (app?.user === "exist") {
setErrMsg(t("admin-already-exist")); setErrMsg(t("admin-exists"));
} }
} catch (err) { } catch (err) {
setErrMsg(t("something-went-wrong-mssg")); setErrMsg(t("something-went-wrong-mssg"));
+9 -2
View File
@@ -51,6 +51,7 @@ function Login() {
const [isModal, setIsModal] = useState(false); const [isModal, setIsModal] = useState(false);
const [image, setImage] = useState(); const [image, setImage] = useState();
const [isLoginSSO, setIsLoginSSO] = useState(false); const [isLoginSSO, setIsLoginSSO] = useState(false);
const [errMsg, setErrMsg] = useState();
useEffect(() => { useEffect(() => {
checkUserExt(); checkUserExt();
@@ -59,7 +60,9 @@ function Login() {
const checkUserExt = async () => { const checkUserExt = async () => {
const app = await getAppLogo(); const app = await getAppLogo();
if (!isEnableSubscription && app?.user === "not_exist") { if (app?.error === "invalid_json") {
setErrMsg(t("server-down"));
} else if (!isEnableSubscription && app?.user === "not_exist") {
navigate("/addadmin"); navigate("/addadmin");
} }
if (app?.logo) { if (app?.logo) {
@@ -620,7 +623,11 @@ function Login() {
} }
}; };
return ( return errMsg ? (
<div className="h-screen flex justify-center text-center items-center p-4 text-gray-500 text-base">
{errMsg}
</div>
) : (
<div> <div>
<Title title={"Login Page"} /> <Title title={"Login Page"} />
{state.loading && ( {state.loading && (
+111 -60
View File
@@ -2,12 +2,13 @@ import React, { useState, useRef, useEffect } from "react";
import SignatureCanvas from "react-signature-canvas"; import SignatureCanvas from "react-signature-canvas";
import "../styles/managesign.css"; import "../styles/managesign.css";
import "../styles/signature.css"; import "../styles/signature.css";
import { toDataUrl } from "../constant/Utils"; import { generateTitleFromFilename, toDataUrl } from "../constant/Utils";
import Parse from "parse"; import Parse from "parse";
import { SaveFileSize } from "../constant/saveFileSize"; import { SaveFileSize } from "../constant/saveFileSize";
import Alert from "../primitives/Alert"; import Alert from "../primitives/Alert";
import Loader from "../primitives/Loader"; import Loader from "../primitives/Loader";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import sanitizeFileName from "../primitives/sanitizeFileName";
const ManageSign = () => { const ManageSign = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const [penColor, setPenColor] = useState("blue"); const [penColor, setPenColor] = useState("blue");
@@ -23,9 +24,11 @@ const ManageSign = () => {
const [Initials, setInitials] = useState(""); const [Initials, setInitials] = useState("");
const [isInitials, setIsInitials] = useState(false); const [isInitials, setIsInitials] = useState(false);
const [id, setId] = useState(""); const [id, setId] = useState("");
const [imgInitials, setImgInitials] = useState("");
const canvasRef = useRef(null); const canvasRef = useRef(null);
const imageRef = useRef(null); const imageRef = useRef(null);
const initailsRef = useRef(null); const initailsRef = useRef(null);
const imgInitialsRef = useRef(null);
useEffect(() => { useEffect(() => {
fetchUserSign(); fetchUserSign();
// eslint-disable-next-line // eslint-disable-next-line
@@ -46,14 +49,23 @@ const ManageSign = () => {
if (signRes) { if (signRes) {
const res = signRes.toJSON(); const res = signRes.toJSON();
setId(res.objectId); setId(res.objectId);
setSignName(res?.SignatureName); if (res?.SignatureName) {
setImage(res.ImageURL); const sanitizename = generateTitleFromFilename(res?.SignatureName);
const replaceSpace = sanitizeFileName(sanitizename);
setSignName(replaceSpace);
}
setImage(res?.ImageURL);
if (res && res.Initials) { if (res && res.Initials) {
setInitials(res.Initials); // setInitials(res.Initials);
setIsInitials(true); setIsInitials(true);
setImgInitials(res?.Initials);
} }
} else { } else {
setSignName(User?.get("name") || ""); if (User?.get("name")) {
const sanitizename = generateTitleFromFilename(User?.get("name"));
const replaceSpace = sanitizeFileName(sanitizename);
setSignName(replaceSpace);
}
} }
setIsLoader(false); setIsLoader(false);
} catch (err) { } catch (err) {
@@ -86,8 +98,14 @@ const ManageSign = () => {
if (initailsRef.current) { if (initailsRef.current) {
initailsRef.current.clear(); initailsRef.current.clear();
} }
if (imgInitialsRef.current) {
imgInitialsRef.current.value = "";
}
setImgInitials("");
setInitials(""); setInitials("");
setIsValue(true); if (image) {
setIsValue(true);
}
setIsInitials(false); setIsInitials(false);
}; };
@@ -101,40 +119,54 @@ const ManageSign = () => {
const base64Img = await toDataUrl(file); const base64Img = await toDataUrl(file);
setImage(base64Img); setImage(base64Img);
setIsValue(true); setIsValue(true);
} else {
setImage("");
setIsValue(false);
} }
}; };
const handleSubmit = async (e) => { const handleSubmit = async (e) => {
e.preventDefault(); e.preventDefault();
const isUrl = image.includes("https"); const isUrl = image?.includes("https") || image?.includes("http");
if (!isvalue) { if (!isvalue) {
setWarning(true); setWarning(true);
setTimeout(() => setWarning(false), 1000); setTimeout(() => setWarning(false), 1000);
} else { } else {
setIsLoader(true); setIsLoader(true);
const replaceSpace = signName.replace(/ /g, "_"); const sanitizename = generateTitleFromFilename(signName);
const replaceSpace = sanitizeFileName(sanitizename);
let file; let file;
if (signature) { if (signature) {
file = base64StringtoFile(signature, `${replaceSpace}_sign.png`); file = base64StringtoFile(signature, `${replaceSpace}_sign.png`);
} else { } else {
if (!isUrl) { if (image && !isUrl) {
file = base64StringtoFile(image, `${replaceSpace}__sign.png`); file = base64StringtoFile(image, `${replaceSpace}__sign.png`);
} }
} }
let imgUrl; let imgUrl;
if (!isUrl) { if (file && !isUrl) {
imgUrl = await uploadFile(file); imgUrl = await uploadFile(file);
} else { } else {
imgUrl = image; imgUrl = image;
} }
let initialsUrl = ""; const isInitialsUrl =
const isInitialsUrl = Initials.includes("https"); imgInitials?.includes("https") || imgInitials?.includes("http");
if (!isInitialsUrl && Initials) {
const initialsImg = base64StringtoFile( let initialFile;
Initials, if (Initials) {
`${replaceSpace}_initials.png` initialFile = base64StringtoFile(Initials, `${replaceSpace}_sign.png`);
); } else {
initialsUrl = await uploadFile(initialsImg); if (imgInitials && !isInitialsUrl) {
initialFile = base64StringtoFile(
imgInitials,
`${replaceSpace}__sign.png`
);
}
}
let initialsUrl;
if (initialFile && !isInitialsUrl) {
initialsUrl = await uploadFile(initialFile);
} else {
initialsUrl = imgInitials;
} }
if (imgUrl) { if (imgUrl) {
await saveEntry({ await saveEntry({
@@ -146,7 +178,7 @@ const ManageSign = () => {
} }
}; };
function base64StringtoFile(base64String, filename) { function base64StringtoFile(base64String, filename) {
var arr = base64String.split(","), let arr = base64String.split(","),
mime = arr[0].match(/:(.*?);/)[1], mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), bstr = atob(arr[1]),
n = bstr.length, n = bstr.length,
@@ -175,31 +207,24 @@ const ManageSign = () => {
const saveEntry = async (obj) => { const saveEntry = async (obj) => {
const signCls = "contracts_Signature"; const signCls = "contracts_Signature";
const User = Parse.User.current().id; const User = Parse?.User?.current()?.id;
const userId = { __type: "Pointer", className: "_User", objectId: User }; const userId = { __type: "Pointer", className: "_User", objectId: User };
if (id) { if (id) {
try { try {
const updateSign = new Parse.Object(signCls); const updateSign = new Parse.Object(signCls);
updateSign.id = id; updateSign.id = id;
updateSign.set("Initials", obj.initialsUrl ? obj.initialsUrl : ""); updateSign.set("Initials", obj.initialsUrl ? obj.initialsUrl : "");
updateSign.set("ImageURL", obj.url); updateSign.set("ImageURL", obj.url ? obj.url : "");
updateSign.set("SignatureName", obj.name); updateSign.set("SignatureName", obj.name);
updateSign.set("UserId", userId); updateSign.set("UserId", userId);
const res = await updateSign.save(); const res = await updateSign.save();
setIsLoader(false); setIsAlert({ type: "success", message: t("signature-saved-alert") });
setIsAlert({
type: "success",
message: t("signature-saved-alert")
});
setTimeout(() => setIsAlert({}), 2000);
return res; return res;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
setIsAlert({ type: "danger", message: `${err.message}` });
} finally {
setIsLoader(false); setIsLoader(false);
setIsAlert({
type: "danger",
message: `${err.message}`
});
setTimeout(() => setIsAlert({}), 2000); setTimeout(() => setIsAlert({}), 2000);
} }
} else { } else {
@@ -210,20 +235,13 @@ const ManageSign = () => {
updateSign.set("SignatureName", obj.name); updateSign.set("SignatureName", obj.name);
updateSign.set("UserId", userId); updateSign.set("UserId", userId);
const res = await updateSign.save(); const res = await updateSign.save();
setIsLoader(false); setIsAlert({ type: "success", message: t("signature-saved-alert") });
setIsAlert({
type: "success",
message: t("signature-saved-alert")
});
setTimeout(() => setIsAlert({}), 2000);
return res; return res;
} catch (err) { } catch (err) {
console.log(err); console.log(err);
setIsAlert({ type: "success", message: `${err.message}` });
} finally {
setIsLoader(false); setIsLoader(false);
setIsAlert({
type: "success",
message: `${err.message}`
});
setTimeout(() => setIsAlert({}), 2000); setTimeout(() => setIsAlert({}), 2000);
} }
} }
@@ -234,7 +252,29 @@ const ManageSign = () => {
}; };
const handleInitialsChange = () => { const handleInitialsChange = () => {
setInitials(initailsRef.current.toDataURL()); setInitials(initailsRef.current.toDataURL());
setIsValue(true); if (image || signature) {
setIsValue(true);
}
};
const handleUploadInitials = () => {
imgInitialsRef.current.click();
};
const onImgInitialsChange = async (event) => {
if (initailsRef.current) {
initailsRef.current.clear();
}
setInitials("");
if (event.target.files && event.target.files[0]) {
const file = event.target.files[0];
const base64Img = await toDataUrl(file);
setImgInitials(base64Img);
if (image || signature) {
setIsValue(true);
}
} else {
setImgInitials("");
setIsValue(false);
}
}; };
return ( return (
<div className="relative h-full bg-base-100 text-base-content flex shadow-md rounded-box overflow-auto"> <div className="relative h-full bg-base-100 text-base-content flex shadow-md rounded-box overflow-auto">
@@ -281,7 +321,7 @@ const ManageSign = () => {
height: "180px", height: "180px",
className: "signatureCanvas rounded-box" className: "signatureCanvas rounded-box"
}} }}
backgroundColor="rgb(255, 255, 255)" // backgroundColor="rgb(255, 255, 255)"
onEnd={() => onEnd={() =>
handleSignatureChange(canvasRef.current.toDataURL()) handleSignatureChange(canvasRef.current.toDataURL())
} }
@@ -332,7 +372,7 @@ const ManageSign = () => {
className="op-link" className="op-link"
onClick={() => handleUploadBtn()} onClick={() => handleUploadBtn()}
> >
{t("upload-image")} {t("upload")}
</div> </div>
<div <div
type="button" type="button"
@@ -356,17 +396,21 @@ const ManageSign = () => {
<span className="font-medium select-none flex mb-[10px] pl-[10px]"> <span className="font-medium select-none flex mb-[10px] pl-[10px]">
{t("initials")} {t("initials")}
</span> </span>
<input
type="file"
onChange={onImgInitialsChange}
className="filetype"
accept="image/*"
ref={imgInitialsRef}
hidden
/>
<div> <div>
{isInitials ? ( {imgInitials ? (
<div className="intialSignature relative border-[1px] border-[#888] rounded-box overflow-hidden"> <div className="intialSignature relative border-[1px] border-[#888] rounded-box overflow-hidden">
<img <img
alt="inititals" alt="inititals"
src={Initials} src={imgInitials}
style={{ className="w-[100%] h-[100%] object-contain"
width: "100%",
height: "100%",
objectFit: "contain"
}}
/> />
</div> </div>
) : ( ) : (
@@ -376,10 +420,8 @@ const ManageSign = () => {
canvasProps={{ canvasProps={{
className: "intialSignature rounded-box" className: "intialSignature rounded-box"
}} }}
backgroundColor="rgb(255, 255, 255)" // backgroundColor="rgb(255, 255, 255)"
onEnd={() => onEnd={() => handleInitialsChange()}
handleInitialsChange(initailsRef.current.toDataURL())
}
dotSize={1} dotSize={1}
/> />
)} )}
@@ -402,6 +444,7 @@ const ManageSign = () => {
? "2px solid black" ? "2px solid black"
: "2px solid white" : "2px solid white"
}} }}
className="fa-light fa-pen-nib"
onClick={() => { onClick={() => {
if (key === 0) { if (key === 0) {
setInitialPen("blue"); setInitialPen("blue");
@@ -412,7 +455,6 @@ const ManageSign = () => {
} }
}} }}
key={key} key={key}
className="fa-light fa-pen-nib"
width={20} width={20}
height={20} height={20}
></i> ></i>
@@ -421,13 +463,22 @@ const ManageSign = () => {
</div> </div>
)} )}
</div> </div>
<div> <div className="flex flex-row gap-1">
<div <div
type="button" type="button"
className="op-link text-sm md:text-base mr-1" className="op-link text-sm md:text-base mr-1"
onClick={() => handleClearInitials()} onClick={() => handleUploadInitials()}
> >
{t("clear")} {t("upload")}
</div>
<div>
<div
type="button"
className="op-link text-sm md:text-base mr-1"
onClick={() => handleClearInitials()}
>
{t("clear")}
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -284,6 +284,7 @@ function PdfRequestFiles(props) {
} }
} }
//function for get document details for perticular signer with signer'object id //function for get document details for perticular signer with signer'object id
//whenever change anything in this function check react/angular packages also in plan js
const getTemplateDetails = async () => { const getTemplateDetails = async () => {
try { try {
const params = { templateId: props.templateId, ispublic: true }; const params = { templateId: props.templateId, ispublic: true };
@@ -309,6 +310,7 @@ function PdfRequestFiles(props) {
throw new Error("error: Invalid TemplateId"); throw new Error("error: Invalid TemplateId");
} else if (documentData && documentData.length > 0) { } else if (documentData && documentData.length > 0) {
if (documentData[0]?.IsPublic) { if (documentData[0]?.IsPublic) {
//handle condition when someone use plan js then setTemplateStatus is not supporting
props?.setTemplateStatus && props?.setTemplateStatus &&
props?.setTemplateStatus({ props?.setTemplateStatus({
status: "Success" status: "Success"
@@ -15,6 +15,7 @@ const UpdateExistUserAdmin = () => {
const [isAlert, setIsAlert] = useState({ type: "danger", msg: "" }); const [isAlert, setIsAlert] = useState({ type: "danger", msg: "" });
useEffect(() => { useEffect(() => {
checkIsAdminExist(); checkIsAdminExist();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []); }, []);
const checkIsAdminExist = async () => { const checkIsAdminExist = async () => {
@@ -22,7 +23,7 @@ const UpdateExistUserAdmin = () => {
const isAdminExist = await Parse.Cloud.run("checkadminexist"); const isAdminExist = await Parse.Cloud.run("checkadminexist");
if (isAdminExist !== "not_exist") { if (isAdminExist !== "not_exist") {
// console.log("isAdminExist ", isAdminExist); // console.log("isAdminExist ", isAdminExist);
setErrMsg("Admin already exists."); setErrMsg(t("admin-exists"));
} }
} catch (err) { } catch (err) {
console.log("Err in checkadminexist", err); console.log("Err in checkadminexist", err);
@@ -52,7 +53,7 @@ const UpdateExistUserAdmin = () => {
} else if (err.code === 101) { } else if (err.code === 101) {
setIsAlert((prev) => ({ ...prev, msg: t("user-not-found") })); setIsAlert((prev) => ({ ...prev, msg: t("user-not-found") }));
} else if (err.code === 137) { } else if (err.code === 137) {
setIsAlert((prev) => ({ ...prev, msg: t("admin-already-exist") })); setIsAlert((prev) => ({ ...prev, msg: t("admin-exists") }));
} else { } else {
setErrMsg(t("something-went-wrong-mssg")); setErrMsg(t("something-went-wrong-mssg"));
} }
@@ -76,6 +76,7 @@ const ReportTable = (props) => {
const [reason, setReason] = useState(""); const [reason, setReason] = useState("");
const [isDownloadModal, setIsDownloadModal] = useState(false); const [isDownloadModal, setIsDownloadModal] = useState(false);
const [isEmbed, setIsEmbed] = useState(false); const [isEmbed, setIsEmbed] = useState(false);
const [isPublicTour, setIsPublicTour] = useState();
const Extand_Class = localStorage.getItem("Extand_Class"); const Extand_Class = localStorage.getItem("Extand_Class");
const extClass = Extand_Class && JSON.parse(Extand_Class); const extClass = Extand_Class && JSON.parse(Extand_Class);
const startIndex = (currentPage - 1) * props.docPerPage; const startIndex = (currentPage - 1) * props.docPerPage;
@@ -373,6 +374,19 @@ const ReportTable = (props) => {
handleEmbedFunction(item); handleEmbedFunction(item);
} else if (act.action === "CopyTemplateId") { } else if (act.action === "CopyTemplateId") {
copyTemplateId(item.objectId); copyTemplateId(item.objectId);
} else if (act.action === "CopyPublicURL") {
const isPublic = item?.IsPublic;
if (isPublic) {
let publicUrl = "";
if (isStaging) {
publicUrl = `https://staging.opensign.me/publicsign?templateid=${item.objectId}`;
} else {
publicUrl = `https://opensign.me/publicsign?templateid=${item.objectId}`;
}
copyTemplateId(publicUrl);
} else {
setIsPublicTour({ [item.objectId]: true });
}
} }
}; };
// Get current list // Get current list
@@ -1133,6 +1147,17 @@ const ReportTable = (props) => {
setIsPublicUserName(extendUser[0]?.UserName || ""); setIsPublicUserName(extendUser[0]?.UserName || "");
}; };
const publicTourConfig = [
{
selector: '[data-tut="IsPublic"]',
content: t("public-tour-message"),
position: "top",
style: { fontSize: "13px" }
}
];
const closePublicTour = () => {
setIsPublicTour();
};
return ( return (
<div className="relative"> <div className="relative">
{Object.keys(actLoader)?.length > 0 && ( {Object.keys(actLoader)?.length > 0 && (
@@ -1153,13 +1178,27 @@ const ReportTable = (props) => {
)} )}
{isAlert && <Alert type={alertMsg.type}>{alertMsg.message}</Alert>} {isAlert && <Alert type={alertMsg.type}>{alertMsg.message}</Alert>}
{props.tourData && props.ReportName === "Templates" && ( {props.tourData && props.ReportName === "Templates" && (
<Tour <>
onRequestClose={closeTour} <Tour
steps={props.tourData} onRequestClose={closeTour}
isOpen={isTour} steps={props.tourData}
// rounded={5} isOpen={isTour}
closeWithMask={false} // rounded={5}
/> closeWithMask={false}
/>
{isPublicTour && (
<Tour
showNumber={false}
showNavigation={false}
showNavigationNumber={false}
onRequestClose={closePublicTour}
steps={publicTourConfig}
isOpen={true}
rounded={5}
closeWithMask={false}
/>
)}
</>
)} )}
<div className="flex flex-row items-center justify-between my-2 mx-3 text-[20px] md:text-[23px]"> <div className="flex flex-row items-center justify-between my-2 mx-3 text-[20px] md:text-[23px]">
<div className="font-light"> <div className="font-light">
@@ -1375,13 +1414,17 @@ const ReportTable = (props) => {
isEnableSubscription && ( isEnableSubscription && (
<td className=" pl-[20px] py-2"> <td className=" pl-[20px] py-2">
{props.ReportName === "Templates" && ( {props.ReportName === "Templates" && (
<div className="flex flex-row"> <div
className="flex flex-row "
data-tut="IsPublic"
>
<label className="cursor-pointer relative inline-flex items-center mb-0"> <label className="cursor-pointer relative inline-flex items-center mb-0">
<input <input
checked={props.isPublic?.[item.objectId]} checked={props.isPublic?.[item.objectId]}
onChange={(e) => onChange={(e) => {
handlePublicChange(e, item) setIsPublicTour();
} handlePublicChange(e, item);
}}
type="checkbox" type="checkbox"
value="" value=""
className="sr-only peer" className="sr-only peer"
@@ -41,7 +41,7 @@
"upgrade-now": "Upgrade now", "upgrade-now": "Upgrade now",
"upgrade-to": "Upgrade to", "upgrade-to": "Upgrade to",
"plan": "Plan", "plan": "Plan",
"subscribe-card-teamplan":"Unlock the full power of collaboration! Create unlimited organizations, teams, and hierarchies. Share templates seamlessly across teams and assign custom user roles. Elevate your workflow today!", "subscribe-card-teamplan": "Unlock the full power of collaboration! Create unlimited organizations, teams, and hierarchies. Share templates seamlessly across teams and assign custom user roles. Elevate your workflow today!",
"subscribe-card-plan": "Unlock premium features starting at just {{premiumPrice}}/month. Enjoy enhanced performance and only {{addonPrice}} per additional credit after your included premium credits.", "subscribe-card-plan": "Unlock premium features starting at just {{premiumPrice}}/month. Enjoy enhanced performance and only {{addonPrice}} per additional credit after your included premium credits.",
"user-name-limit-char": "To have a username less than 8 character please subscribe", "user-name-limit-char": "To have a username less than 8 character please subscribe",
"tour-content": "Don't show this again", "tour-content": "Don't show this again",
@@ -132,7 +132,8 @@
"View": "View", "View": "View",
"option": "Option", "option": "Option",
"Embed": "Embed", "Embed": "Embed",
"Copy TemplateId":"Copy TemplateId" "Copy TemplateId": "Copy TemplateId",
"Copy Public URL": "Copy Public URL"
}, },
"report-heading": { "report-heading": {
"Sr.No": "Sr.No", "Sr.No": "Sr.No",
@@ -266,7 +267,7 @@
"public-role": "Public role", "public-role": "Public role",
"public-url": "Public URL", "public-url": "Public URL",
"public-url-copy": "Heres your public URL: ", "public-url-copy": "Heres your public URL: ",
"public-url-copy-mssg":"Copy it or share it with the signer, and you will be able to see all your publicly set templates.", "public-url-copy-mssg": "Copy it or share it with the signer, and you will be able to see all your publicly set templates.",
"add-public-url-alert": "Please add your public URL, and you will be able to make a public template.", "add-public-url-alert": "Please add your public URL, and you will be able to make a public template.",
"share-with-alert": "You cannot share a template if any roles already have contacts assigned. Please remove all contact assignments from the roles before sharing the template.", "share-with-alert": "You cannot share a template if any roles already have contacts assigned. Please remove all contact assignments from the roles before sharing the template.",
"share-with": "Share with", "share-with": "Share with",
@@ -597,7 +598,7 @@
"Recently sent for signatures": "This is a list of documents you've sent to other parties for signature.", "Recently sent for signatures": "This is a list of documents you've sent to other parties for signature.",
"Drafts": "This are documents you have started but have not finalized for sending.", "Drafts": "This are documents you have started but have not finalized for sending.",
"public-template": "This video demonstrates how to set up your personalized public profile, such as https://opensign.me/your-username. Youll also learn how to customize your tagline and make your templates available for public signing." "public-template": "This video demonstrates how to set up your personalized public profile, such as https://opensign.me/your-username. Youll also learn how to customize your tagline and make your templates available for public signing."
}, },
"enter-email-plaholder": "Add an email address and hit enter", "enter-email-plaholder": "Add an email address and hit enter",
"success-email-alert": "Email sent successfully!", "success-email-alert": "Email sent successfully!",
"expired-doc-title": "Expired Document", "expired-doc-title": "Expired Document",
@@ -618,44 +619,44 @@
"select-date-format": "Select a date format", "select-date-format": "Select a date format",
"quantity-of-credits": "Quantity of premium credits", "quantity-of-credits": "Quantity of premium credits",
"remaining-credits": "Premium credits available:", "remaining-credits": "Premium credits available:",
"remaining-credits-help":"Use premium credits for API document signing, bulk sending, or embedding OpenSign integration on your website. You have {{allowedcredits}} included credits and {{addoncredits}} additional purchased credits remaining.", "remaining-credits-help": "Use premium credits for API document signing, bulk sending, or embedding OpenSign integration on your website. You have {{allowedcredits}} included credits and {{addoncredits}} additional purchased credits remaining.",
"additional-credits": "Please purchase premium credits", "additional-credits": "Please purchase premium credits",
"quota-err-quicksend": "Quota Reached, You don't have enough credits.", "quota-err-quicksend": "Quota Reached, You don't have enough credits.",
"buy-credits": "Buy Premium Credits", "buy-credits": "Buy Premium Credits",
"rotate-right":"Rotate right", "rotate-right": "Rotate right",
"rotate-left":"Rotate left", "rotate-left": "Rotate left",
"rotate-alert-mssg":"All widgets on this page will be lost. Are you sure you want to proceed?", "rotate-alert-mssg": "All widgets on this page will be lost. Are you sure you want to proceed?",
"templateid":"Template-Id", "templateid": "Template-Id",
"bulk-send-subcription-alert":"Please upgrade to Professional or Team plan to use bulk send.", "bulk-send-subcription-alert": "Please upgrade to Professional or Team plan to use bulk send.",
"generate-test-token":"Generate Test Token", "generate-test-token": "Generate Test Token",
"regenerate-test-token":"Regenerate Test Token", "regenerate-test-token": "Regenerate Test Token",
"help-test-token":"This token can be used to test the APIs at the https://sandbox.opensignlabs.com/api/v1 endpoint, allowing you to conduct unlimited document signatures. Please note that the sandbox API will sign your documents with self-signed certificates, which may not be recognized as valid by Adobe. Once youve completed your testing, you can upgrade to one of our paid plans to generate a production token.", "help-test-token": "This token can be used to test the APIs at the https://sandbox.opensignlabs.com/api/v1 endpoint, allowing you to conduct unlimited document signatures. Please note that the sandbox API will sign your documents with self-signed certificates, which may not be recognized as valid by Adobe. Once youve completed your testing, you can upgrade to one of our paid plans to generate a production token.",
"help-api-token":"This token can be used to access the production APIs at the {{origin}}/api/v1 endpoint. It can only be generated on one of our paid plans.", "help-api-token": "This token can be used to access the production APIs at the {{origin}}/api/v1 endpoint. It can only be generated on one of our paid plans.",
"reason":"Reason", "reason": "Reason",
"decline-by":"Declined/revoked by", "decline-by": "Declined/revoked by",
"document-declined": "Document declined", "document-declined": "Document declined",
"public-template-mssg-1":"To integrate OpenSign into your React or Next.js project, simply run the following command:", "public-template-mssg-1": "To integrate OpenSign into your React or Next.js project, simply run the following command:",
"public-template-mssg-2" :"Ensure you have npm or yarn set up in your project. If youre using Yarn, you can replace npm install with yarn add @opensign/react.", "public-template-mssg-2": "Ensure you have npm or yarn set up in your project. If youre using Yarn, you can replace npm install with yarn add @opensign/react.",
"public-template-mssg-3" :"Need more details or examples?", "public-template-mssg-3": "Need more details or examples?",
"public-template-mssg-4": "Visit the", "public-template-mssg-4": "Visit the",
"public-template-mssg-5": " npm for the latest updates, detailed documentation, and version history.", "public-template-mssg-5": " npm for the latest updates, detailed documentation, and version history.",
"public-template-mssg-6" :"You need to set this template as public before you can utilize this code snippet.", "public-template-mssg-6": "Before you can use this code snippet, you must make this template public.",
"copy-code":"COPY", "copy-code": "COPY",
"copied-code":"COPIED", "copied-code": "COPIED",
"Installation":"Installation", "Installation": "Installation",
"Usage" :"Usage", "Usage": "Usage",
"insufficient-credits":"Insufficient Signing Credits", "insufficient-credits": "Insufficient Signing Credits",
"insufficient-credits-mssg":"The owner of this document currently lacks the necessary OpenSign credits for you to sign. Please reach out to the owner if you require further details.", "insufficient-credits-mssg": "The owner of this document currently lacks the necessary OpenSign credits for you to sign. Please reach out to the owner if you require further details.",
"angular-npm-mssg-1": "To integrate OpenSign into your Angular project, simply run the following command:", "angular-npm-mssg-1": "To integrate OpenSign into your Angular project, simply run the following command:",
"quota-mail-info-head":"Monthly request signatures email limit", "quota-mail-info-head": "Monthly request signatures email limit",
"quota-mail-info": "You can send upto 15 signature request emails every month. Upgrade now to send unlimited signing requests directly.", "quota-mail-info": "You can send upto 15 signature request emails every month. Upgrade now to send unlimited signing requests directly.",
"quota-mail": "You've reached your limit of 15 signature request emails for this month. Upgrade now to continue sending emails directly.", "quota-mail": "You've reached your limit of 15 signature request emails for this month. Upgrade now to continue sending emails directly.",
"quota-mail-tip":"Tip: You can still sign <1>unlimited documents</1> by manually sharing the signing request links.", "quota-mail-tip": "Tip: You can still sign <1>unlimited documents</1> by manually sharing the signing request links.",
"quota-mail-head":"Quota Reached", "quota-mail-head": "Quota Reached",
"unauthorized-modal":"You don't have permission to perform this action, please contact {{adminEmail}}.", "unauthorized-modal": "You don't have permission to perform this action, please contact {{adminEmail}}.",
"sent-this-month":"Sent this month", "sent-this-month": "Sent this month",
"available-seats":"Available seats", "available-seats": "Available seats",
"buy-users":"Buy more users", "buy-users": "Buy more users",
"isenable-otp": "Enable OTP verification", "isenable-otp": "Enable OTP verification",
"isenable-otp-help": { "isenable-otp-help": {
"p1": "Would you like to enable the verification process using a one-time password (OTP)?", "p1": "Would you like to enable the verification process using a one-time password (OTP)?",
@@ -663,10 +664,13 @@
"p3": "Selecting this option will disable OTP verification, allowing users to sign the document directly without additional steps.", "p3": "Selecting this option will disable OTP verification, allowing users to sign the document directly without additional steps.",
"p4": "Please choose the option that best suits your document signing requirements." "p4": "Please choose the option that best suits your document signing requirements."
}, },
"advanced-options":"Advanced options", "advanced-options": "Advanced options",
"hide-advanced-options":"Hide Advanced options", "hide-advanced-options": "Hide Advanced options",
"download-files":"Download files", "download-files": "Download files",
"download-pdf":"Download Pdf", "download-pdf": "Download Pdf",
"pdf-certificate":"Download Pdf + Certificate", "pdf-certificate": "Download Pdf + Certificate",
"document-logs":"Document logs" "document-logs": "Document logs",
"server-down": "Unable to connect to the OpenSign server. If you are self-hosting OpenSign, please ensure that all the steps in the documentation have been followed correctly. If you're running OpenSign locally, you might be accessing it through an incorrect port number.",
"admin-exists": "Admin already exists. Please login to the application using admin credentials in order to manage users.",
"public-tour-message": "Please make template public to copy public URL"
} }
@@ -42,7 +42,7 @@
"upgrade-to": "Mettre à niveau vers", "upgrade-to": "Mettre à niveau vers",
"pro": "PRO", "pro": "PRO",
"plan": "Offre", "plan": "Offre",
"subscribe-card-teamplan":"Libérez toute la puissance de la collaboration ! Créez un nombre illimité d'organisations, d'équipes et de hiérarchies. Partagez des modèles de manière transparente entre les équipes et attribuez des rôles d'utilisateur personnalisés. Améliorez votre flux de travail dès aujourd'hui !", "subscribe-card-teamplan": "Libérez toute la puissance de la collaboration ! Créez un nombre illimité d'organisations, d'équipes et de hiérarchies. Partagez des modèles de manière transparente entre les équipes et attribuez des rôles d'utilisateur personnalisés. Améliorez votre flux de travail dès aujourd'hui !",
"subscribe-card-plan": "Débloquez des fonctionnalités premium à partir de seulement {{premiumPrice}}/mois. Bénéficiez de performances améliorées et de seulement {{addonPrice}} par crédit supplémentaire après vos crédits premium inclus.", "subscribe-card-plan": "Débloquez des fonctionnalités premium à partir de seulement {{premiumPrice}}/mois. Bénéficiez de performances améliorées et de seulement {{addonPrice}} par crédit supplémentaire après vos crédits premium inclus.",
"user-name-limit-char": "Pour avoir un nom d'utilisateur de moins de 8 caractères s'il vous plaît s'abonner", "user-name-limit-char": "Pour avoir un nom d'utilisateur de moins de 8 caractères s'il vous plaît s'abonner",
"tour-content": "Ne plus afficher", "tour-content": "Ne plus afficher",
@@ -152,7 +152,8 @@
"View": "Voir", "View": "Voir",
"option": "Option", "option": "Option",
"Embed": "Intégrer", "Embed": "Intégrer",
"Copy TemplateId": "Copier l'ID du modèle" "Copy TemplateId": "Copier l'ID du modèle",
"Copy Public URL": "Copier l'URL publique"
}, },
"report-help": { "report-help": {
"Draft Documents": "Il s'agit de documents que vous avez commencés mais que vous n'avez pas finalisés pour envoi.", "Draft Documents": "Il s'agit de documents que vous avez commencés mais que vous n'avez pas finalisés pour envoi.",
@@ -615,46 +616,46 @@
"Add-seats": "Ajouter des sièges", "Add-seats": "Ajouter des sièges",
"format": "format", "format": "format",
"select-date-format": "Sélectionnez un format de date", "select-date-format": "Sélectionnez un format de date",
"quantity-of-credits":"Quantité de crédits de prime", "quantity-of-credits": "Quantité de crédits de prime",
"remaining-credits":"Crédits premium disponibles :", "remaining-credits": "Crédits premium disponibles :",
"additional-credits":"Veuillez acheter des crédits premium", "additional-credits": "Veuillez acheter des crédits premium",
"remaining-credits-help":"Utilisez des crédits premium pour la signature de documents API, l'envoi groupé ou l'intégration d'OpenSign sur votre site Web. Il vous reste {{allowedcredits}} crédits inclus et {{addoncredits}} crédits achetés supplémentaires.", "remaining-credits-help": "Utilisez des crédits premium pour la signature de documents API, l'envoi groupé ou l'intégration d'OpenSign sur votre site Web. Il vous reste {{allowedcredits}} crédits inclus et {{addoncredits}} crédits achetés supplémentaires.",
"quota-err-quicksend": "Quota atteint, vous n'avez pas assez de crédits.", "quota-err-quicksend": "Quota atteint, vous n'avez pas assez de crédits.",
"buy-credits": "Acheter des crédits premium", "buy-credits": "Acheter des crédits premium",
"rotate-right" :"Faire pivoter à droite", "rotate-right": "Faire pivoter à droite",
"rotate-left" :"Faire pivoter à gauche", "rotate-left": "Faire pivoter à gauche",
"rotate-alert-mssg" :"Tous les widgets de cette page seront perdus. Êtes-vous sûr de vouloir continuer ?", "rotate-alert-mssg": "Tous les widgets de cette page seront perdus. Êtes-vous sûr de vouloir continuer ?",
"templateid":"ID de modèle", "templateid": "ID de modèle",
"bulk-send-subcription-alert":"Veuillez passer au forfait Professionnel ou Équipe pour utiliser Quicksend.", "bulk-send-subcription-alert": "Veuillez passer au forfait Professionnel ou Équipe pour utiliser Quicksend.",
"generate-test-token": "Générer jeton de test", "generate-test-token": "Générer jeton de test",
"regenerate-test-token":"Régénérer le jeton de test", "regenerate-test-token": "Régénérer le jeton de test",
"help-test-token":"Ce jeton peut être utilisé pour tester les API au niveau du point de terminaison https://sandbox.opensignlabs.com/api/v1, vous permettant ainsi d'effectuer un nombre illimité de signatures de documents. Veuillez noter que l'API sandbox signera vos documents avec des certificats auto-signés, qui peuvent ne pas être reconnus comme valides par Adobe. Une fois vos tests terminés, vous pouvez passer à lun de nos forfaits payants pour générer un jeton de production.", "help-test-token": "Ce jeton peut être utilisé pour tester les API au niveau du point de terminaison https://sandbox.opensignlabs.com/api/v1, vous permettant ainsi d'effectuer un nombre illimité de signatures de documents. Veuillez noter que l'API sandbox signera vos documents avec des certificats auto-signés, qui peuvent ne pas être reconnus comme valides par Adobe. Une fois vos tests terminés, vous pouvez passer à lun de nos forfaits payants pour générer un jeton de production.",
"help-api-token":"Ce jeton peut être utilisé pour accéder aux API de production au point de terminaison {{origin}}/api/v1. Il ne peut être généré que sur l'un de nos forfaits payants.", "help-api-token": "Ce jeton peut être utilisé pour accéder aux API de production au point de terminaison {{origin}}/api/v1. Il ne peut être généré que sur l'un de nos forfaits payants.",
"reason" :"Raison", "reason": "Raison",
"decline-by" :"Refusé/révoqué par", "decline-by": "Refusé/révoqué par",
"document-declined":"document refusé", "document-declined": "document refusé",
"public-template-mssg-1" :"Pour intégrer OpenSign dans votre projet React ou Next.js, exécutez simplement la commande suivante :", "public-template-mssg-1": "Pour intégrer OpenSign dans votre projet React ou Next.js, exécutez simplement la commande suivante :",
"public-template-mssg-2" :"Assurez-vous que npm ou Yarn est configuré dans votre projet. Si vous utilisez Yarn, vous pouvez remplacer npm install par Yarn Add @opensign/react.", "public-template-mssg-2": "Assurez-vous que npm ou Yarn est configuré dans votre projet. Si vous utilisez Yarn, vous pouvez remplacer npm install par Yarn Add @opensign/react.",
"public-template-mssg-3" :"Besoin de plus de détails ou d'exemples ?", "public-template-mssg-3": "Besoin de plus de détails ou d'exemples ?",
"public-template-mssg-4": "Visitez le", "public-template-mssg-4": "Visitez le",
"public-template-mssg-5": "npm pour les dernières mises à jour, une documentation détaillée et l'historique des versions.", "public-template-mssg-5": "npm pour les dernières mises à jour, une documentation détaillée et l'historique des versions.",
"public-template-mssg-6":"Vous devez définir ce modèle comme public avant de pouvoir utiliser cet extrait de code.", "public-template-mssg-6": "Avant de pouvoir utiliser cet extrait de code, vous devez rendre ce modèle public.",
"copy-code":"COPIE", "copy-code": "COPIE",
"copied-code":"COPIÉ", "copied-code": "COPIÉ",
"Installation":"Installation", "Installation": "Installation",
"Usage" :"Usage", "Usage": "Usage",
"insufficient-credits":"Crédits de signature insuffisants", "insufficient-credits": "Crédits de signature insuffisants",
"insufficient-credits-mssg" :"Le propriétaire de ce document ne dispose actuellement pas des crédits OpenSign nécessaires pour que vous puissiez le signer. Veuillez contacter le propriétaire si vous avez besoin de plus de détails.", "insufficient-credits-mssg": "Le propriétaire de ce document ne dispose actuellement pas des crédits OpenSign nécessaires pour que vous puissiez le signer. Veuillez contacter le propriétaire si vous avez besoin de plus de détails.",
"angular-npm-mssg-1" :"Pour intégrer OpenSign dans votre projet Angular, exécutez simplement la commande suivante :", "angular-npm-mssg-1": "Pour intégrer OpenSign dans votre projet Angular, exécutez simplement la commande suivante :",
"quota-mail-info-head":"Limite mensuelle d'e-mails de signatures de demandes", "quota-mail-info-head": "Limite mensuelle d'e-mails de signatures de demandes",
"quota-mail-info": "Vous pouvez envoyer jusqu'à 15 e-mails de demande de signature chaque mois. Mettez à niveau maintenant pour envoyer directement des demandes de signature illimitées.", "quota-mail-info": "Vous pouvez envoyer jusqu'à 15 e-mails de demande de signature chaque mois. Mettez à niveau maintenant pour envoyer directement des demandes de signature illimitées.",
"quota-mail": "Vous avez atteint votre limite de 15 e-mails de demande de signature pour ce mois. Mettez à niveau maintenant pour continuer à envoyer des e-mails directement.", "quota-mail": "Vous avez atteint votre limite de 15 e-mails de demande de signature pour ce mois. Mettez à niveau maintenant pour continuer à envoyer des e-mails directement.",
"quota-mail-tip-tip":"Astuce : Vous pouvez toujours signer un nombre <1>illimité de documents</1> en partageant manuellement les liens de demande de signature.", "quota-mail-tip-tip": "Astuce : Vous pouvez toujours signer un nombre <1>illimité de documents</1> en partageant manuellement les liens de demande de signature.",
"quota-mail-head":"Quota atteint", "quota-mail-head": "Quota atteint",
"unauthorized-modal":"Vous n'êtes pas autorisé à effectuer cette action, veuillez contacter {{adminEmail}}.", "unauthorized-modal": "Vous n'êtes pas autorisé à effectuer cette action, veuillez contacter {{adminEmail}}.",
"sent-this-month":"envoyé ce mois-ci", "sent-this-month": "envoyé ce mois-ci",
"available-seats":"Disponible sièges", "available-seats": "Disponible sièges",
"buy-users":"Acheter plus d'utilisateurs", "buy-users": "Acheter plus d'utilisateurs",
"isenable-otp": "Activer la vérification OTP", "isenable-otp": "Activer la vérification OTP",
"isenable-otp-help": { "isenable-otp-help": {
"p1": "Souhaitez-vous activer le processus de vérification à l'aide d'un mot de passe à usage unique (OTP)?", "p1": "Souhaitez-vous activer le processus de vérification à l'aide d'un mot de passe à usage unique (OTP)?",
@@ -662,11 +663,13 @@
"p3": "La sélection de cette option désactivera la vérification OTP, permettant aux utilisateurs de signer le document directement sans étapes supplémentaires.", "p3": "La sélection de cette option désactivera la vérification OTP, permettant aux utilisateurs de signer le document directement sans étapes supplémentaires.",
"p4": "Veuillez choisir l'option qui correspond le mieux à vos exigences en matière de signature de documents." "p4": "Veuillez choisir l'option qui correspond le mieux à vos exigences en matière de signature de documents."
}, },
"advanced-options":"Options avancées", "advanced-options": "Options avancées",
"hide-advanced-options": "Masquer les options avancées", "hide-advanced-options": "Masquer les options avancées",
"download-files" :"Télécharger des fichiers", "download-files": "Télécharger des fichiers",
"download-pdf" :"Télécharger le PDF", "download-pdf": "Télécharger le PDF",
"pdf-certificate" :"Télécharger Pdf + Certificat", "pdf-certificate": "Télécharger Pdf + Certificat",
"document-logs":"Journaux de documents" "document-logs": "Journaux de documents",
"server-down": "Impossible de se connecter au serveur OpenSign. Si vous hébergez vous-même OpenSign, veuillez vous assurer que toutes les étapes de la documentation ont été correctement suivies. Si vous exécutez OpenSign localement, vous y accédez peut-être via un numéro de port incorrect.",
"admin-exists": "L'administrateur existe déjà. Veuillez vous connecter à l'application en utilisant les informations d'identification de l'administrateur afin de gérer les utilisateurs.",
"public-tour-message": "Veuillez rendre le modèle public pour copier l'URL publique"
} }
-1
View File
@@ -4,7 +4,6 @@
border: 1px solid black; border: 1px solid black;
background: white; background: white;
border-radius: 5px; border-radius: 5px;
animation: inAnimation 2s ease-in-out;
z-index: 1; z-index: 1;
} }
@@ -196,8 +196,9 @@ export default async function createDocumentWithTemplate(request, response) {
if (TimeToCompleteDays) { if (TimeToCompleteDays) {
object.set('TimeToCompleteDays', TimeToCompleteDays); object.set('TimeToCompleteDays', TimeToCompleteDays);
} }
const enableOTP = request.body?.enableOTP === true ? true : false; const enableOTP = request.body?.enableOTP;
const IsEnableOTP = enableOTP || template?.IsEnableOTP || false; const IsEnableOTP =
enableOTP !== undefined ? enableOTP : template?.IsEnableOTP || false;
object.set('IsEnableOTP', IsEnableOTP); object.set('IsEnableOTP', IsEnableOTP);
object.set('CreatedBy', template.CreatedBy); object.set('CreatedBy', template.CreatedBy);
object.set('ExtUserPtr', { object.set('ExtUserPtr', {
@@ -48,10 +48,10 @@ export default async function updateDocument(request, response) {
objectId: request?.body?.folderId, objectId: request?.body?.folderId,
}); });
} }
if (request.body?.enableOTP !== undefined) {
if (request.body?.enableOTP) {
updateQuery.set('IsEnableOTP', request.body?.enableOTP); updateQuery.set('IsEnableOTP', request.body?.enableOTP);
} }
const updatedRes = await updateQuery.save(null, { useMasterKey: true }); const updatedRes = await updateQuery.save(null, { useMasterKey: true });
if (updatedRes) { if (updatedRes) {
if (request.posthog) { if (request.posthog) {
@@ -48,7 +48,7 @@ export default async function updateTemplate(request, response) {
objectId: request?.body?.folderId, objectId: request?.body?.folderId,
}); });
} }
if (request.body?.enableOTP) { if (request.body?.enableOTP !== undefined) {
updateQuery.set('IsEnableOTP', request.body?.enableOTP); updateQuery.set('IsEnableOTP', request.body?.enableOTP);
} }
const updatedRes = await updateQuery.save(null, { useMasterKey: true }); const updatedRes = await updateQuery.save(null, { useMasterKey: true });
@@ -51,7 +51,10 @@ export default async function UpdateExistUserAsAdmin(request) {
extClsQuery.notEqualTo('IsDisabled', true); extClsQuery.notEqualTo('IsDisabled', true);
const extAdminRes = await extClsQuery.find({ useMasterKey: true }); const extAdminRes = await extClsQuery.find({ useMasterKey: true });
if (extAdminRes && extAdminRes.length === 1 && extAdminRes?.[0]?.get('OrganizationId')) { if (extAdminRes && extAdminRes.length === 1 && extAdminRes?.[0]?.get('OrganizationId')) {
throw new Parse.Error(Parse.Error.DUPLICATE_VALUE, 'Admin already exist.'); throw new Parse.Error(
Parse.Error.DUPLICATE_VALUE,
'Admin already exists. Please login to the application using admin credentials in order to manage users.'
);
} else { } else {
const extCls = new Parse.Query('contracts_Users'); const extCls = new Parse.Query('contracts_Users');
extCls.equalTo('Email', email); extCls.equalTo('Email', email);
+8 -8
View File
@@ -25,7 +25,7 @@
"googleapis": "^144.0.0", "googleapis": "^144.0.0",
"jsonschema": "^1.4.1", "jsonschema": "^1.4.1",
"mailgun.js": "^10.2.3", "mailgun.js": "^10.2.3",
"mongoose": "^8.6.3", "mongoose": "^8.7.0",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"multer-s3": "^3.0.1", "multer-s3": "^3.0.1",
"node-forge": "^1.3.1", "node-forge": "^1.3.1",
@@ -8247,13 +8247,13 @@
} }
}, },
"node_modules/mongoose": { "node_modules/mongoose": {
"version": "8.6.3", "version": "8.7.0",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.6.3.tgz", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.7.0.tgz",
"integrity": "sha512-++yRmm7hjMbqVA/8WeiygTnEfrFbiy+OBjQi49GFJIvCQuSYE56myyQWo4j5hbpcHjhHQU8NukMNGTwAWFWjIw==", "integrity": "sha512-rUCSF1mMYQXjXYdqEQLLlMD3xbcj2j1/hRn+9VnVj7ipzru/UoUZxlj/hWmteKMAh4EFnDZ+BIrmma9l/0Hi1g==",
"dependencies": { "dependencies": {
"bson": "^6.7.0", "bson": "^6.7.0",
"kareem": "2.6.3", "kareem": "2.6.3",
"mongodb": "6.8.0", "mongodb": "6.9.0",
"mpath": "0.9.0", "mpath": "0.9.0",
"mquery": "5.0.0", "mquery": "5.0.0",
"ms": "2.1.3", "ms": "2.1.3",
@@ -8325,9 +8325,9 @@
} }
}, },
"node_modules/mongoose/node_modules/mongodb": { "node_modules/mongoose/node_modules/mongodb": {
"version": "6.8.0", "version": "6.9.0",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.8.0.tgz", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.9.0.tgz",
"integrity": "sha512-HGQ9NWDle5WvwMnrvUxsFYPd3JEbqD3RgABHBQRuoCEND0qzhsd0iH5ypHsf1eJ+sXmvmyKpP+FLOKY8Il7jMw==", "integrity": "sha512-UMopBVx1LmEUbW/QE0Hw18u583PEDVQmUmVzzBRH0o/xtE9DBRA5ZYLOjpLIa03i8FXjzvQECJcqoMvCXftTUA==",
"dependencies": { "dependencies": {
"@mongodb-js/saslprep": "^1.1.5", "@mongodb-js/saslprep": "^1.1.5",
"bson": "^6.7.0", "bson": "^6.7.0",
+1 -1
View File
@@ -34,7 +34,7 @@
"googleapis": "^144.0.0", "googleapis": "^144.0.0",
"jsonschema": "^1.4.1", "jsonschema": "^1.4.1",
"mailgun.js": "^10.2.3", "mailgun.js": "^10.2.3",
"mongoose": "^8.6.3", "mongoose": "^8.7.0",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"multer-s3": "^3.0.1", "multer-s3": "^3.0.1",
"node-forge": "^1.3.1", "node-forge": "^1.3.1",
+3
View File
@@ -2,6 +2,8 @@ services:
server: server:
image: opensign/opensignserver:main image: opensign/opensignserver:main
container_name: OpenSignServer-container container_name: OpenSignServer-container
volumes:
- opensign-files:/usr/src/app/files
ports: ports:
- "8080:8080" - "8080:8080"
depends_on: depends_on:
@@ -56,3 +58,4 @@ volumes:
web-root: web-root:
caddy_data: caddy_data:
caddy_config: caddy_config:
opensign-files: