UNPKG

authbase

Version:

AuthBase client library

98 lines (78 loc) 3.52 kB
var Emitter = require('component-emitter'), serializer = require('form-serialize'), registerForms = require('./registerForms'); messenger = require('./messenger'); var AuthBase = function AuthBase() {}; AuthBase.init = function init(appId, remote) { // Set up messaging AuthBase.messenger = messenger(appId, remote, onReady, onMessage); // Register custom tags registerForms(onSubmit); function onSubmit(type) { return function(form) { var message = form.querySelector('.authbase-message'); message.className = 'authbase-message'; message.textContent = ''; AuthBase.messenger.send(type, serializer(form, { hash: true }), form.name); }; } // Handle form response function onMessage(data) { // Update the form with the results of the request var form = document.forms[data.form]; if (form) { var message = form.querySelector('.authbase-message'); message.className += (data.success ? ' success' : ' error'); message.textContent = data.message; } // Update user tokens if (data.user_token) localStorage.setItem('authbase-user-token', data.user_token); if (data.refresh_token) localStorage.setItem('authbase-refresh-token', data.refresh_token); // Emit an event if the action was successful, unless it was a logout if (data.success && data.type !== 'logout') { AuthBase.emit(data.type, data.payload); } } // Restore a session if one already exists when the message bus is ready function onReady() { var userToken = localStorage.getItem('authbase-user-token'); var refreshToken = localStorage.getItem('authbase-refresh-token'); if (userToken && refreshToken) { AuthBase.messenger.send('restore', { userToken: userToken, refreshToken: refreshToken }); } } }; AuthBase.isLoggedIn = function() { return !!localStorage.getItem('authbase-user-token') && !!localStorage.getItem('authbase-refresh-token'); }; // Logout the user AuthBase.logout = function() { var finalize = function() { localStorage.removeItem('authbase-user-token'); localStorage.removeItem('authbase-refresh-token'); AuthBase.offLogout(finalize); }; // Send the logout event to the server, but instead of waiting // for a response, immediately emit the logout event handler. AuthBase.onLogout(finalize); AuthBase.messenger.send('logout'); AuthBase.emit('logout'); }; // Event Handlers AuthBase.onChangeEmail = function(callback) { AuthBase.on('change-email', callback); }; AuthBase.offChangeEmail = function(callback) { AuthBase.off('change-email', callback); }; AuthBase.onChangePassword = function(callback) { AuthBase.on('change-password', callback); }; AuthBase.offChangePassword = function(callback) { AuthBase.off('change-password', callback); }; AuthBase.onLogin = function(callback) { AuthBase.on('login', callback); }; AuthBase.offLogin = function(callback) { AuthBase.off('login', callback); }; AuthBase.onLogout = function(callback) { AuthBase.on('logout', callback); }; AuthBase.offLogout = function(callback) { AuthBase.off('logout', callback); }; AuthBase.onResetPassword = function(callback) { AuthBase.on('reset-password', callback); }; AuthBase.offResetPassword = function(callback) { AuthBase.off('reset-password', callback); }; AuthBase.onSignup = function(callback) { AuthBase.on('signup', callback); }; AuthBase.offSignup = function(callback) { AuthBase.off('signup', callback); }; module.exports = Emitter(AuthBase);