all files / dist/routes/ endpoints.js

93.65% Statements 59/63
83.33% Branches 20/24
100% Functions 8/8
93.55% Lines 58/62
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147                                                  11× 11×                                                                                                                                
'use strict';
 
var _express = require('express');
 
var _express2 = _interopRequireDefault(_express);
 
var _jsonpatch = require('jsonpatch');
 
var _path = require('path');
 
var _fs = require('fs');
 
var _resize = require('../imgutils/resize.js');
 
var _jsonwebtoken = require('jsonwebtoken');
 
var _request = require('request');
 
var _request2 = _interopRequireDefault(_request);
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
var router = _express2.default.Router();
 
/**
 * It authenticate json_patching and thumbnail_generation api
 * @name Api Authentications
 * @param {object} req contains headers
 * @param {object} res contains the decoded username and password
 * @param {function} next
 */
 
// ###################################################################################
//                           API VALIDATIONS
// ###################################################################################
router.use('/', function (req, res, next) {
  // decode token
  var token = req.headers.authorization;
  if (token) {
    // verifies secret and checks exp
    (0, _jsonwebtoken.verify)(token, 'anil', function (err, decoded) {
      if (err) {
        return res.status(403).send({ message: 'Not authenticated' });
      } else {
        // if everything is good, save to request for use in other routes
        req.decoded = decoded;
        next();
      }
    });
  } else {
    return res.status(403).send({
      success: false,
      message: 'No token provided.'
    });
  }
});
 
// ################################################################################
 
//                          API FOR JSON_PATCHING
 
// ################################################################################
 
/**
 * Api to apply json patch on json object and Update json
 * @name Json-Patching
 * @param {object} req contains jsonObject and Patch
 * @param {object} res give patchedDocument op json
 * @param {function} next
 */
 
router.post('/patch', function (req, res, next) {
  Iif (typeof req.body.jsonObject === 'undefined') {
    res.statusCode = 400;
    res.json({ 'message': 'missing jsonObject' });
  } else if (typeof req.body.Patch === 'undefined') {
    res.statusCode = 400;
    res.json({ 'message': 'missing patch operations' });
  } else {
    var jsonObject = req.body.jsonObject;
    var operation = req.body.Patch;
    try {
      var patchDocument = (0, _jsonpatch.apply_patch)(jsonObject, operation);
      res.statusCode = 200;
      res.json({ patch: patchDocument });
    } catch (e) {
      res.statusCode = 400;
      res.json({ 'message': 'wrong patch operations' });
    }
  }
});
 
// ####################################################################################
 
//                    API FOR THUMBNAIL_GENERATIONS
 
// ####################################################################################
/**
 * Create thumbnail of image
 * @name Thumbnail-Generation
 * @param {object} req contains the url of image
 * @param {object} res gives the thumnail image of 50*50 size
 * @param {function} next
 */
//
router.post('/thumbnail', function (req, res, next) {
  if (typeof req.query.imageUrl !== 'undefined') {
    var imageUrl = req.query.imageUrl;
    _request2.default.head(imageUrl, function (err, response, body) {
      Iif (err) {
        next(err);
      } else {
        var contentType = response.headers['content-type'].substring(0, 5);
        var imgFormat = response.headers['content-type'].substring(6);
        var date = response.headers['date'].split(' ').join('_');
        if (response.statusCode === 200 && contentType === 'image') {
          if (response.headers['content-length'] <= 10 * 1024 * 1024) {
            var originalLocation = (0, _path.resolve)((0, _path.join)(baseDirectory, 'img')) + '/original_' + date + '.' + imgFormat;
            var thumbnailLocation = (0, _path.resolve)((0, _path.join)(baseDirectory, 'img')) + '/thumbnail_' + date + '.' + imgFormat;
            var stream = _request2.default.get(imageUrl).pipe((0, _fs.createWriteStream)(originalLocation));
            stream.on('finish', function () {
              (0, _resize.thumbnailSize)(originalLocation, thumbnailLocation, function (err, out) {
                Iif (err) {
                  next(err);
                } else {
                  res.writeHead(200, { 'content-type': response.headers['content-type'], 'Connection': 'close' });
                  res.end((0, _fs.readFileSync)(thumbnailLocation), 'binary');
                }
              });
            });
          } else {
            res.status(400);
            res.json({ message: 'image exceeds than 10 MB' });
          }
        } else {
          res.status(400);
          res.json({ message: 'image not found' });
        }
      }
    });
  } else {
    res.status(400);
    res.json({ message: 'url not found' });
  }
});
 
module.exports = router;