Skip to content

Commit

Permalink
removed local storage of images and implemented cloudinary api for st…
Browse files Browse the repository at this point in the history
…orage, upload and retrieval
  • Loading branch information
dgargdipin committed Oct 2, 2020
1 parent 3ba8eb9 commit 110ba48
Show file tree
Hide file tree
Showing 7 changed files with 159 additions and 27 deletions.
5 changes: 5 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ app.use(
extended: true,
})
);
const {
cloudinaryConfig
} = require('./config/cloudinary_support')

app.use(bodyParser.json());

app.use(cors());
Expand Down Expand Up @@ -98,6 +102,7 @@ app.use(passport.initialize());
// app.use((req, res, next) => [
// res.setHeader("default-src 'self'; script-src 'report-sample' 'self' https://apis.google.com/js/api.js https://kit.fontawesome.com/5a3d56a40e.js; style-src 'report-sample' 'self' https://fonts.googleapis.com https://kit-free.fontawesome.com; object-src 'none'; base-uri 'self'; connect-src 'self'; font-src 'self' https://fonts.gstatic.com https://kit-free.fontawesome.com; frame-src 'self' https://accounts.google.com; img-src 'self'; manifest-src 'self'; media-src 'self'; report-uri https://5f4b9f5fb641482c3e7cfaaa.endpoint.csper.io/; worker-src 'self';")
// ])
app.use(cloudinaryConfig)
app.use("/public", express.static("public"));

//Routes
Expand Down
27 changes: 27 additions & 0 deletions config/cloudinary_support.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
const {
config,
uploader
} = require('cloudinary');
const cloudinaryConfig = () => config({
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET,
});

function parseImage(req, res, next) {
if (req.file) {
const Datauri = require('datauri');
const datauri = new Datauri();
datauri.format(path.extname(req.file.originalname).toString(), req.file.buffer);
req.file.encodedUri = datauri.content;
} else {
res.status(400).json({
error: 'Please include image in the request'
});
}
}
module.exports = {
cloudinaryConfig,
uploader,
parseImage
};
5 changes: 4 additions & 1 deletion config/multer_support.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
const multer = require('multer');
const Datauri = require("datauri");

const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "public/images");
Expand All @@ -11,8 +13,9 @@ const imageFileFilter = (req, file, cb) => {
cb(null, true);
};
const upload = multer({
storage: storage,
storage: multer.memoryStorage(),
fileFilter: imageFileFilter
});


module.exports = upload
30 changes: 30 additions & 0 deletions package-lock.json

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

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"cloudinary": "^1.23.0",
"concurrently": "^5.3.0",
"cors": "^2.8.5",
"datauri": "^3.0.0",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"express-csp-header": "^4.0.0",
Expand Down
40 changes: 30 additions & 10 deletions routes/api_menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@ const router = express.Router();
const _ = require("lodash");
const Menu = require("../models/Menu");
const Dish = require("../models/Dish");
const { ensureAuthenticated, ensureCafe } = require("../config/auth");
const {
ensureAuthenticated,
ensureCafe
} = require("../config/auth");
const upload = require("../config/multer_support");

