Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion config/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ const MAX_FILE_DOWNLOAD_COUNT = loadEnv(
"MAX_FILE_DOWNLOAD_COUNT",
process.env.MAX_FILE_DOWNLOAD_COUNT
);

const DOC_FILL_SERVICE = loadEnv(
"DOC_FILL_SERVICE",
process.env.DOC_FILL_SERVICE
);
//Blacklisted password
const BLACKLISTED_PASSWORDS = loadEnv(
"BLACKLISTED_PASSWORDS",
Expand Down Expand Up @@ -91,4 +94,5 @@ export {
MAX_FILE_DOWNLOAD_COUNT,
FORGOT_PASSWORD,
BLACKLISTED_PASSWORDS,
DOC_FILL_SERVICE,
};
70 changes: 66 additions & 4 deletions controllers/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ import bcrypt from "bcrypt";
import generator from "generate-password";
import jwtGenerator from "../utils/jwtGenerator.js";
import { logger } from "../logger.js";
import { ROLES, SALT, AWS_BUCKET } from "../config/config.js";
import { ROLES, SALT, AWS_BUCKET, DOC_FILL_SERVICE } from "../config/config.js";
import { successResponse } from "../interceptor/success.js";
import { errorResponse } from "../interceptor/error.js";
import { S3Uploadv2 } from "../service/s3.js";
import { getFileUploadPath } from "./helper.js";
import { mailer, mailerAdmin } from "../service/mailer.js";

import axios from "axios";
import FormData from "form-data";
const adduser = async (req, res) => {
logger.defaultMeta = { ...logger.defaultMeta, source: "controller.adduser" };
let { name, email, batch, number } = req.body;
Expand All @@ -29,6 +30,7 @@ const adduser = async (req, res) => {
return errorResponse(res, 409, "user already exist");
}
}
//

// generating a random password
var password = generator.generate({
Expand Down Expand Up @@ -194,6 +196,58 @@ const docname = async (req, res) => {
}
};

//uploding the signed document
//TODO: check for uploaded documents count
const uploadSignedFile = async (req, res) => {
try {
const fileRecievedFromClient = req.file;
const formD = JSON.parse(req.body.data);
const user_id = req.context.id;
const doc_id = formD.doc_id;
let key = await getFileUploadPath(doc_id, req.context);
const nomineeDetails = JSON.stringify(formD.nomineeDetails);
const epsNomineeDetails = JSON.stringify(formD.epsNomineeDetails);
const epsNonFamDetails = JSON.stringify(formD.epsNonFamDetails);
let form = new FormData();
form.append(
"signature",
fileRecievedFromClient.buffer,
fileRecievedFromClient.originalname
);
form.append("name", formD.basicDetails.name);
form.append(
"fathers_name_or_husbands_name",
formD.basicDetails.fathers_name_or_husbands_name
);
form.append("gender", formD.basicDetails.gender);
form.append("dob", formD.basicDetails.dob);
form.append("maritalstatus", formD.basicDetails.maritalstatus);
form.append("pf_number", formD.basicDetails.pf_number);
form.append("address", formD.basicDetails.address);
form.append("epf_nominee_details", nomineeDetails);
form.append("eps_member_details", epsNomineeDetails);
form.append("eps_nominee", epsNonFamDetails);
axios
.post(DOC_FILL_SERVICE, form, {
responseType: "stream",
headers: {
"Content-Type": `multipart/form-data; boundary=${form.getBoundary()}`,
},
})
.then(async (response) => {
const result = await S3Uploadv2(response.data, key);
let upload_doc = await db.query(
"INSERT INTO uploaded_docs VALUES ($1,$2,$3) ",
[user_id, doc_id, key]
);
});
return successResponse(res, 200, "Signed document uploaded successfully ");
} catch (err) {
logger.error(`error in uploading the file ${err}`);
return errorResponse(res, 500, "error in uploading document");
}
};

//uploading the file

const uploadFile = async (req, res) => {
Expand Down Expand Up @@ -292,7 +346,7 @@ const uploadFile = async (req, res) => {
const userDetails = async (req, res) => {
try {
const userDetails = await db.query(
"select id,name,email,phone_number from users where is_admin = $1",
"select id,name,email,phone_number from users where is_admin = $1 ",
[false]
);
let details = [];
Expand Down Expand Up @@ -330,4 +384,12 @@ const userDetails = async (req, res) => {
}
};

export { adduser, updatepassword, login, docname, uploadFile, userDetails };
export {
adduser,
updatepassword,
login,
docname,
uploadFile,
userDetails,
uploadSignedFile,
};
14 changes: 14 additions & 0 deletions middleware/validinfo.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,20 @@ const validinfo = function (req, res, next) {
return errorResponse(res, 400, "Invalid Phone number");
}
}
//Checking if file is uploaded

//"
if (req.path === "/uploadSignedDocuments") {
if (
(!req.file && req.file.mimetype != "image/jpeg") ||
(!req.file && req.file.mimetype != "image/png")
) {
return errorResponse(res, 400, "File missing or invalid");
}
if (!req.file || req.file.size > FILE_SIZE) {
return errorResponse(res, 400, "File size is greater than 1MB");
}
}

next();
};
Expand Down
109 changes: 109 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@
"dependencies": {
"adm-zip": "^0.5.9",
"aws-sdk": "^2.1167.0",
"axios": "^0.27.2",
"bcrypt": "^5.0.1",
"cors": "^2.8.5",
"dotenv": "^16.0.1",
"express": "^4.18.1",
"form-data": "^4.0.0",
"generate-password": "^1.7.0",
"jsonwebtoken": "^8.5.1",
"multer": "^1.4.5-lts.1",
Expand Down
12 changes: 11 additions & 1 deletion routes/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import {
docname,
uploadFile,
userDetails,
uploadSignedFile,
} from "../controllers/auth.js";
import { upload } from "../middleware/fileMiddleware.js";
import validinfo from "../middleware/validinfo.js";
import { authMiddleware } from "../middleware/auth.js";
import {validatePassword} from "../middleware/validatePassword.js"
import { validatePassword } from "../middleware/validatePassword.js";
import multer from "multer";

const isAdminOnlyRoute = true;
const authRouter = express.Router();
Expand Down Expand Up @@ -45,6 +47,14 @@ authRouter.post(
validinfo,
uploadFile
);
//adding the upload signed document routes
authRouter.post(
"/uploadSignedDocuments",
authMiddleware(!isAdminOnlyRoute),
upload.single("file"),
validinfo,
uploadSignedFile
);

//sending all users details to admin side
authRouter.get(
Expand Down
2 changes: 1 addition & 1 deletion service/s3.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const S3Uploadv2 = async (file, key) => {
const param = {
Bucket: AWS_BUCKET,
Key: key,
Body: file.buffer,
Body: file, //file.buffer
};
return s3.upload(param).promise();
};
Expand Down