soma.js
Version:
soma.js is a javascript framework created to build scalable and maintainable applications.
93 lines (79 loc) • 2.13 kB
JavaScript
;(function(sniply, undefined) {
'use strict';
// package
sniply.models = sniply.models || {};
var UserModel = function (injector, dispatcher, api, queue, utils, config) {
var storeKey = config.storeKey.user,
url = config.oauthCallback,
user = getStore(),
popup;
if (user) {
dispatcher.dispatch(sniply.events.NOTIFY, "Welcome back " + user.github.name + '.');
}
getUserFromAPI();
function setStore() {
amplify.store(storeKey, user || null);
}
function getStore() {
return amplify.store(storeKey);
}
function setUser(value) {
user = value;
setStore();
dispatcher.dispatch(sniply.events.SYNC);
}
function getUserFromAPI() {
if (!user || !navigator.onLine) {
return;
}
queue.add(api, 'getUser', [user.accessToken, user._id], function(data) {
setUser(data);
}, function(err) {
console.log('Error getting the user', err);
});
}
return {
signin: function(callback) {
if (popup) {
popup.close();
popup = null;
}
var id = utils.uuid();
popup = window.open(url + '?uuid=' + id, 'SignIn', 'width=985,height=685,personalbar=0,toolbar=0,scrollbars=1,resizable=1');
popup.onunload = function () {
queue.add(api, 'getOauthUser', [id], function(data) {
if (data.error) console.log('Error getting the current user', data);
else {
setUser(data);
dispatcher.dispatch(sniply.events.RENDER_NAV);
dispatcher.dispatch(sniply.events.NOTIFY, "User logged in. Welcome " + data.github.name + '.');
}
}, function(err) {
console.log('Error getting the current user', err);
});
};
},
getAccessToken: function() {
if (!user) {
return undefined;
}
return user.accessToken;
},
getUser: function() {
return user;
},
isSignedIn: function() {
return user !== undefined && user !== null;
},
updateUserApiSnippets: function(value) {
user.snippets = value;
setStore();
},
clear: function() {
setUser(null);
}
};
};
// exports
sniply.models.UserModel = UserModel;
})(window.sniply = window.sniply || {});