From 3a23527859b49c32822871acf383ee36385584c1 Mon Sep 17 00:00:00 2001 From: Moritz Scheider <moritzschneider@bluewin.ch> Date: Sat, 3 Jun 2017 13:53:43 +0200 Subject: [PATCH] Updated amivcore.js --- index.html | 2 +- lib/amiv/amivcore.js | 141 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 114 insertions(+), 29 deletions(-) diff --git a/index.html b/index.html index 0827856..6d524ee 100644 --- a/index.html +++ b/index.html @@ -32,7 +32,7 @@ <script src="lib/bootstrap/js/bootstrap.min.js"></script> <script> // set the api url for the amivcore js library - var api_url_config = "https://amiv-apidev.vsos.ethz.ch"; + var api_url_config = "https://amiv-api.ethz.ch"; var spec_url_config = "lib/amiv/spec.json"; </script> <script src="lib/amiv/amivcore.js"></script> diff --git a/lib/amiv/amivcore.js b/lib/amiv/amivcore.js index 453ad2e..c49b0b7 100644 --- a/lib/amiv/amivcore.js +++ b/lib/amiv/amivcore.js @@ -35,8 +35,9 @@ return 'application/json' }, 'Authorization': function() { - if (get('cur_token') != null) - return 'Basic ' + btoa(get('cur_token') + ':'); + var token = get('cur_token'); + if (token != null) + return token; return ''; }, 'If-Match': function() { @@ -77,8 +78,12 @@ * @param {string} cname * @param {string} cvalue */ - function set(cname, cvalue, exdays) { - window.localStorage.setItem('glob-' + cname, cvalue); + function set(cname, cvalue) { + if (lib.shortSession) { + window.sessionStorage.setItem('glob-' + cname, cvalue); + } + else + window.localStorage.setItem('glob-' + cname, cvalue); } /** @@ -87,7 +92,10 @@ * @param {string} cname */ function get(cname) { - return window.localStorage.getItem('glob-' + cname); + if (lib.shortSession) + return window.sessionStorage.getItem('glob-' + cname); + else + return window.localStorage.getItem('glob-' + cname); } /** @@ -95,23 +103,55 @@ * @param {string} cname */ function remove(cname) { - if (window.localStorage.getItem('gloc-' + cname) === null) - window.localStorage.removeItem('glob-' + cname); + if (lib.shortSession) { + if (window.sessionStorage.getItem('glob-' + cname) !== null) + window.sessionStorage.removeItem('glob-' + cname); + } + else { + if (window.localStorage.getItem('glob-' + cname) !== null) + window.localStorage.removeItem('glob-' + cname); + } } - /** - * Make general request with all request parameters in attr + + /** + * Make JSON request with all request parameters in attr * @constructor * @param {} attr - all request parameters (attr.path, attr.data, attr.method ...) * @param {} callback */ function req(attr, callback) { + callback = callback || function(msg) { + console.log(msg); + }; + $.ajax({ + url: core.lib.api_url + attr.path, + data: JSON.stringify(attr.data), + method: attr.method, + dataType: "json", + timeout: core.lib.req_time_out, + headers: attr.headers, + error: function(res) { + if (core.lib.show_errors) console.log(res); + callback(res); + }, + }).done(function(res) { + callback(res); + }); + } + + /** + * Make FormData request with all request parameters in attr + * @constructor + * @param {} attr - all request parameters (attr.path, attr.data, attr.method ...) + * @param {} callback + */ + function reqFormData(attr, callback) { callback = callback || function(msg) { console.log(msg); }; // put the json object into form-data var form = new FormData(); - console.log(attr); for (var key in attr['data']) form.append(key, attr['data'][key]); $.ajax({ @@ -162,6 +202,23 @@ curLink += '/{_id}'; } + // handle where, sort, projection, embedded + var urlParams = ""; + var urlTypes = ['where', 'sort', 'projection', 'embedded']; + if (m === 'GET') { + for (var curUrlType of urlTypes) { + if (attr[curUrlType] != undefined) { + urlParams += ((urlParams != "") ? "&" + curUrlType + "=": curUrlType + "="); + if (typeof attr[curUrlType] === 'object') + urlParams += JSON.stringify(attr[curUrlType]); + else + urlParams += attr[curUrlType]; + } + } + } + // append urlParams + curPath += "?" + urlParams; + if (get('cur_token') != null) hdr['Authorization'] = 'Basic ' + btoa(get('cur_token') + ':'); @@ -174,12 +231,22 @@ // hdr['Content-Type'] = 'application/json'; // curLib = JSON.stringify(curLib); } - req({ - path: curPath, - method: m, - data: curLib, - headers: hdr, - }, callback); + if (m != 'POST' && m != 'PATCH') { + req({ + path: curPath, + method: m, + data: curLib, + headers: hdr, + }, callback); + } + else { + reqFormData({ + path: curPath, + method: m, + data: curLib, + headers: hdr, + }, callback); + } return true; }; } @@ -271,6 +338,18 @@ return tmp; } + /** + * Get the time converted to the format the api understands + * @param {Date} d - date. If none is given then the NOW is used + * @example + * amivcore.getTime() // "2016-12-20T14:12:55Z" + * amivcore.getTime(new Date(2011, 0, 1, 2, 3, 4, 567)) // "2011-01-01T01:03:04Z" + */ + lib.getTime = function(d) { + d = d || new Date(); + return core.adapter['datetime'](d.toISOString()); + } + /** * Get the etag * @constructor @@ -299,21 +378,23 @@ } /** - * Login function - * @constructor - * @param {} curUser - * @param {} curPass - * @param {} callback + * Login function + * @constructor + * @param {String} curUser + * @param {String} curPass + * @param {function} callback + * @param {boolean} shortSession - if user is on a public computer */ - lib.login = function(curUser, curPass, callback) { + lib.login = function(curUser, curPass, callback, shortSession = false) { + lib.shortSession = shortSession || false; callback = callback || dummy; req({ path: '/sessions/', method: 'POST', - data: JSON.stringify({ + data: { username: curUser.toLowerCase(), password: curPass - }), + }, headers: { 'Content-Type': 'application/json', }, @@ -323,14 +404,16 @@ lib['cur_' + reqVar[i]] = msg[reqVar[i]]; } if (msg['_status'] == 'OK') { - set('cur_token_id', msg['_id'], 1); - set('cur_token', msg['token'], 1); - set('cur_user_id', msg['user'], 1); + set('cur_token_id', msg['_id']); + set('cur_token', msg['token']); + set('cur_user_id', msg['user']); + set('cur_session_etag', msg['_etag']); callback(true); } else { remove('cur_token_id'); remove('cur_token'); remove('cur_user_id'); + remove('cur_session_etag'); callback(false); } }); @@ -343,11 +426,13 @@ lib.logout = function() { // Deleting token from api and unsetting the vars lib.sessions.DELETE({ - id: get('cur_token_id') + id: get('cur_token_id'), + header: {"if-match": get('cur_session_etag')} }, function(res) { remove('cur_token'); remove('cur_token_id'); remove('cur_user_id'); + remove('cur_session_etag'); }); } -- GitLab