// Interface to server
|
|
define(["settings"], function(preferences) {
|
|
|
|
var server = {};
|
|
|
|
// Set header util
|
|
var setHeader = function(request, token) {
|
|
request.setHeaders({ 'x-key' : token.x_key, 'x-access-token' : token.access_token });
|
|
}
|
|
|
|
// Get error code util
|
|
var getErrorCode = function(response) {
|
|
if (!response || !response.xhrResponse || !response.xhrResponse.body) {
|
|
return 404;
|
|
}
|
|
try {
|
|
var body = JSON.parse(response.xhrResponse.body);
|
|
return body.code;
|
|
} catch(e) {
|
|
return 500;
|
|
}
|
|
}
|
|
|
|
// Session expired
|
|
var sessionExpired = function() {
|
|
if (util.getClientType() == constant.webAppType) {
|
|
// For web app, force deconnection
|
|
util.cleanDatastore(null, function() {
|
|
util.restartApp();
|
|
});
|
|
return true;
|
|
} else {
|
|
// For app, display a message and mark token expired
|
|
window.setTimeout(function() {
|
|
humane.log(l10n.get("SessionExpired"));
|
|
if (app.toolbar && app.toolbar.showServerWarning) {
|
|
app.toolbar.showServerWarning(true);
|
|
}
|
|
}, 500);
|
|
var token = preferences.getToken();
|
|
token.expired = true;
|
|
preferences.setToken(token);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Retrieve current server name
|
|
server.getServer = function() {
|
|
var info = preferences.getServer();
|
|
if (info != null && info.url) {
|
|
return info.url;
|
|
}
|
|
return (util.getClientType() == constant.webAppType) ? util.getCurrentServerUrl() : constant.http + "localhost";
|
|
}
|
|
|
|
// Retrieve current server URL
|
|
server.getServerUrl = function() {
|
|
var serverUrl = server.getServer();
|
|
if (serverUrl.length && serverUrl[serverUrl.length-1] == '/') {
|
|
serverUrl = serverUrl.substr(0, serverUrl.length-1);
|
|
}
|
|
return serverUrl;
|
|
}
|
|
|
|
// Get URL to retrieve activities from server
|
|
server.getActivitiesUrl = function() {
|
|
var params = preferences.getToken();
|
|
if (!params) {
|
|
sessionExpired();
|
|
return "";
|
|
}
|
|
return server.getServerUrl() + constant.dynamicInitActivitiesURL + "?x_key="+params.x_key+"&access_token="+params.access_token;
|
|
}
|
|
|
|
// Get server information
|
|
server.getServerInformation = function(serverurl, response, error) {
|
|
var serverUrl = serverurl;
|
|
if (serverUrl.length && serverUrl[serverurl.length-1] == '/') {
|
|
serverUrl = serverUrl.substr(0, serverUrl.length-1);
|
|
}
|
|
var ajax = new enyo.Ajax({
|
|
url: serverUrl + constant.serverInformationURL,
|
|
method: "GET",
|
|
handleAs: "json"
|
|
});
|
|
ajax.response(function(inSender, inResponse) {
|
|
if (response) response(inSender, inResponse);
|
|
});
|
|
ajax.error(function(inResponse) {
|
|
if (error) error(inResponse, getErrorCode(inResponse));
|
|
});
|
|
ajax.go();
|
|
}
|
|
|
|
// Get activities
|
|
server.getActivities = function(response, error) {
|
|
var ajax = new enyo.Ajax({
|
|
url: server.getServerUrl() + constant.dynamicInitActivitiesURL,
|
|
method: "GET",
|
|
handleAs: "json"
|
|
});
|
|
setHeader(ajax, preferences.getToken());
|
|
ajax.response(function(inSender, inResponse) {
|
|
var newResponse = {data: inResponse};
|
|
if (response) response(inSender, newResponse);
|
|
});
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
ajax.go();
|
|
}
|
|
|
|
// Get user information
|
|
server.getUser = function(userId, response, error, optserver) {
|
|
var ajax = new enyo.Ajax({
|
|
url: (optserver ? optserver : server.getServerUrl()) + constant.initNetworkURL + userId,
|
|
method: "GET",
|
|
handleAs: "json"
|
|
});
|
|
setHeader(ajax, preferences.getToken());
|
|
ajax.response(response);
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
ajax.go();
|
|
}
|
|
|
|
// Create a new user
|
|
server.postUser = function(user, response, error) {
|
|
var ajax = new enyo.Ajax({
|
|
url: server.getServerUrl() + constant.signupURL,
|
|
method: "POST",
|
|
handleAs: "json",
|
|
postBody: {
|
|
user: JSON.stringify(user)
|
|
}
|
|
});
|
|
ajax.response(function(inSender, inResponse) {
|
|
var newuser = {"name": user.name, "password": user.password};
|
|
server.loginUser(newuser, function(loginSender, loginResponse) {
|
|
preferences.setToken({'x_key': inResponse._id, 'access_token': loginResponse.token});
|
|
});
|
|
if (response) response(inSender, inResponse);
|
|
});
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
ajax.go();
|
|
}
|
|
|
|
// Create a new user
|
|
server.loginUser = function(user, response, error) {
|
|
var ajax = new enyo.Ajax({
|
|
url: server.getServerUrl() + constant.loginURL,
|
|
method: "POST",
|
|
handleAs: "json",
|
|
postBody: {
|
|
user: JSON.stringify(user)
|
|
}
|
|
});
|
|
ajax.response(response);
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
ajax.go();
|
|
}
|
|
|
|
// Update user
|
|
server.putUser = function(userId, settings, response, error) {
|
|
var ajax = new enyo.Ajax({
|
|
url: server.getServerUrl() + constant.initNetworkURL + userId,
|
|
method: "PUT",
|
|
handleAs: "json",
|
|
postBody: {
|
|
user: JSON.stringify(settings)
|
|
}
|
|
});
|
|
setHeader(ajax, preferences.getToken());
|
|
ajax.response(response);
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
ajax.go();
|
|
}
|
|
|
|
// Get journal content optionally filter by typeactivity, time, favorite, ...
|
|
server.getJournal = function(journalId, request, response, error) {
|
|
var typeactivity = request.typeactivity;
|
|
var stime = request.stime;
|
|
var favorite = request.favorite;
|
|
var field = request.field;
|
|
var limit = request.limit;
|
|
var offset = request.offset;
|
|
var title = request.title;
|
|
var sort = request.sort;
|
|
var url = server.getServerUrl() + constant.sendCloudURL + journalId + "?limit="+limit;
|
|
var params = {};
|
|
if (typeactivity !== undefined) {
|
|
params.aid = typeactivity;
|
|
}
|
|
if (stime !== undefined) {
|
|
params.stime = stime;
|
|
}
|
|
if (favorite !== undefined) {
|
|
params.favorite = favorite;
|
|
}
|
|
if (offset !== undefined) {
|
|
params.offset = offset;
|
|
}
|
|
if (title !== undefined) {
|
|
params.title = title;
|
|
}
|
|
if (sort !== undefined) {
|
|
params.sort = sort;
|
|
} else {
|
|
params.sort = "-timestamp";
|
|
}
|
|
var ajax = new enyo.Ajax({
|
|
url: url,
|
|
method: "GET",
|
|
handleAs: "json"
|
|
});
|
|
setHeader(ajax, preferences.getToken());
|
|
ajax.response(response);
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
ajax.go(params);
|
|
}
|
|
|
|
// Get an entry in a journal
|
|
server.getJournalEntry = function(journalId, objectId, response, error) {
|
|
var params = {};
|
|
var ajax = new enyo.Ajax({
|
|
url: server.getServerUrl() + constant.sendCloudURL + journalId,
|
|
method: "GET",
|
|
handleAs: "json"
|
|
});
|
|
params.oid = objectId;
|
|
params.fields="text,metadata";
|
|
setHeader(ajax, preferences.getToken());
|
|
ajax.response(response);
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
ajax.go(params);
|
|
}
|
|
|
|
// Add an entry in a journal
|
|
server.postJournalEntry = function(journalId, entry, response, error) {
|
|
var token = preferences.getToken();
|
|
entry.metadata.user_id = token.x_key;
|
|
var ajax = new enyo.Ajax({
|
|
url: server.getServerUrl() + constant.sendCloudURL + journalId,
|
|
method: "POST",
|
|
handleAs: "json",
|
|
postBody: {
|
|
journal: JSON.stringify(entry)
|
|
}
|
|
});
|
|
setHeader(ajax, token);
|
|
ajax.response(response);
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
ajax.go();
|
|
}
|
|
|
|
// Update an entry in a journal
|
|
server.putJournalEntry = function(journalId, objectId, entry, response, error) {
|
|
var params = {};
|
|
var token = preferences.getToken();
|
|
entry.metadata.user_id = token.x_key;
|
|
var ajax = new enyo.Ajax({
|
|
url: server.getServerUrl() + constant.sendCloudURL + journalId,
|
|
method: "PUT",
|
|
handleAs: "json",
|
|
postBody: {
|
|
journal: JSON.stringify(entry)
|
|
}
|
|
});
|
|
setHeader(ajax, token);
|
|
ajax.response(response);
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
params.oid = objectId;
|
|
ajax.go(params);
|
|
}
|
|
|
|
// Delete an entry in a journal
|
|
server.deleteJournalEntry = function(journalId, objectId, response, error) {
|
|
var params = {};
|
|
var ajax = new enyo.Ajax({
|
|
url: server.getServerUrl() + constant.sendCloudURL + journalId,
|
|
method: "DELETE",
|
|
handleAs: "json"
|
|
});
|
|
setHeader(ajax, preferences.getToken());
|
|
ajax.response(response);
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (code == 3) {
|
|
if (sessionExpired()) {
|
|
return;
|
|
}
|
|
}
|
|
if (error) error(inResponse, code);
|
|
});
|
|
params.oid = objectId;
|
|
params.type = 'partial';
|
|
ajax.go(params);
|
|
}
|
|
|
|
// Create a new user
|
|
server.postStats = function(stats, response, error) {
|
|
var ajax = new enyo.Ajax({
|
|
url: server.getServerUrl() + constant.statsURL,
|
|
method: "POST",
|
|
handleAs: "json",
|
|
postBody: {
|
|
stats: JSON.stringify(stats)
|
|
}
|
|
});
|
|
setHeader(ajax, preferences.getToken());
|
|
ajax.response(function(inSender, inResponse) {
|
|
if (response) response(inSender, inResponse);
|
|
});
|
|
ajax.error(function(inResponse) {
|
|
var code = getErrorCode(inResponse);
|
|
if (error) error(inResponse, code);
|
|
});
|
|
ajax.go();
|
|
}
|
|
|
|
return server;
|
|
});
|