formiojs-backend
Version:
Form.io JS library re-written for backend node.js use
246 lines (219 loc) • 10.6 kB
JavaScript
;
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _jsonwebtoken = require('jsonwebtoken');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var _ = require('lodash');
var _request = require('request');
var Q = require('q');
var Formio = function () {
function Formio(path, jwtSecret) {
_classCallCheck(this, Formio);
this._jwtSecret = jwtSecret;
this._baseUrl = path;
this._token = '';
}
_createClass(Formio, [{
key: 'loadSubmissions',
value: function loadSubmissions(form, query) {
var _this = this;
return new Promise(function (resolve, reject) {
try {
var uri = '';
var url = _this._baseUrl + '/' + form + '/submission';
if (query !== {} && query !== null) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = Object.entries(query)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _step$value = _slicedToArray(_step.value, 2),
key = _step$value[0],
value = _step$value[1];
uri = uri + key + '=' + value + '&';
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
uri = uri.slice(0, -1);
url = _this._baseUrl + '/' + form + '/submission?' + uri;
}
_this.request('get', url, null).then(function (response) {
if (response.length !== 0) {
return resolve(response['body']);
} else {
throw Error('no results found');
}
});
} catch (e) {
console.log(e);
return reject();
}
});
}
}, {
key: 'loadSubmission',
value: function loadSubmission(form, id) {
var _this2 = this;
return new Promise(function (resolve, reject) {
try {
_this2.request('get', _this2._baseUrl + '/' + form + '/submission/' + id).then(function (response) {
if (response.length !== 0) {
return resolve(response['body']);
} else {
throw Error('no results found');
}
});
} catch (e) {
console.log(e);
return reject();
}
});
}
}, {
key: 'saveSubmission',
value: function saveSubmission(form, submission, id) {
var _this3 = this;
return new Promise(function (resolve, reject) {
try {
var url = _this3._baseUrl + '/' + form + '/submission';
if (id) url = url + '/' + id;
_this3.request(id ? 'put' : 'post', url, submission).then(function (response) {
return resolve(response['body']);
});
} catch (e) {
console.log(e);
}
});
}
}, {
key: 'request',
value: function request(method, url, data) {
var deferred = Q.defer();
method = method || 'get';
var headers = _.defaults(headers || {}, {
'Accept': 'application/json',
'Content-Type': 'application/json'
});
if (!headers.hasOwnProperty('x-jwt-token') && this._token) {
headers['x-jwt-token'] = this._token;
}
var options = {
method: method.toUpperCase(),
url: url,
rejectUnauthorized: false,
headers: headers,
json: true
};
if (data) {
options.body = data;
}
// Execute the request.
try {
_request(options, function (err, response) {
if (err) {
return deferred.reject(err);
}
// Fail for anything other than 200 status code.
if (parseInt(response.statusCode / 100, 10) !== 2) {
var err = new Error(response.body);
err.response = response;
return deferred.reject(err);
}
deferred.resolve(response);
});
} catch (err) {
deferred.reject(err);
}
return deferred.promise;
}
}, {
key: 'setUser',
value: function setUser(username) {
var _this4 = this;
return new Promise(function (resolve, reject) {
_this4.loadSubmissions('admin', { 'data.username': username }).then(function (submissions) {
if (submissions.length !== 0) {
var payload = {
'form': {
'_id': submissions[0].form._id
},
'user': {
'_id': submissions[0]._id
},
'exp': Math.round(new Date().getTime() / 1000 + 28800)
};
var secret = _this4._jwtSecret;
_this4._token = (0, _jsonwebtoken.sign)(payload, secret);
resolve(submissions[0]);
}
});
});
}
}, {
key: 'exists',
value: function exists(form, query) {
var _this5 = this;
return new Promise(function (resolve, reject) {
try {
var uri = '';
var url = _this5._baseUrl + '/' + form + '/exists?';
if (query !== {} && query !== null) {
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = Object.entries(query)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _step2$value = _slicedToArray(_step2.value, 2),
key = _step2$value[0],
value = _step2$value[1];
uri = uri + key + '=' + value + '&';
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
uri = uri.slice(0, -1);
url = url + uri;
_this5.request('get', url, null).then(function (response) {
if (response.length !== 0) {
return resolve(response['body']);
} else {
throw Error('no results found');
}
}).catch(function (error) {
return reject(error['response'].statusMessage);
});
} else {
throw Error('no query provided');
}
} catch (e) {
return reject(e);
}
});
}
}]);
return Formio;
}();
module.exports = Formio;