mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-05-02 20:12:29 +00:00
* add `oidc-config` setting allowing an admin user to configure parameters * modify login page to show another button when oidc is configured * add dependency `openid-client` `v5.4.0` * add backend route to process "OAuth2 Authorization Code" flow initialisation * add backend route to process callback of above flow * sign in the authenticated user with internal jwt token if internal user with email matching the one retrieved from oauth claims exists Note: Only Open ID Connect Discovery is supported which most modern Identity Providers offer. Tested with Authentik 2023.2.2 and Keycloak 18.0.2
453 lines
12 KiB
JavaScript
453 lines
12 KiB
JavaScript
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 () {
|
|
let 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 () {
|
|
let 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')) {
|
|
let 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')) {
|
|
let 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')) {
|
|
let 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')) {
|
|
let 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')) {
|
|
let 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')) {
|
|
let 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 () {
|
|
let 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 () {
|
|
let 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}));
|
|
});
|
|
}
|
|
if (model.get('id') === 'oidc-config') {
|
|
require(['./main', './settings/oidc-config/main'], function (App, View) {
|
|
App.UI.showModalDialog(new View({model: model}));
|
|
});
|
|
}
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Logout
|
|
*/
|
|
logout: function () {
|
|
Tokens.dropTopToken();
|
|
this.showLogin();
|
|
}
|
|
};
|