const { Cafe } = require("../models/Cafe");
const {
uploader,
parseImage
} = require('../config/cloudinary_support')
const {
Cafe
} = require("../models/Cafe");
//working api endpoint /api/menu
//returns list of all cafes
router.get("/", async(req, res) => {
Expand Down Expand Up @@ -90,13 +98,20 @@ router.post("/", ensureCafe, (req, res) => {
router.post(
"/withImage",
ensureCafe,
upload.single("dishImage"),
upload.single("dishImage"), parseImage,
(req, res) => {
console.log(req.body);
let deepClone = JSON.parse(JSON.stringify(req.body));
console.log(req.file);
if (req.file != undefined) {
deepClone.pictureURL = req.file.path;
uploader.upload(req.file.encodedUri)
.then((result) => {
deepClone.pictureURL = result.url;
})
.catch(err => res.status(500).json({
error: 'Could not upload'
}));

}
deepClone.cafe_id = req.user._id;
deepClone.availability = deepClone.availability == "true";
Expand Down Expand Up @@ -130,13 +145,16 @@ router.post(
router.patch(
"/withImage",
ensureCafe,
upload.single("dishImage"),
upload.single("dishImage"), parseImage,
(req, res) => {
console.log(req.body);
let deepClone = JSON.parse(JSON.stringify(req.body));
console.log(req.file);
if (req.file != undefined) {
deepClone.pictureURL = req.file.path;
uploader.upload(req.file.encodedUri)
.then((result) => {
deepClone.pictureURL = result.url;
});
}
deepClone.cafe_id = req.user._id;
if (deepClone.availability !== undefined) {
Expand Down Expand Up @@ -177,8 +195,7 @@ router.patch(
router.put(
"/:dish_id/onlyImage/",
ensureCafe,
upload.single("dishImage"),
async(req, res) => {
upload.single("dishImage"), parseImage, async(req, res) => {
try {
let workingMenu = await Menu.findOne({
cafe_id: req.user._id,
Expand All @@ -196,7 +213,10 @@ router.put(
});
}
if (req.file != undefined) {
workingDish.pictureURL = req.file.path;
uploader.upload(req.file.encodedUri)
.then((result) => {
workingDish.pictureURL = result.url;
});
}
let newMenu = await workingMenu.save();
res.status(200).json({
Expand Down
78 changes: 62 additions & 16 deletions routes/api_profile.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@ const Cafe = require('../models/Cafe').Cafe;
const upload = require('../config/multer_support')
const authService = require('../services/authService_user');
const jwt = require('jsonwebtoken');

//working api route is /api/profile
const {
cloudinaryConfig,
uploader,
parseImage
} = require('../config/cloudinary_support')
//working api route is /api/profile

//get request to working api sends back the user document currently logged in
//if not logged in sends 401
Expand Down Expand Up @@ -136,11 +140,29 @@ router.post('/register/images', upload.fields([{
let workingCafe = await Cafe.findOne({
_id: req.user._id
});
const Datauri = require('datauri');
if (req.files.logoImage !== undefined) {
workingCafe.logoURL = req.files.logoImage[0].path

const datauri = new Datauri();
datauri.format(path.extname(req.files.logoImage[0].originalname).toString(), req.files.logoImage[0].buffer);
uploader.upload(datauri.content)
.then((result) => {
workingCafe.logoURL = result.url;
})
.catch(err => res.status(500).json({
error: 'Could not upload'
}))
}
if (req.files.cafeImage !== undefined) {
workingCafe.imageURL = req.files.cafeImage[0].path
let datauri1 = new Datauri();
datauri1.format(path.extname(req.files.cafeImage[0].originalname).toString(), req.files.cafeImage[0].buffer);
uploader.upload(datauri1.content)
.then((result) => {
workingCafe.imageURL = result.url;
})
.catch(err => res.status(500).json({
error: 'Could not upload'
}))
}
try {
let savedCafe = await workingCafe.save();
Expand Down Expand Up @@ -220,6 +242,30 @@ router.post('/register/cafe/withImage', upload.fields([{
})
} else {
console.log('registering Cafe ', req.body);
let logoURL, imageURL;
if (req.files.logoImage !== undefined) {

const datauri = new Datauri();
datauri.format(path.extname(req.files.logoImage[0].originalname).toString(), req.files.logoImage[0].buffer);
uploader.upload(datauri.content)
.then((result) => {
logoURL = result.url;
})
.catch(err => res.status(500).json({
error: 'Could not upload'
}))
}
if (req.files.cafeImage !== undefined) {
let datauri1 = new Datauri();
datauri1.format(path.extname(req.files.cafeImage[0].originalname).toString(), req.files.cafeImage[0].buffer);
uploader.upload(datauri1.content)
.then((result) => {
imageURL = result.url;
})
.catch(err => res.status(500).json({
error: 'Could not upload'
}))
}

var newAcc = new Cafe({
name: req.body.name,
Expand All @@ -231,8 +277,8 @@ router.post('/register/cafe/withImage', upload.fields([{
role: 'Cafe',
description: req.body.description,
password: bcrypt.hashSync(req.body.password, 10),
logoURL: req.files.logoImage !== undefined ? req.files.logoImage[0].path : '',
imageURL: req.files.cafeImage !== undefined ? req.files.cafeImage[0].path : '',
logoURL,
imageURL,
})

try {
Expand Down Expand Up @@ -265,16 +311,16 @@ router.post('/login/cafe', passport.authenticate('local', {
authService.signToken(req, res);
})
//checks whether a user(User or Cafe) is logged in or not
/*router.get('/check', (req, res) => {
console.log('checking');
if (req.user) {
res.status.json({
user: req.user
});
} else {
res.sendStatus(404);
}
})*/
/*router.get('/check', (req, res) => {
console.log('checking');
if (req.user) {
res.status.json({
user: req.user
});
} else {
res.sendStatus(404);
}
})*/
//allows User login using google oauth 2 (login only if from iiti domain name)
// router.get('/login/user',
// passport.authenticate("google", {
Expand Down

0 comments on commit 110ba48

Please sign in to comment.