summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--install/ui/service.js186
1 files changed, 107 insertions, 79 deletions
diff --git a/install/ui/service.js b/install/ui/service.js
index 129f166a3..f714e410e 100644
--- a/install/ui/service.js
+++ b/install/ui/service.js
@@ -57,10 +57,15 @@ IPA.service.entity = function(spec) {
},
{
name: 'provisioning',
+ action_panel: {
+ factory: IPA.action_panel,
+ name: 'provisioning_actions',
+ actions: ['unprovision']
+ },
fields: [
{
type: 'service_provisioning_status',
- name: 'krblastpwdchange',
+ name: 'has_keytab',
label: IPA.messages.objects.service.status
}
]
@@ -75,7 +80,16 @@ IPA.service.entity = function(spec) {
}
]
}
- ]
+ ],
+ actions: [
+ IPA.service.unprovision_action
+ ],
+ state: {
+ evaluators: [
+ IPA.service.has_keytab_evaluator,
+ IPA.service.krbprincipalkey_acl_evaluator
+ ]
+ }
}).
association_facet({
name: 'managedby_host',
@@ -227,7 +241,7 @@ IPA.service_provisioning_status_widget = function (spec) {
that.widget_create(container);
- var div = $('<div/>', {
+ that.status_valid = $('<div/>', {
name: 'kerberos-key-valid',
style: 'display: none;'
}).appendTo(container);
@@ -236,23 +250,15 @@ IPA.service_provisioning_status_widget = function (spec) {
src: 'images/check-icon.png',
style: 'float: left;',
'class': 'status-icon'
- }).appendTo(div);
+ }).appendTo(that.status_valid);
var content_div = $('<div/>', {
style: 'float: left;'
- }).appendTo(div);
-
- content_div.append('<b>'+IPA.messages.objects.service.valid+':</b>');
+ }).appendTo(that.status_valid);
- content_div.append(' ');
+ content_div.append('<b>'+IPA.messages.objects.service.valid+'</b>');
- $('<input/>', {
- 'type': 'button',
- 'name': 'unprovision',
- 'value': IPA.messages.objects.service.delete_key_unprovision
- }).appendTo(content_div);
-
- div = $('<div/>', {
+ that.status_missing = $('<div/>', {
name: 'kerberos-key-missing',
style: 'display: none;'
}).appendTo(container);
@@ -261,114 +267,136 @@ IPA.service_provisioning_status_widget = function (spec) {
src: 'images/caution-icon.png',
style: 'float: left;',
'class': 'status-icon'
- }).appendTo(div);
+ }).appendTo(that.status_missing);
content_div = $('<div/>', {
style: 'float: left;'
- }).appendTo(div);
+ }).appendTo(that.status_missing);
content_div.append('<b>'+IPA.messages.objects.service.missing+'</b>');
+ };
- that.status_valid = $('div[name=kerberos-key-valid]', that.container);
- that.status_missing = $('div[name=kerberos-key-missing]', that.container);
+ that.update = function(values) {
+ that.status = values && values.length ? values[0] : false;
+ set_status(that.status ? 'valid' : 'missing');
+ };
- var button = $('input[name=unprovision]', that.container);
- that.unprovision_button = IPA.button({
- name: 'unprovision',
- 'label': IPA.messages.objects.service.delete_key_unprovision,
- 'click': that.unprovision
- });
- button.replaceWith(that.unprovision_button);
+ that.clear = function() {
+ that.status_valid.css('display', 'none');
+ that.status_missing.css('display', 'none');
};
- that.unprovision = function() {
+ function set_status(status) {
+ that.status_valid.css('display', status == 'valid' ? 'inline' : 'none');
+ that.status_missing.css('display', status == 'missing' ? 'inline' : 'none');
+ }
+
+ return that;
+};
- var label = that.entity.metadata.label_singular;
- var title = IPA.messages.objects.service.unprovision_title;
- title = title.replace('${entity}', label);
+IPA.field_factories['service_provisioning_status'] = IPA.field;
+IPA.widget_factories['service_provisioning_status'] = IPA.service_provisioning_status_widget;
- var dialog = IPA.dialog({
- 'title': title
- });
- dialog.create = function() {
- dialog.container.append(IPA.messages.objects.service.unprovision_confirmation);
- };
+IPA.service.unprovision_dialog = function(spec) {
+
+ spec = spec || {};
+ spec.title = spec.title || IPA.messages.objects.service.unprovision_title;
+
+ var that = IPA.dialog(spec);
+ that.facet = spec.facet;
+
+ var entity_singular = that.entity.metadata.label_singular;
+ that.title = that.title.replace('${entity}', entity_singular);
+
+ that.create = function() {
+ that.container.append(IPA.messages.objects.service.unprovision_confirmation);
+ };
+
+ that.create_buttons = function() {
- dialog.create_button({
+ that.create_button({
name: 'unprovision',
label: IPA.messages.objects.service.unprovision,
click: function() {
- IPA.command({
- entity: that.entity.name,
- method: 'disable',
- args: [that.pkey],
- on_success: function(data, text_status, xhr) {
- set_status('missing');
- dialog.close();
- },
- on_error: function(xhr, text_status, error_thrown) {
- dialog.close();
- }
- }).execute();
+ that.unprovision();
}
});
- dialog.create_button({
+ that.create_button({
name: 'cancel',
label: IPA.messages.buttons.cancel,
click: function() {
- dialog.close();
+ that.close();
}
});
-
- dialog.open(that.container);
-
- return false;
};
- that.update = function(values) {
- that.pkey = values.pkey;
- that.status = values.value;
- set_status(values.value ? 'valid' : 'missing');
- };
+ that.unprovision = function() {
- that.clear = function() {
- that.status_valid.css('display', 'none');
- that.status_missing.css('display', 'none');
+ var principal_f = that.facet.fields.get_field('krbprincipalname');
+ var pkey = principal_f.values[0];
+
+ IPA.command({
+ entity: that.entity.name,
+ method: 'disable',
+ args: [pkey],
+ on_success: function(data, text_status, xhr) {
+ that.facet.refresh();
+ that.close();
+ },
+ on_error: function(xhr, text_status, error_thrown) {
+ that.close();
+ }
+ }).execute();
};
- function set_status(status) {
- that.status_valid.css('display', status == 'valid' ? 'inline' : 'none');
- that.status_missing.css('display', status == 'missing' ? 'inline' : 'none');
- }
+ that.create_buttons();
return that;
};
-IPA.service_provisioning_status_field = function (spec) {
+IPA.service.unprovision_action = function(spec) {
spec = spec || {};
+ spec.name = spec.name || 'unprovision';
+ spec.label = spec.label || IPA.messages.objects.service.delete_key_unprovision;
+ spec.enable_cond = spec.enable_cond || ['has_keytab', 'krbprincipalkey_w'];
- var that = IPA.field(spec);
+ var that = IPA.action(spec);
- that.load = function(record) {
-
- that.values = {
- value: record[that.param],
- pkey: record['krbprincipalname'][0]
- };
+ that.execute_action = function(facet) {
- that.load_writable(record);
+ var dialog = IPA.service.unprovision_dialog({
+ entity: facet.entity,
+ facet: facet
+ });
- that.reset();
+ dialog.open();
};
return that;
};
-IPA.field_factories['service_provisioning_status'] = IPA.service_provisioning_status_field;
-IPA.widget_factories['service_provisioning_status'] = IPA.service_provisioning_status_widget;
+IPA.service.krbprincipalkey_acl_evaluator = function(spec) {
+
+ spec.name = spec.name || 'unprovision_acl_evaluator';
+ spec.attribute = spec.attribute || 'krbprincipalkey';
+
+ var that = IPA.acl_state_evaluator(spec);
+ return that;
+};
+
+IPA.service.has_keytab_evaluator = function(spec) {
+
+ spec.name = spec.name || 'has_keytab_evaluator';
+ spec.attribute = spec.attribute || 'has_keytab';
+ spec.value = spec.value || [true];
+ spec.representation = spec.representation || 'has_keytab';
+
+ var that = IPA.value_state_evaluator(spec);
+ return that;
+};
IPA.service.certificate_status_field = function(spec) {