Skip to content

Commit 5707039

Browse files
fix: handle uncaught err of file storage and email adapter
1 parent e7b9f3f commit 5707039

File tree

5 files changed

+215
-85
lines changed

5 files changed

+215
-85
lines changed

apps/OpenSign/src/routes/ForgetPassword.js

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import { fetchAppInfo, forgetPassword } from "../redux/actions";
44
import Title from "../components/Title";
55
import { NavLink } from "react-router-dom";
66
import login_img from "../assets/images/login_img.svg";
7-
7+
import Parse from "parse";
8+
import Alert from "../primitives/Alert";
89
function ForgotPassword(props) {
910
const [state, setState] = useState({
1011
email: "",
1112
password: "",
1213
hideNav: ""
1314
});
15+
const [sentStatus, setSentStatus] = useState("");
1416
const handleChange = (event) => {
1517
const { name, value } = event.target;
1618
setState({ ...state, [name]: value });
@@ -23,7 +25,7 @@ function ForgotPassword(props) {
2325
}
2426
};
2527

26-
const handleSubmit = (event) => {
28+
const handleSubmit = async (event) => {
2729
event.preventDefault();
2830
localStorage.setItem("appLogo", props.appInfo.applogo);
2931
localStorage.setItem("appName", props.appInfo.appname);
@@ -33,9 +35,21 @@ function ForgotPassword(props) {
3335
"userSettings",
3436
JSON.stringify(props.appInfo.settings)
3537
);
36-
3738
if (state.email) {
38-
props.forgetPassword(state.email);
39+
const username = state.email;
40+
let baseUrl = localStorage.getItem("BaseUrl12");
41+
let parseAppId = localStorage.getItem("AppID12");
42+
try {
43+
Parse.serverURL = baseUrl;
44+
Parse.initialize(parseAppId);
45+
await Parse.User.requestPasswordReset(username);
46+
setSentStatus("success");
47+
} catch (err) {
48+
console.log("err ", err.code);
49+
setSentStatus("failed");
50+
} finally {
51+
setTimeout(() => setSentStatus(""), 1000);
52+
}
3953
}
4054
};
4155

@@ -51,6 +65,14 @@ function ForgotPassword(props) {
5165
return (
5266
<div className="bg-white">
5367
<Title title="Forgot password page" />
68+
{sentStatus === "success" && (
69+
<Alert type="success">
70+
Reset password link has been sent to your email id
71+
</Alert>
72+
)}
73+
{sentStatus === "failed" && (
74+
<Alert type={"danger"}>Please setup email adapter </Alert>
75+
)}
5476
<div>
5577
<div className="md:m-10 lg:m-16 md:p-4 lg:p-10 p-5 bg-[#ffffff] md:border-[1px] md:border-gray-400 ">
5678
<div className="w-[250px] h-[66px] inline-block">

apps/OpenSignServer/cloud/customRoute/uploadFile.js

Lines changed: 59 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -47,53 +47,78 @@ async function uploadFile(req, res) {
4747
const DO_ACCESS_KEY_ID = process.env.DO_ACCESS_KEY_ID;
4848
const DO_SECRET_ACCESS_KEY = process.env.DO_SECRET_ACCESS_KEY;
4949
const DO_SPACE = process.env.DO_SPACE;
50-
const spacesEndpoint = new aws.Endpoint(DO_ENDPOINT);
51-
const s3 = new aws.S3({
52-
endpoint: spacesEndpoint,
53-
accessKeyId: DO_ACCESS_KEY_ID,
54-
secretAccessKey: DO_SECRET_ACCESS_KEY,
55-
signatureVersion: 'v4',
56-
region: process.env.DO_REGION,
57-
});
5850

5951
const parseBaseUrl = process.env.SERVER_URL;
6052
const parseAppId = process.env.APP_ID;
61-
62-
if (process.env.USE_LOCAL == "TRUE") {
63-
var fileStorage = multer.diskStorage({
64-
destination: function(req, file, cb) {
65-
cb(null, "files/files");
53+
let fileStorage;
54+
if (process.env.USE_LOCAL == 'TRUE') {
55+
fileStorage = multer.diskStorage({
56+
destination: function (req, file, cb) {
57+
cb(null, 'files/files');
6658
},
6759
metadata: function (req, file, cb) {
6860
cb(null, { fieldName: 'OPENSIGN_METADATA' });
6961
},
70-
filename: function(req, file, cb) {
62+
filename: function (req, file, cb) {
7163
let filename = file.originalname;
7264
let newFileName = filename.split('.')[0];
7365
let extension = filename.split('.')[1];
74-
newFileName = sanitizeFileName(newFileName + '_' + new Date().toISOString() + '.' + extension)
66+
newFileName = sanitizeFileName(
67+
newFileName + '_' + new Date().toISOString() + '.' + extension
68+
);
7569
console.log(newFileName);
7670
cb(null, newFileName);
77-
}
78-
});
79-
} else {
80-
var fileStorage = multerS3({
81-
acl: 'public-read',
82-
s3,
83-
bucket: DO_SPACE,
84-
metadata: function (req, file, cb) {
85-
cb(null, { fieldName: 'OPENSIGN_METADATA' });
8671
},
87-
key: function (req, file, cb) {
88-
//console.log(file);
89-
let filename = file.originalname;
90-
let newFileName = filename.split('.')[0];
91-
let extension = filename.split('.')[1];
92-
newFileName = sanitizeFileName(newFileName + '_' + new Date().toISOString() + '.' + extension)
93-
console.log(newFileName);
94-
cb(null, newFileName);
95-
}
9672
});
73+
} else {
74+
try {
75+
const spacesEndpoint = new aws.Endpoint(DO_ENDPOINT);
76+
const s3 = new aws.S3({
77+
endpoint: spacesEndpoint,
78+
accessKeyId: DO_ACCESS_KEY_ID,
79+
secretAccessKey: DO_SECRET_ACCESS_KEY,
80+
signatureVersion: 'v4',
81+
region: process.env.DO_REGION,
82+
});
83+
fileStorage = multerS3({
84+
acl: 'public-read',
85+
s3,
86+
bucket: DO_SPACE,
87+
metadata: function (req, file, cb) {
88+
cb(null, { fieldName: 'OPENSIGN_METADATA' });
89+
},
90+
key: function (req, file, cb) {
91+
//console.log(file);
92+
let filename = file.originalname;
93+
let newFileName = filename.split('.')[0];
94+
let extension = filename.split('.')[1];
95+
newFileName = sanitizeFileName(
96+
newFileName + '_' + new Date().toISOString() + '.' + extension
97+
);
98+
console.log(newFileName);
99+
cb(null, newFileName);
100+
},
101+
});
102+
} catch (err) {
103+
fileStorage = multer.diskStorage({
104+
destination: function (req, file, cb) {
105+
cb(null, 'files/files');
106+
},
107+
metadata: function (req, file, cb) {
108+
cb(null, { fieldName: 'OPENSIGN_METADATA' });
109+
},
110+
filename: function (req, file, cb) {
111+
let filename = file.originalname;
112+
let newFileName = filename.split('.')[0];
113+
let extension = filename.split('.')[1];
114+
newFileName = sanitizeFileName(
115+
newFileName + '_' + new Date().toISOString() + '.' + extension
116+
);
117+
console.log(newFileName);
118+
cb(null, newFileName);
119+
},
120+
});
121+
}
97122
}
98123

99124
// const s3 = new aws.S3();
@@ -122,7 +147,7 @@ async function uploadFile(req, res) {
122147
const status = 'Success';
123148
//res.header("Access-Control-Allow-Headers", "Content-Type");
124149
//res.setHeader("Access-Control-Allow-Origin", "*");
125-
if (process.env.USE_LOCAL == "TRUE") {
150+
if (process.env.USE_LOCAL == 'TRUE') {
126151
console.log(req.file);
127152
var fileUrl = `${parseBaseUrl}/files/${parseAppId}/${req.file.filename}`;
128153
} else {

apps/OpenSignServer/cloud/parsefunction/sendMail.js

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,29 @@ import formData from 'form-data';
44
import Mailgun from 'mailgun.js';
55
import { createTransport } from 'nodemailer';
66

7-
let transporterSMTP;
8-
let mailgunClient;
9-
let mailgunDomain;
10-
if (process.env.SMTP_ENABLE) {
11-
transporterSMTP = createTransport({
12-
host: process.env.SMTP_HOST,
13-
port: process.env.SMTP_PORT || 465,
14-
secure: process.env.SMTP_SECURE || true,
15-
auth: {
16-
user: process.env.SMTP_USER_EMAIL,
17-
pass: process.env.SMTP_PASS,
18-
},
19-
});
20-
} else {
21-
const mailgun = new Mailgun(formData);
22-
mailgunClient = mailgun.client({
23-
username: 'api',
24-
key: process.env.MAILGUN_API_KEY,
25-
});
26-
mailgunDomain = process.env.MAILGUN_DOMAIN;
27-
}
28-
297
async function sendmail(req) {
308
try {
9+
let transporterSMTP;
10+
let mailgunClient;
11+
let mailgunDomain;
12+
if (process.env.SMTP_ENABLE) {
13+
transporterSMTP = createTransport({
14+
host: process.env.SMTP_HOST,
15+
port: process.env.SMTP_PORT || 465,
16+
secure: process.env.SMTP_SECURE || true,
17+
auth: {
18+
user: process.env.SMTP_USER_EMAIL,
19+
pass: process.env.SMTP_PASS,
20+
},
21+
});
22+
} else {
23+
const mailgun = new Mailgun(formData);
24+
mailgunClient = mailgun.client({
25+
username: 'api',
26+
key: process.env.MAILGUN_API_KEY,
27+
});
28+
mailgunDomain = process.env.MAILGUN_DOMAIN;
29+
}
3130
if (req.params.url) {
3231
let Pdf = fs.createWriteStream('test.pdf');
3332
const writeToLocalDisk = () => {

apps/OpenSignServer/index.js

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,32 @@ import { exec } from 'child_process';
2121
import { createTransport } from 'nodemailer';
2222
import { app as v1 } from './cloud/customRoute/v1/apiV1.js';
2323
import { PostHog } from 'posthog-node';
24-
const spacesEndpoint = new AWS.Endpoint(process.env.DO_ENDPOINT);
2524
// console.log("configuration ", configuration);
25+
let fsAdapter;
2626
if (process.env.USE_LOCAL !== 'TRUE') {
27-
const s3Options = {
28-
bucket: process.env.DO_SPACE, // globalConfig.S3FilesAdapter.bucket,
29-
baseUrl: process.env.DO_BASEURL,
30-
region: process.env.DO_REGION,
31-
directAccess: true,
32-
preserveFileName: true,
33-
s3overrides: {
34-
accessKeyId: process.env.DO_ACCESS_KEY_ID,
35-
secretAccessKey: process.env.DO_SECRET_ACCESS_KEY,
36-
endpoint: spacesEndpoint,
37-
},
38-
};
39-
var fsAdapter = new S3Adapter(s3Options);
27+
try {
28+
const spacesEndpoint = new AWS.Endpoint(process.env.DO_ENDPOINT);
29+
const s3Options = {
30+
bucket: process.env.DO_SPACE, // globalConfig.S3FilesAdapter.bucket,
31+
baseUrl: process.env.DO_BASEURL,
32+
region: process.env.DO_REGION,
33+
directAccess: true,
34+
preserveFileName: true,
35+
s3overrides: {
36+
accessKeyId: process.env.DO_ACCESS_KEY_ID,
37+
secretAccessKey: process.env.DO_SECRET_ACCESS_KEY,
38+
endpoint: spacesEndpoint,
39+
},
40+
};
41+
fsAdapter = new S3Adapter(s3Options);
42+
} catch (err) {
43+
console.log('err ', err);
44+
fsAdapter = new FSFilesAdapter({
45+
filesSubDirectory: 'files', // optional, defaults to ./files
46+
});
47+
}
4048
} else {
41-
var fsAdapter = new FSFilesAdapter({
49+
fsAdapter = new FSFilesAdapter({
4250
filesSubDirectory: 'files', // optional, defaults to ./files
4351
});
4452
}
@@ -78,14 +86,14 @@ export const config = {
7886
masterKey: process.env.MASTER_KEY || '', //Add your master key here. Keep it secret!
7987
masterKeyIps: ['0.0.0.0/0', '::1'], // '::1'
8088
serverURL: process.env.SERVER_URL || 'http://localhost:8080/app', // Don't forget to change to https if needed
81-
verifyUserEmails: true,
89+
verifyUserEmails: process.env.SMTP_ENABLE || process.env.MAILGUN_API_KEY ? true : false,
8290
publicServerURL: process.env.SERVER_URL || 'http://localhost:8080/app',
8391
// Your apps name. This will appear in the subject and body of the emails that are sent.
8492
appName: 'Open Sign',
8593
allowClientClassCreation: false,
86-
emailAdapter:
87-
process.env.SMTP_ENABLE || process.env.MAILGUN_API_KEY
88-
? {
94+
...(process.env.SMTP_ENABLE || process.env.MAILGUN_API_KEY
95+
? {
96+
emailAdapter: {
8997
module: 'parse-server-api-mail-adapter',
9098
options: {
9199
// The email address from which emails are sent.
@@ -116,8 +124,9 @@ export const config = {
116124
} else if (transporterMail) await transporterMail.sendMail(payload);
117125
},
118126
},
119-
}
120-
: null,
127+
},
128+
}
129+
: {}),
121130
filesAdapter: fsAdapter,
122131
auth: {
123132
google: {
@@ -170,9 +179,13 @@ app.use('/public', express.static(path.join(__dirname, '/public')));
170179
// Serve the Parse API on the /parse URL prefix
171180
if (!process.env.TESTING) {
172181
const mountPath = process.env.PARSE_MOUNT || '/app';
173-
const server = new ParseServer(config);
174-
await server.start();
175-
app.use(mountPath, server.app);
182+
try {
183+
const server = new ParseServer(config);
184+
await server.start();
185+
app.use(mountPath, server.app);
186+
} catch (err) {
187+
console.log('Err ', err);
188+
}
176189
}
177190
// Mount your custom express app
178191
app.use('/', customRoute);

0 commit comments

Comments
 (0)