mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-08-09 17:06:16 +00:00
ui: dc/Auth*: refactor AuthEdit
similar to storage/Base.js so that we have the different RealmTypes in different inputpanels this will come in handy when we define sync options Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
8b966034aa
commit
efff7eab9a
@ -233,7 +233,9 @@ JSSRC= \
|
|||||||
dc/RoleEdit.js \
|
dc/RoleEdit.js \
|
||||||
dc/ACLView.js \
|
dc/ACLView.js \
|
||||||
dc/AuthView.js \
|
dc/AuthView.js \
|
||||||
dc/AuthEdit.js \
|
dc/AuthEditBase.js \
|
||||||
|
dc/AuthEditAD.js \
|
||||||
|
dc/AuthEditLDAP.js \
|
||||||
dc/Backup.js \
|
dc/Backup.js \
|
||||||
dc/Support.js \
|
dc/Support.js \
|
||||||
dc/SecurityGroups.js \
|
dc/SecurityGroups.js \
|
||||||
|
@ -566,6 +566,29 @@ Ext.define('PVE.Utils', { utilities: {
|
|||||||
return format === 'pbs-ct' || volid.match(':backup/vzdump-(lxc|openvz)-');
|
return format === 'pbs-ct' || volid.match(':backup/vzdump-(lxc|openvz)-');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
authSchema: {
|
||||||
|
ad: {
|
||||||
|
name: gettext('Active Directory Server'),
|
||||||
|
ipanel: 'pveAuthADPanel',
|
||||||
|
add: true,
|
||||||
|
},
|
||||||
|
ldap: {
|
||||||
|
name: gettext('LDAP Server'),
|
||||||
|
ipanel: 'pveAuthLDAPPanel',
|
||||||
|
add: true,
|
||||||
|
},
|
||||||
|
pam: {
|
||||||
|
name: 'Linux PAM',
|
||||||
|
ipanel: 'pveAuthBasePanel',
|
||||||
|
add: false,
|
||||||
|
},
|
||||||
|
pve: {
|
||||||
|
name: 'Proxmox VE authentication server',
|
||||||
|
ipanel: 'pveAuthBasePanel',
|
||||||
|
add: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
storageSchema: {
|
storageSchema: {
|
||||||
dir: {
|
dir: {
|
||||||
name: Proxmox.Utils.directoryText,
|
name: Proxmox.Utils.directoryText,
|
||||||
|
@ -1,180 +0,0 @@
|
|||||||
Ext.define('PVE.dc.AuthEdit', {
|
|
||||||
extend: 'Proxmox.window.Edit',
|
|
||||||
alias: ['widget.pveDcAuthEdit'],
|
|
||||||
|
|
||||||
isAdd: true,
|
|
||||||
|
|
||||||
initComponent : function() {
|
|
||||||
var me = this;
|
|
||||||
|
|
||||||
me.isCreate = !me.realm;
|
|
||||||
|
|
||||||
var url;
|
|
||||||
var method;
|
|
||||||
var serverlist;
|
|
||||||
|
|
||||||
if (me.isCreate) {
|
|
||||||
url = '/api2/extjs/access/domains';
|
|
||||||
method = 'POST';
|
|
||||||
} else {
|
|
||||||
url = '/api2/extjs/access/domains/' + me.realm;
|
|
||||||
method = 'PUT';
|
|
||||||
}
|
|
||||||
|
|
||||||
var column1 = [
|
|
||||||
{
|
|
||||||
xtype: me.isCreate ? 'textfield' : 'displayfield',
|
|
||||||
name: 'realm',
|
|
||||||
fieldLabel: gettext('Realm'),
|
|
||||||
value: me.realm,
|
|
||||||
allowBlank: false
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
if (me.authType === 'ad') {
|
|
||||||
|
|
||||||
me.subject = gettext('Active Directory Server');
|
|
||||||
|
|
||||||
column1.push({
|
|
||||||
xtype: 'textfield',
|
|
||||||
name: 'domain',
|
|
||||||
fieldLabel: gettext('Domain'),
|
|
||||||
emptyText: 'company.net',
|
|
||||||
allowBlank: false
|
|
||||||
});
|
|
||||||
|
|
||||||
} else if (me.authType === 'ldap') {
|
|
||||||
|
|
||||||
me.subject = gettext('LDAP Server');
|
|
||||||
|
|
||||||
column1.push({
|
|
||||||
xtype: 'textfield',
|
|
||||||
name: 'base_dn',
|
|
||||||
fieldLabel: gettext('Base Domain Name'),
|
|
||||||
emptyText: 'CN=Users,DC=Company,DC=net',
|
|
||||||
allowBlank: false
|
|
||||||
});
|
|
||||||
|
|
||||||
column1.push({
|
|
||||||
xtype: 'textfield',
|
|
||||||
name: 'user_attr',
|
|
||||||
emptyText: 'uid / sAMAccountName',
|
|
||||||
fieldLabel: gettext('User Attribute Name'),
|
|
||||||
allowBlank: false
|
|
||||||
});
|
|
||||||
} else if (me.authType === 'pve') {
|
|
||||||
|
|
||||||
if (me.isCreate) {
|
|
||||||
throw 'unknown auth type';
|
|
||||||
}
|
|
||||||
|
|
||||||
me.subject = 'Proxmox VE authentication server';
|
|
||||||
|
|
||||||
} else if (me.authType === 'pam') {
|
|
||||||
|
|
||||||
if (me.isCreate) {
|
|
||||||
throw 'unknown auth type';
|
|
||||||
}
|
|
||||||
|
|
||||||
me.subject = 'linux PAM';
|
|
||||||
|
|
||||||
} else {
|
|
||||||
throw 'unknown auth type ';
|
|
||||||
}
|
|
||||||
|
|
||||||
column1.push({
|
|
||||||
xtype: 'proxmoxcheckbox',
|
|
||||||
fieldLabel: gettext('Default'),
|
|
||||||
name: 'default',
|
|
||||||
uncheckedValue: 0
|
|
||||||
});
|
|
||||||
|
|
||||||
var column2 = [];
|
|
||||||
|
|
||||||
if (me.authType === 'ldap' || me.authType === 'ad') {
|
|
||||||
column2.push(
|
|
||||||
{
|
|
||||||
xtype: 'textfield',
|
|
||||||
fieldLabel: gettext('Server'),
|
|
||||||
name: 'server1',
|
|
||||||
allowBlank: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
xtype: 'proxmoxtextfield',
|
|
||||||
fieldLabel: gettext('Fallback Server'),
|
|
||||||
deleteEmpty: !me.isCreate,
|
|
||||||
name: 'server2'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
xtype: 'proxmoxintegerfield',
|
|
||||||
name: 'port',
|
|
||||||
fieldLabel: gettext('Port'),
|
|
||||||
minValue: 1,
|
|
||||||
maxValue: 65535,
|
|
||||||
emptyText: gettext('Default'),
|
|
||||||
submitEmptyText: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
xtype: 'proxmoxcheckbox',
|
|
||||||
fieldLabel: 'SSL',
|
|
||||||
name: 'secure',
|
|
||||||
uncheckedValue: 0
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
column2.push({
|
|
||||||
xtype: 'pveTFASelector',
|
|
||||||
});
|
|
||||||
|
|
||||||
var ipanel = Ext.create('Proxmox.panel.InputPanel', {
|
|
||||||
column1: column1,
|
|
||||||
column2: column2,
|
|
||||||
columnB: [{
|
|
||||||
xtype: 'textfield',
|
|
||||||
name: 'comment',
|
|
||||||
fieldLabel: gettext('Comment')
|
|
||||||
}],
|
|
||||||
onGetValues: function(values) {
|
|
||||||
if (!values.port) {
|
|
||||||
if (!me.isCreate) {
|
|
||||||
Proxmox.Utils.assemble_field_data(values, { 'delete': 'port' });
|
|
||||||
}
|
|
||||||
delete values.port;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (me.isCreate) {
|
|
||||||
values.type = me.authType;
|
|
||||||
}
|
|
||||||
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Ext.applyIf(me, {
|
|
||||||
url: url,
|
|
||||||
method: method,
|
|
||||||
fieldDefaults: {
|
|
||||||
labelWidth: 120
|
|
||||||
},
|
|
||||||
items: [ ipanel ]
|
|
||||||
});
|
|
||||||
|
|
||||||
me.callParent();
|
|
||||||
|
|
||||||
if (!me.isCreate) {
|
|
||||||
me.load({
|
|
||||||
success: function(response, options) {
|
|
||||||
var data = response.result.data || {};
|
|
||||||
// just to be sure (should not happen)
|
|
||||||
if (data.type !== me.authType) {
|
|
||||||
me.close();
|
|
||||||
throw "got wrong auth type";
|
|
||||||
}
|
|
||||||
|
|
||||||
me.setValues(data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
54
www/manager6/dc/AuthEditAD.js
Normal file
54
www/manager6/dc/AuthEditAD.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
Ext.define('PVE.panel.ADInputPanel', {
|
||||||
|
extend: 'PVE.panel.AuthBase',
|
||||||
|
xtype: 'pveAuthADPanel',
|
||||||
|
|
||||||
|
initComponent: function() {
|
||||||
|
let me = this;
|
||||||
|
|
||||||
|
if (me.type !== 'ad') {
|
||||||
|
throw 'invalid type';
|
||||||
|
}
|
||||||
|
|
||||||
|
me.column1 = [
|
||||||
|
{
|
||||||
|
xtype: 'textfield',
|
||||||
|
name: 'domain',
|
||||||
|
fieldLabel: gettext('Domain'),
|
||||||
|
emptyText: 'company.net',
|
||||||
|
allowBlank: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
me.column2 = [
|
||||||
|
{
|
||||||
|
xtype: 'textfield',
|
||||||
|
fieldLabel: gettext('Server'),
|
||||||
|
name: 'server1',
|
||||||
|
allowBlank: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxtextfield',
|
||||||
|
fieldLabel: gettext('Fallback Server'),
|
||||||
|
deleteEmpty: !me.isCreate,
|
||||||
|
name: 'server2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxintegerfield',
|
||||||
|
name: 'port',
|
||||||
|
fieldLabel: gettext('Port'),
|
||||||
|
minValue: 1,
|
||||||
|
maxValue: 65535,
|
||||||
|
emptyText: gettext('Default'),
|
||||||
|
submitEmptyText: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxcheckbox',
|
||||||
|
fieldLabel: 'SSL',
|
||||||
|
name: 'secure',
|
||||||
|
uncheckedValue: 0,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
me.callParent();
|
||||||
|
},
|
||||||
|
});
|
120
www/manager6/dc/AuthEditBase.js
Normal file
120
www/manager6/dc/AuthEditBase.js
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
Ext.define('PVE.panel.AuthBase', {
|
||||||
|
extend: 'Proxmox.panel.InputPanel',
|
||||||
|
xtype: 'pveAuthBasePanel',
|
||||||
|
|
||||||
|
type: '',
|
||||||
|
|
||||||
|
onGetValues: function(values) {
|
||||||
|
let me = this;
|
||||||
|
|
||||||
|
if (!values.port) {
|
||||||
|
if (!me.isCreate) {
|
||||||
|
Proxmox.Utils.assemble_field_data(values, { 'delete': 'port' });
|
||||||
|
}
|
||||||
|
delete values.port;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (me.isCreate) {
|
||||||
|
values.type = me.authType;
|
||||||
|
}
|
||||||
|
|
||||||
|
return values;
|
||||||
|
},
|
||||||
|
|
||||||
|
initComponent: function() {
|
||||||
|
let me = this;
|
||||||
|
|
||||||
|
if (!me.column1) { me.column1 = []; }
|
||||||
|
if (!me.column2) { me.column2 = []; }
|
||||||
|
if (!me.columnB) { me.columnB = []; }
|
||||||
|
|
||||||
|
// first field is name
|
||||||
|
me.column1.unshift({
|
||||||
|
xtype: me.isCreate ? 'textfield' : 'displayfield',
|
||||||
|
name: 'realm',
|
||||||
|
fieldLabel: gettext('Realm'),
|
||||||
|
value: me.realm,
|
||||||
|
allowBlank: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
// last field is default'
|
||||||
|
me.column1.push({
|
||||||
|
xtype: 'proxmoxcheckbox',
|
||||||
|
fieldLabel: gettext('Default'),
|
||||||
|
name: 'default',
|
||||||
|
uncheckedValue: 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
// last field of column2is tfa
|
||||||
|
me.column2.push({
|
||||||
|
xtype: 'pveTFASelector',
|
||||||
|
});
|
||||||
|
|
||||||
|
me.columnB.push({
|
||||||
|
xtype: 'textfield',
|
||||||
|
name: 'comment',
|
||||||
|
fieldLabel: gettext('Comment'),
|
||||||
|
});
|
||||||
|
|
||||||
|
me.callParent();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
Ext.define('PVE.dc.AuthEditBase', {
|
||||||
|
extend: 'Proxmox.window.Edit',
|
||||||
|
|
||||||
|
isAdd: true,
|
||||||
|
|
||||||
|
fieldDefaults: {
|
||||||
|
labelWidth: 120,
|
||||||
|
},
|
||||||
|
|
||||||
|
initComponent: function() {
|
||||||
|
var me = this;
|
||||||
|
|
||||||
|
me.isCreate = !me.realm;
|
||||||
|
|
||||||
|
if (me.isCreate) {
|
||||||
|
me.url = '/api2/extjs/access/domains';
|
||||||
|
me.method = 'POST';
|
||||||
|
} else {
|
||||||
|
me.url = '/api2/extjs/access/domains/' + me.realm;
|
||||||
|
me.method = 'PUT';
|
||||||
|
}
|
||||||
|
|
||||||
|
let authConfig = PVE.Utils.authSchema[me.authType];
|
||||||
|
if (!authConfig) {
|
||||||
|
throw 'unknown auth type';
|
||||||
|
} else if (!authConfig.add && me.isCreate) {
|
||||||
|
throw 'trying to add non addable realm';
|
||||||
|
}
|
||||||
|
|
||||||
|
me.subject = authConfig.name;
|
||||||
|
|
||||||
|
Ext.apply(me, {
|
||||||
|
items: [{
|
||||||
|
realm: me.realm,
|
||||||
|
xtype: authConfig.ipanel,
|
||||||
|
isCreate: me.isCreate,
|
||||||
|
type: me.authType,
|
||||||
|
}],
|
||||||
|
});
|
||||||
|
|
||||||
|
me.callParent();
|
||||||
|
|
||||||
|
if (!me.isCreate) {
|
||||||
|
me.load({
|
||||||
|
success: function(response, options) {
|
||||||
|
var data = response.result.data || {};
|
||||||
|
// just to be sure (should not happen)
|
||||||
|
if (data.type !== me.authType) {
|
||||||
|
me.close();
|
||||||
|
throw "got wrong auth type";
|
||||||
|
}
|
||||||
|
|
||||||
|
me.setValues(data);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
61
www/manager6/dc/AuthEditLDAP.js
Normal file
61
www/manager6/dc/AuthEditLDAP.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
Ext.define('PVE.panel.LDAPInputPanel', {
|
||||||
|
extend: 'PVE.panel.AuthBase',
|
||||||
|
xtype: 'pveAuthLDAPPanel',
|
||||||
|
|
||||||
|
initComponent: function() {
|
||||||
|
let me = this;
|
||||||
|
|
||||||
|
if (me.type !== 'ldap') {
|
||||||
|
throw 'invalid type';
|
||||||
|
}
|
||||||
|
|
||||||
|
me.column1 = [
|
||||||
|
{
|
||||||
|
xtype: 'textfield',
|
||||||
|
name: 'base_dn',
|
||||||
|
fieldLabel: gettext('Base Domain Name'),
|
||||||
|
emptyText: 'CN=Users,DC=Company,DC=net',
|
||||||
|
allowBlank: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'textfield',
|
||||||
|
name: 'user_attr',
|
||||||
|
emptyText: 'uid / sAMAccountName',
|
||||||
|
fieldLabel: gettext('User Attribute Name'),
|
||||||
|
allowBlank: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
me.column2 = [
|
||||||
|
{
|
||||||
|
xtype: 'textfield',
|
||||||
|
fieldLabel: gettext('Server'),
|
||||||
|
name: 'server1',
|
||||||
|
allowBlank: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxtextfield',
|
||||||
|
fieldLabel: gettext('Fallback Server'),
|
||||||
|
deleteEmpty: !me.isCreate,
|
||||||
|
name: 'server2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxintegerfield',
|
||||||
|
name: 'port',
|
||||||
|
fieldLabel: gettext('Port'),
|
||||||
|
minValue: 1,
|
||||||
|
maxValue: 65535,
|
||||||
|
emptyText: gettext('Default'),
|
||||||
|
submitEmptyText: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxcheckbox',
|
||||||
|
fieldLabel: 'SSL',
|
||||||
|
name: 'secure',
|
||||||
|
uncheckedValue: 0,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
me.callParent();
|
||||||
|
},
|
||||||
|
});
|
@ -30,13 +30,13 @@ Ext.define('PVE.dc.AuthView', {
|
|||||||
if (!rec) {
|
if (!rec) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Ext.create('PVE.dc.AuthEditBase', {
|
||||||
var win = Ext.create('PVE.dc.AuthEdit',{
|
realm: rec.data.realm,
|
||||||
realm: rec.data.realm,
|
authType: rec.data.type,
|
||||||
authType: rec.data.type
|
listeners: {
|
||||||
});
|
destroy: reload,
|
||||||
win.on('destroy', reload);
|
},
|
||||||
win.show();
|
}).show();
|
||||||
};
|
};
|
||||||
|
|
||||||
var edit_btn = new Proxmox.button.Button({
|
var edit_btn = new Proxmox.button.Button({
|
||||||
@ -57,33 +57,29 @@ Ext.define('PVE.dc.AuthView', {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let items = [];
|
||||||
|
for (const [authType, config] of Object.entries(PVE.Utils.authSchema)) {
|
||||||
|
if (!config.add) { continue; }
|
||||||
|
|
||||||
|
items.push({
|
||||||
|
text: config.name,
|
||||||
|
handler: function() {
|
||||||
|
Ext.create('PVE.dc.AuthEditBase', {
|
||||||
|
authType,
|
||||||
|
listeners: {
|
||||||
|
destroy: reload,
|
||||||
|
},
|
||||||
|
}).show();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var tbar = [
|
var tbar = [
|
||||||
{
|
{
|
||||||
text: gettext('Add'),
|
text: gettext('Add'),
|
||||||
menu: new Ext.menu.Menu({
|
menu: new Ext.menu.Menu({
|
||||||
items: [
|
items: items,
|
||||||
{
|
}),
|
||||||
text: gettext('Active Directory Server'),
|
|
||||||
handler: function() {
|
|
||||||
var win = Ext.create('PVE.dc.AuthEdit', {
|
|
||||||
authType: 'ad'
|
|
||||||
});
|
|
||||||
win.on('destroy', reload);
|
|
||||||
win.show();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: gettext('LDAP Server'),
|
|
||||||
handler: function() {
|
|
||||||
var win = Ext.create('PVE.dc.AuthEdit',{
|
|
||||||
authType: 'ldap'
|
|
||||||
});
|
|
||||||
win.on('destroy', reload);
|
|
||||||
win.show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
edit_btn, remove_btn
|
edit_btn, remove_btn
|
||||||
];
|
];
|
||||||
|
Loading…
Reference in New Issue
Block a user