| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441 | const Backbone = require('backbone');const Cache    = require('./cache');const Tokens   = require('./tokens');module.exports = {	/**	 * @param {String} route	 * @param {Object} [options]	 * @returns {Boolean}	 */	navigate: function (route, options) {		options = options || {};		Backbone.history.navigate(route.toString(), options);		return true;	},	/**	 * Login	 */	showLogin: function () {		window.location = '/login';	},	/**	 * Users	 */	showUsers: function () {		const controller = this;		if (Cache.User.isAdmin()) {			require(['./main', './users/main'], (App, View) => {				controller.navigate('/users');				App.UI.showAppContent(new View());			});		} else {			this.showDashboard();		}	},	/**	 * User Form	 *	 * @param [model]	 */	showUserForm: function (model) {		if (Cache.User.isAdmin()) {			require(['./main', './user/form'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * User Permissions Form	 *	 * @param model	 */	showUserPermissions: function (model) {		if (Cache.User.isAdmin()) {			require(['./main', './user/permissions'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * User Password Form	 *	 * @param model	 */	showUserPasswordForm: function (model) {		if (Cache.User.isAdmin() || model.get('id') === Cache.User.get('id')) {			require(['./main', './user/password'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * User Delete Confirm	 *	 * @param model	 */	showUserDeleteConfirm: function (model) {		if (Cache.User.isAdmin() && model.get('id') !== Cache.User.get('id')) {			require(['./main', './user/delete'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Dashboard	 */	showDashboard: function () {		const controller = this;		require(['./main', './dashboard/main'], (App, View) => {			controller.navigate('/');			App.UI.showAppContent(new View());		});	},	/**	 * Nginx Proxy Hosts	 */	showNginxProxy: function () {		if (Cache.User.isAdmin() || Cache.User.canView('proxy_hosts')) {			const controller = this;			require(['./main', './nginx/proxy/main'], (App, View) => {				controller.navigate('/nginx/proxy');				App.UI.showAppContent(new View());			});		}	},	/**	 * Nginx Proxy Host Form	 *	 * @param [model]	 */	showNginxProxyForm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('proxy_hosts')) {			require(['./main', './nginx/proxy/form'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Proxy Host Delete Confirm	 *	 * @param model	 */	showNginxProxyDeleteConfirm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('proxy_hosts')) {			require(['./main', './nginx/proxy/delete'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Nginx Redirection Hosts	 */	showNginxRedirection: function () {		if (Cache.User.isAdmin() || Cache.User.canView('redirection_hosts')) {			const controller = this;			require(['./main', './nginx/redirection/main'], (App, View) => {				controller.navigate('/nginx/redirection');				App.UI.showAppContent(new View());			});		}	},	/**	 * Nginx Redirection Host Form	 *	 * @param [model]	 */	showNginxRedirectionForm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('redirection_hosts')) {			require(['./main', './nginx/redirection/form'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Proxy Redirection Delete Confirm	 *	 * @param model	 */	showNginxRedirectionDeleteConfirm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('redirection_hosts')) {			require(['./main', './nginx/redirection/delete'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Nginx Stream Hosts	 */	showNginxStream: function () {		if (Cache.User.isAdmin() || Cache.User.canView('streams')) {			const controller = this;			require(['./main', './nginx/stream/main'], (App, View) => {				controller.navigate('/nginx/stream');				App.UI.showAppContent(new View());			});		}	},	/**	 * Stream Form	 *	 * @param [model]	 */	showNginxStreamForm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('streams')) {			require(['./main', './nginx/stream/form'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Stream Delete Confirm	 *	 * @param model	 */	showNginxStreamDeleteConfirm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('streams')) {			require(['./main', './nginx/stream/delete'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Nginx Dead Hosts	 */	showNginxDead: function () {		if (Cache.User.isAdmin() || Cache.User.canView('dead_hosts')) {			const controller = this;			require(['./main', './nginx/dead/main'], (App, View) => {				controller.navigate('/nginx/404');				App.UI.showAppContent(new View());			});		}	},	/**	 * Dead Host Form	 *	 * @param [model]	 */	showNginxDeadForm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('dead_hosts')) {			require(['./main', './nginx/dead/form'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Dead Host Delete Confirm	 *	 * @param model	 */	showNginxDeadDeleteConfirm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('dead_hosts')) {			require(['./main', './nginx/dead/delete'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Help Dialog	 *	 * @param {String}  title	 * @param {String}  content	 */	showHelp: function (title, content) {		require(['./main', './help/main'], function (App, View) {			App.UI.showModalDialog(new View({title: title, content: content}));		});	},	/**	 * Nginx Access	 */	showNginxAccess: function () {		if (Cache.User.isAdmin() || Cache.User.canView('access_lists')) {			const controller = this;			require(['./main', './nginx/access/main'], (App, View) => {				controller.navigate('/nginx/access');				App.UI.showAppContent(new View());			});		}	},	/**	 * Nginx Access List Form	 *	 * @param [model]	 */	showNginxAccessListForm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('access_lists')) {			require(['./main', './nginx/access/form'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Access List Delete Confirm	 *	 * @param model	 */	showNginxAccessListDeleteConfirm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('access_lists')) {			require(['./main', './nginx/access/delete'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Nginx Certificates	 */	showNginxCertificates: function () {		if (Cache.User.isAdmin() || Cache.User.canView('certificates')) {			const controller = this;			require(['./main', './nginx/certificates/main'], (App, View) => {				controller.navigate('/nginx/certificates');				App.UI.showAppContent(new View());			});		}	},	/**	 * Nginx Certificate Form	 *	 * @param [model]	 */	showNginxCertificateForm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {			require(['./main', './nginx/certificates/form'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Certificate Renew	 *	 * @param model	 */	showNginxCertificateRenew: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {			require(['./main', './nginx/certificates/renew'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Certificate Delete Confirm	 *	 * @param model	 */	showNginxCertificateDeleteConfirm: function (model) {		if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {			require(['./main', './nginx/certificates/delete'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Certificate Test Reachability	 *	 * @param model	 */	showNginxCertificateTestReachability: function (model) {	  if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {		require(['./main', './nginx/certificates/test'], function (App, View) {		  App.UI.showModalDialog(new View({model: model}));		});	  }	},	/**	 * Audit Log	 */	showAuditLog: function () {		const controller = this;		if (Cache.User.isAdmin()) {			require(['./main', './audit-log/main'], (App, View) => {				controller.navigate('/audit-log');				App.UI.showAppContent(new View());			});		} else {			this.showDashboard();		}	},	/**	 * Audit Log Metadata	 *	 * @param model	 */	showAuditMeta: function (model) {		if (Cache.User.isAdmin()) {			require(['./main', './audit-log/meta'], function (App, View) {				App.UI.showModalDialog(new View({model: model}));			});		}	},	/**	 * Settings	 */	showSettings: function () {		const controller = this;		if (Cache.User.isAdmin()) {			require(['./main', './settings/main'], (App, View) => {				controller.navigate('/settings');				App.UI.showAppContent(new View());			});		} else {			this.showDashboard();		}	},	/**	 * Settings Item Form	 *	 * @param model	 */	showSettingForm: function (model) {		if (Cache.User.isAdmin()) {			if (model.get('id') === 'default-site') {				require(['./main', './settings/default-site/main'], function (App, View) {					App.UI.showModalDialog(new View({model: model}));				});			}		}	},	/**	 * Logout	 */	logout: function () {		Tokens.dropTopToken();		this.showLogin();	}};
 |