]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/RealmSyncJob.js
bb2e8d2f6b9af10a7ba05520a6f4706d0bdf318e
1 Ext
.define('PVE.dc.RealmSyncJobView', {
2 extend
: 'Ext.grid.Panel',
3 alias
: 'widget.pveRealmSyncJobView',
6 stateId
: 'grid-realmsyncjobs',
9 xclass
: 'Ext.app.ViewController',
11 addRealmSyncJob: function(button
) {
13 Ext
.create(`PVE.dc.RealmSyncJobEdit`, {
16 destroy
: () => me
.reload(),
21 editRealmSyncJob: function() {
23 let view
= me
.getView();
24 let selection
= view
.getSelection();
25 if (!selection
|| selection
.length
< 1) {
29 Ext
.create(`PVE.dc.RealmSyncJobEdit`, {
30 jobid
: selection
[0].data
.id
,
33 destroy
: () => me
.reload(),
40 let view
= me
.getView();
41 let selection
= view
.getSelection();
42 if (!selection
|| selection
.length
< 1) {
46 let params
= selection
[0].data
;
47 let realm
= params
.realm
;
49 let propertiesToDelete
= ['comment', 'realm', 'id', 'type', 'schedule', 'last-run', 'next-run', 'enabled'];
50 for (const prop
of propertiesToDelete
) {
54 Proxmox
.Utils
.API2Request({
55 url
: `/access/domains/${realm}/sync`,
59 success: function(response
, options
) {
60 let upid
= response
.result
.data
;
61 let win
= Ext
.create('Proxmox.window.TaskProgress', {
63 taskDone
: () => { me
.reload(); },
67 failure: function(response
, opts
) {
68 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
74 this.getView().getStore().load();
83 url
: '/api2/json/cluster/jobs/realm-sync',
88 getRowClass
: (record
, _index
) => record
.get('enabled') ? '' : 'proxmox-disabled-row',
93 header
: gettext('Enabled'),
99 renderer
: Proxmox
.Utils
.renderEnabledIcon
,
102 text
: gettext('Name'),
108 text
: gettext('Realm'),
113 header
: gettext('Schedule'),
115 dataIndex
: 'schedule',
118 text
: gettext('Next Run'),
119 dataIndex
: 'next-run',
121 renderer
: PVE
.Utils
.render_next_event
,
124 header
: gettext('Comment'),
125 dataIndex
: 'comment',
126 renderer
: Ext
.htmlEncode
,
127 sorter
: (a
, b
) => (a
.data
.comment
|| '').localeCompare(b
.data
.comment
|| ''),
134 text
: gettext('Add'),
135 handler
: 'addRealmSyncJob',
138 text
: gettext('Edit'),
139 xtype
: 'proxmoxButton',
140 handler
: 'editRealmSyncJob',
144 xtype
: 'proxmoxStdRemoveButton',
145 baseurl
: `/api2/extjs/cluster/jobs/realm-sync`,
149 xtype
: 'proxmoxButton',
152 text
: gettext('Run Now'),
157 itemdblclick
: 'editRealmSyncJob',
160 initComponent: function() {
165 Proxmox
.Utils
.monStoreErrors(me
, me
.getStore());
169 Ext
.define('PVE.dc.RealmSyncJobEdit', {
170 extend
: 'Proxmox.window.Edit',
171 mixins
: ['Proxmox.Mixin.CBind'],
173 subject
: gettext('Realm Sync Job'),
174 onlineHelp
: 'pveum_ldap_sync',
176 // don't focus the schedule field on edit
177 defaultFocus
: 'field[name=id]',
179 cbindData: function() {
181 me
.isCreate
= !me
.jobid
;
182 me
.jobid
= me
.jobid
|| "";
183 let url
= '/api2/extjs/cluster/jobs/realm-sync';
184 me
.url
= me
.jobid
? `${url}/${me.jobid}` : url
;
185 me
.method
= me
.isCreate
? 'POST' : 'PUT';
187 me
.subject
= `${me.subject}: ${me.jobid}`;
192 submitUrl: function(url
, values
) {
193 return this.isCreate
? `${url}/${values.id}` : url
;
197 xclass
: 'Ext.app.ViewController',
199 updateDefaults: function(_field
, newValue
) {
202 ['scope', 'enable-new', 'schedule'].forEach((reference
) => {
203 me
.lookup(reference
)?.setDisabled(false);
206 // only update on create
207 if (!me
.getView().isCreate
) {
210 Proxmox
.Utils
.API2Request({
211 url
: `/access/domains/${newValue}`,
212 success: function(response
) {
213 // first reset the fields to their default
214 ['acl', 'entry', 'properties'].forEach(opt
=> {
215 me
.lookup(`remove-vanished-${opt}`)?.setValue(false);
217 me
.lookup('enable-new')?.setValue('1');
218 me
.lookup('scope')?.setValue(undefined);
220 let options
= response
?.result
?.data
?.['sync-defaults-options'];
222 let parsed
= PVE
.Parser
.parsePropertyString(options
);
223 if (parsed
['remove-vanished']) {
224 let opts
= parsed
['remove-vanished'].split(';');
225 for (const opt
of opts
) {
226 me
.lookup(`remove-vanished-${opt}`)?.setValue(true);
228 delete parsed
['remove-vanished'];
230 for (const [name
, value
] of Object
.entries(parsed
)) {
231 me
.lookup(name
)?.setValue(value
);
244 isCreate
: '{isCreate}',
247 onGetValues: function(values
) {
250 let vanished_opts
= [];
251 ['acl', 'entry', 'properties'].forEach((prop
) => {
252 if (values
[`remove-vanished-${prop}`]) {
253 vanished_opts
.push(prop
);
255 delete values
[`remove-vanished-${prop}`];
258 if (!values
.id
&& me
.isCreate
) {
259 values
.id
= 'realmsync-' + Ext
.data
.identifier
.Uuid
.Global
.generate().slice(0, 13);
262 if (vanished_opts
.length
> 0) {
263 values
['remove-vanished'] = vanished_opts
.join(';');
265 values
['remove-vanished'] = 'none';
268 PVE
.Utils
.delete_if_default(values
, 'node', '');
271 delete values
.delete; // on create we cannot delete values
279 xtype
: 'pmxDisplayEditField',
281 xtype
: 'pmxRealmComboBox',
282 storeFilter
: rec
=> rec
.data
.type
=== 'ldap' || rec
.data
.type
=== 'ad',
285 emptyText
: `<div class="x-grid-empty">${gettext('No LDAP/AD Realm found')}</div>`,
288 editable
: '{isCreate}',
291 change
: 'updateDefaults',
293 fieldLabel
: gettext('Realm'),
298 xtype
: 'pveCalendarEvent',
299 fieldLabel
: gettext('Schedule'),
303 reference
: 'schedule',
306 xtype
: 'proxmoxcheckbox',
307 fieldLabel
: gettext('Enable'),
309 reference
: 'enabled',
318 xtype
: 'proxmoxKVComboBox',
322 fieldLabel
: gettext('Scope'),
324 emptyText
: gettext('No default available'),
328 ['users', gettext('Users')],
329 ['groups', gettext('Groups')],
330 ['both', gettext('Users and Groups')],
334 xtype
: 'proxmoxKVComboBox',
340 ['1', Proxmox
.Utils
.yesText
],
341 ['0', Proxmox
.Utils
.noText
],
344 reference
: 'enable-new',
345 fieldLabel
: gettext('Enable new'),
352 title
: gettext('Remove Vanished Options'),
355 xtype
: 'proxmoxcheckbox',
356 fieldLabel
: gettext('ACL'),
357 name
: 'remove-vanished-acl',
358 reference
: 'remove-vanished-acl',
359 boxLabel
: gettext('Remove ACLs of vanished users and groups.'),
362 xtype
: 'proxmoxcheckbox',
363 fieldLabel
: gettext('Entry'),
364 name
: 'remove-vanished-entry',
365 reference
: 'remove-vanished-entry',
366 boxLabel
: gettext('Remove vanished user and group entries.'),
369 xtype
: 'proxmoxcheckbox',
370 fieldLabel
: gettext('Properties'),
371 name
: 'remove-vanished-properties',
372 reference
: 'remove-vanished-properties',
373 boxLabel
: gettext('Remove vanished properties from synced users.'),
378 xtype
: 'proxmoxtextfield',
380 fieldLabel
: gettext('Job Comment'),
382 deleteEmpty
: '{!isCreate}',
386 'data-qtip': gettext('Description of the job'),
390 xtype
: 'displayfield',
391 reference
: 'defaulthint',
392 value
: gettext('Default sync options can be set by editing the realm.'),
400 initComponent: function() {
405 success: function(response
, options
) {
406 let values
= response
.result
.data
;
408 if (values
['remove-vanished']) {
409 let opts
= values
['remove-vanished'].split(';');
410 for (const opt
of opts
) {
411 values
[`remove-vanished-${opt}`] = 1;
414 me
.down('inputpanel').setValues(values
);