dc/RoleEdit.js \
dc/ACLView.js \
dc/AuthView.js \
- dc/AuthEdit.js \
+ dc/AuthEditBase.js \
+ dc/AuthEditAD.js \
+ dc/AuthEditLDAP.js \
dc/Backup.js \
dc/Support.js \
dc/SecurityGroups.js \
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: {
dir: {
name: Proxmox.Utils.directoryText,
+++ /dev/null
-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);
- }
- });
- }
- }
-});
--- /dev/null
+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();
+ },
+});
--- /dev/null
+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);
+ },
+ });
+ }
+ },
+});
--- /dev/null
+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();
+ },
+});
if (!rec) {
return;
}
-
- var win = Ext.create('PVE.dc.AuthEdit',{
- realm: rec.data.realm,
- authType: rec.data.type
- });
- win.on('destroy', reload);
- win.show();
+ Ext.create('PVE.dc.AuthEditBase', {
+ realm: rec.data.realm,
+ authType: rec.data.type,
+ listeners: {
+ destroy: reload,
+ },
+ }).show();
};
var edit_btn = new Proxmox.button.Button({
}
});
+ 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 = [
{
text: gettext('Add'),
menu: new Ext.menu.Menu({
- 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();
- }
- }
- ]
- })
+ items: items,
+ }),
},
edit_btn, remove_btn
];