Skip to content

Commit 8d6f4dd

Browse files
fix: issue user count
1 parent c36a70f commit 8d6f4dd

File tree

3 files changed

+51
-84
lines changed

3 files changed

+51
-84
lines changed

apps/OpenSign/src/pages/UserList.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,13 @@ const UserList = () => {
185185
};
186186

187187
const handleUserData = (userData) => {
188-
setUserList((prev) => [userData, ...prev]);
188+
if (userData) {
189+
setUserCounts((obj) => ({
190+
...obj,
191+
allowed: obj?.allowed > 0 ? obj.allowed - 1 : 1
192+
}));
193+
setUserList((prev) => [userData, ...prev]);
194+
}
189195
};
190196
// `formatRow` is used to show data in poper manner like
191197
// if data is of array type then it will join array items with ","

apps/OpenSignServer/Utils.js

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -42,36 +42,38 @@ export function replaceMailVaribles(subject, body, variables) {
4242
export const saveFileUsage = async (size, fileUrl, userId) => {
4343
//checking server url and save file's size
4444
try {
45-
const tenantQuery = new Parse.Query('partners_Tenant');
46-
tenantQuery.equalTo('UserId', {
47-
__type: 'Pointer',
48-
className: '_User',
49-
objectId: userId,
50-
});
51-
const tenant = await tenantQuery.first();
52-
if (tenant) {
53-
const tenantPtr = { __type: 'Pointer', className: 'partners_Tenant', objectId: tenant.id };
54-
try {
55-
const tenantCredits = new Parse.Query('partners_TenantCredits');
56-
tenantCredits.equalTo('PartnersTenant', tenantPtr);
57-
const res = await tenantCredits.first({ useMasterKey: true });
58-
if (res) {
59-
const response = JSON.parse(JSON.stringify(res));
60-
const usedStorage = response?.usedStorage ? response.usedStorage + size : size;
61-
const updateCredit = new Parse.Object('partners_TenantCredits');
62-
updateCredit.id = res.id;
63-
updateCredit.set('usedStorage', usedStorage);
64-
await updateCredit.save(null, { useMasterKey: true });
65-
} else {
66-
const newCredit = new Parse.Object('partners_TenantCredits');
67-
newCredit.set('usedStorage', size);
68-
newCredit.set('PartnersTenant', tenantPtr);
69-
await newCredit.save(null, { useMasterKey: true });
45+
if (userId) {
46+
const tenantQuery = new Parse.Query('partners_Tenant');
47+
tenantQuery.equalTo('UserId', {
48+
__type: 'Pointer',
49+
className: '_User',
50+
objectId: userId,
51+
});
52+
const tenant = await tenantQuery.first();
53+
if (tenant) {
54+
const tenantPtr = { __type: 'Pointer', className: 'partners_Tenant', objectId: tenant.id };
55+
try {
56+
const tenantCredits = new Parse.Query('partners_TenantCredits');
57+
tenantCredits.equalTo('PartnersTenant', tenantPtr);
58+
const res = await tenantCredits.first({ useMasterKey: true });
59+
if (res) {
60+
const response = JSON.parse(JSON.stringify(res));
61+
const usedStorage = response?.usedStorage ? response.usedStorage + size : size;
62+
const updateCredit = new Parse.Object('partners_TenantCredits');
63+
updateCredit.id = res.id;
64+
updateCredit.set('usedStorage', usedStorage);
65+
await updateCredit.save(null, { useMasterKey: true });
66+
} else {
67+
const newCredit = new Parse.Object('partners_TenantCredits');
68+
newCredit.set('usedStorage', size);
69+
newCredit.set('PartnersTenant', tenantPtr);
70+
await newCredit.save(null, { useMasterKey: true });
71+
}
72+
} catch (err) {
73+
console.log('err in save usage', err);
7074
}
71-
} catch (err) {
72-
console.log('err in save usage', err);
75+
saveDataFile(size, fileUrl, tenantPtr);
7376
}
74-
saveDataFile(size, fileUrl, tenantPtr);
7577
}
7678
} catch (err) {
7779
console.log('err in fetch tenant Id', err);

apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js

Lines changed: 14 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,7 @@ async function uploadFile(pdfName, filepath) {
2929
// `updateDoc` is used to update signedUrl, AuditTrail, Iscompleted in document
3030
async function updateDoc(docId, url, userId, ipAddress, data, className, sign) {
3131
try {
32-
const UserPtr = {
33-
__type: 'Pointer',
34-
className: className,
35-
objectId: userId,
36-
};
32+
const UserPtr = { __type: 'Pointer', className: className, objectId: userId };
3733
const obj = {
3834
UserPtr: UserPtr,
3935
SignedUrl: url,
@@ -66,11 +62,7 @@ async function updateDoc(docId, url, userId, ipAddress, data, className, sign) {
6662
} else {
6763
isCompleted = true;
6864
}
69-
const body = {
70-
SignedUrl: url,
71-
AuditTrail: updateAuditTrail,
72-
IsCompleted: isCompleted,
73-
};
65+
const body = { SignedUrl: url, AuditTrail: updateAuditTrail, IsCompleted: isCompleted };
7466
const signedRes = await axios.put(serverUrl + '/classes/contracts_Document/' + docId, body, {
7567
headers: {
7668
'Content-Type': 'application/json',
@@ -164,29 +156,16 @@ async function sendCompletedMail(obj) {
164156
'X-Parse-Master-Key': masterKEY,
165157
},
166158
});
167-
// console.log('Res ', res);
168159
}
169160

170161
// `sendDoctoWebhook` is used to send res data of document on webhook
171162
async function sendDoctoWebhook(doc, Url, event, signUser, certificateUrl) {
172163
let signers = [];
173164
if (signUser) {
174-
signers = {
175-
name: signUser?.Name,
176-
email: signUser?.Email,
177-
phone: signUser?.Phone,
178-
};
165+
signers = { name: signUser?.Name, email: signUser?.Email, phone: signUser?.Phone };
179166
} else {
180-
signers = doc?.Signers?.map(x => ({
181-
name: x.Name,
182-
email: x.Email,
183-
phone: x.Phone,
184-
})) || [
185-
{
186-
name: doc?.ExtUserPtr?.Name,
187-
email: doc?.ExtUserPtr?.Email,
188-
phone: doc?.ExtUserPtr?.Phone,
189-
},
167+
signers = doc?.Signers?.map(x => ({ name: x.Name, email: x.Email, phone: x.Phone })) || [
168+
{ name: doc?.ExtUserPtr?.Name, email: doc?.ExtUserPtr?.Email, phone: doc?.ExtUserPtr?.Phone },
190169
];
191170
}
192171

@@ -213,7 +192,6 @@ async function sendDoctoWebhook(doc, Url, event, signUser, certificateUrl) {
213192
})
214193
.then(res => {
215194
try {
216-
// console.log('res ', res);
217195
const webhook = new Parse.Object('contracts_Webhook');
218196
webhook.set('Log', res?.status);
219197
webhook.set('UserId', {
@@ -241,7 +219,6 @@ async function sendDoctoWebhook(doc, Url, event, signUser, certificateUrl) {
241219
console.log('err save in contracts_Webhook', err.message);
242220
}
243221
});
244-
// console.log('res ', res.data);
245222
}
246223
}
247224

@@ -281,15 +258,9 @@ const sendMailsaveCertifcate = async (doc, P12Buffer, url, isCustomMail, mailPro
281258
if (doc.IsSendMail === false) {
282259
console.log("don't send mail");
283260
} else {
284-
const mailObj = {
285-
url: url,
286-
isCustomMail: isCustomMail,
287-
doc: doc,
288-
mailProvider: mailProvider,
289-
};
261+
const mailObj = { url: url, isCustomMail: isCustomMail, doc: doc, mailProvider: mailProvider };
290262
sendCompletedMail(mailObj);
291263
}
292-
293264
saveFileUsage(CertificateBuffer.length, file.imageUrl, userId);
294265
sendDoctoWebhook(doc, url, 'completed', '', file.imageUrl);
295266
};
@@ -304,8 +275,7 @@ async function PDF(req) {
304275
if (!req?.user) {
305276
throw new Parse.Error(Parse.Error.INVALID_SESSION_TOKEN, 'User is not authenticated.');
306277
} else {
307-
const password = '';
308-
const authUser = req?.user?.toJSON();
278+
const userIP = req.headers['x-real-ip']; // client IPaddress
309279
const docId = req.params.docId;
310280
const reqUserId = req.params.userId;
311281
const isCustomMail = req.params.isCustomCompletionMail || false;
@@ -320,7 +290,6 @@ async function PDF(req) {
320290
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Document not found.');
321291
}
322292
const _resDoc = resDoc?.toJSON();
323-
324293
let signUser;
325294
let className;
326295
// `reqUserId` is send throught pdfrequest signing flow
@@ -346,18 +315,8 @@ async function PDF(req) {
346315
// const P12Buffer = fs.readFileSync();
347316
const P12Buffer = Buffer.from(pfxFile, 'base64');
348317
const p12Cert = new P12Signer(P12Buffer, { passphrase: process.env.PASS_PHRASE || null });
349-
350-
const UserPtr = {
351-
__type: 'Pointer',
352-
className: className,
353-
objectId: signUser.objectId,
354-
};
355-
const obj = {
356-
UserPtr: UserPtr,
357-
SignedUrl: '',
358-
Activity: 'Signed',
359-
ipAddress: req.headers['x-real-ip'],
360-
};
318+
const UserPtr = { __type: 'Pointer', className: className, objectId: signUser.objectId };
319+
const obj = { UserPtr: UserPtr, SignedUrl: '', Activity: 'Signed', ipAddress: userIP };
361320
let updateAuditTrail;
362321
if (_resDoc.AuditTrail && _resDoc.AuditTrail.length > 0) {
363322
updateAuditTrail = [..._resDoc.AuditTrail, obj];
@@ -430,13 +389,13 @@ async function PDF(req) {
430389
req.params.docId, //docId
431390
data.imageUrl, // url
432391
signUser.objectId, // userID
433-
req.headers['x-real-ip'], // client ipAddress,
392+
userIP, // client ipAddress,
434393
_resDoc, // auditTrail, signers, etc data
435-
className,
436-
sign
394+
className, // className based on flow
395+
sign // sign base64
437396
);
438397
sendDoctoWebhook(_resDoc, data.imageUrl, 'signed', signUser);
439-
saveFileUsage(pdfSize, data.imageUrl, authUser.objectId);
398+
saveFileUsage(pdfSize, data.imageUrl, _resDoc?.CreatedBy?.objectId);
440399
if (updatedDoc && updatedDoc.isCompleted) {
441400
const doc = { ..._resDoc, AuditTrail: updatedDoc.AuditTrail };
442401
sendMailsaveCertifcate(
@@ -445,7 +404,7 @@ async function PDF(req) {
445404
data.imageUrl,
446405
isCustomMail,
447406
mailProvider,
448-
authUser.objectId
407+
_resDoc?.CreatedBy?.objectId
449408
);
450409
}
451410
// `fs.unlinkSync` is used to remove exported signed pdf file from exports folder

0 commit comments

Comments
 (0)