app/core/authentication.js (35 lines of code) (raw):

// Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. import FauxtonAPI from "./base"; import Promise from 'bluebird'; export const authenticate = (session, roles) => { if (session.isAdminParty()) { return true; } else if (session.matchesRoles(roles)) { return true; } throw new Error('Unable to authenticate'); }; export const authenticationDenied = () => { let url = window.location.hash .replace('#', '') .replace('login?urlback=', ''); if (url) { FauxtonAPI.navigate(`/login?urlback=${url}`, { replace: true }); } FauxtonAPI.navigate(`/login`, { replace: true }); }; export const checkAccess = (roles = []) => { return new Promise((resolve, reject) => { return FauxtonAPI.session.getSession() .then(() => { if (authenticate(FauxtonAPI.session, roles)) { resolve(); return; } reject(); }) .catch(err => { reject(err); authenticationDenied(); }); }); };