summaryrefslogtreecommitdiffstats
path: root/install/ui/src/freeipa/service.js
diff options
context:
space:
mode:
authorPetr Vobornik <pvoborni@redhat.com>2012-11-26 14:28:32 +0100
committerPetr Vobornik <pvoborni@redhat.com>2013-01-18 15:10:36 +0100
commitb9ef6ab0c412913234f05f788b3fcd3c3277eb69 (patch)
tree2af9ef49ce74fd152c4c7b6f0aad543b4793ba59 /install/ui/src/freeipa/service.js
parent8f8e790d9468245c031320d6a506a420f486638f (diff)
downloadfreeipa-b9ef6ab0c412913234f05f788b3fcd3c3277eb69.tar.gz
freeipa-b9ef6ab0c412913234f05f788b3fcd3c3277eb69.tar.xz
freeipa-b9ef6ab0c412913234f05f788b3fcd3c3277eb69.zip
Move of core Web UI files to AMD directory
SSIA https://fedorahosted.org/freeipa/ticket/112
Diffstat (limited to 'install/ui/src/freeipa/service.js')
-rw-r--r--install/ui/src/freeipa/service.js467
1 files changed, 467 insertions, 0 deletions
diff --git a/install/ui/src/freeipa/service.js b/install/ui/src/freeipa/service.js
new file mode 100644
index 000000000..04e294bf0
--- /dev/null
+++ b/install/ui/src/freeipa/service.js
@@ -0,0 +1,467 @@
+/*jsl:import ipa.js */
+/*jsl:import certificate.js */
+
+/* Authors:
+ * Endi Sukma Dewata <edewata@redhat.com>
+ *
+ * Copyright (C) 2010 Red Hat
+ * see file 'COPYING' for use and warranty information
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* REQUIRES: ipa.js, details.js, search.js, add.js, facet.js, entity.js */
+
+IPA.service = {};
+
+IPA.service.entity = function(spec) {
+
+ var that = IPA.entity(spec);
+
+ that.init = function() {
+ that.entity_init();
+
+ that.builder.search_facet({
+ columns: [ 'krbprincipalname' ]
+ }).
+ details_facet({
+ factory: IPA.service.details_facet,
+ sections: [
+ {
+ name: 'details',
+ fields: [
+ 'krbprincipalname',
+ {
+ type: 'service_name',
+ name: 'service',
+ label: IPA.messages.objects.service.service,
+ read_only: true
+ },
+ {
+ type: 'service_host',
+ name: 'host',
+ label: IPA.messages.objects.service.host,
+ read_only: true
+ },
+ {
+ name: 'ipakrbauthzdata',
+ type: 'checkboxes',
+ options: IPA.create_options(['MS-PAC', 'PAD'])
+ }
+ ]
+ },
+ {
+ name: 'provisioning',
+ action_panel: {
+ factory: IPA.action_panel,
+ name: 'provisioning_actions',
+ actions: ['unprovision']
+ },
+ fields: [
+ {
+ type: 'service_provisioning_status',
+ name: 'has_keytab',
+ label: IPA.messages.objects.service.status
+ }
+ ]
+ },
+ {
+ name: 'certificate',
+ action_panel: {
+ factory: IPA.action_panel,
+ name: 'cert_actions',
+ actions: [
+ 'request_cert', 'view_cert', 'get_cert',
+ 'revoke_cert', 'restore_cert'
+ ]
+ },
+ fields: [
+ {
+ type: 'certificate_status',
+ name: 'certificate_status',
+ label: IPA.messages.objects.service.status
+ }
+ ]
+ }
+ ],
+ actions: [
+ IPA.service.unprovision_action,
+ IPA.cert.view_action,
+ IPA.cert.get_action,
+ IPA.cert.request_action,
+ IPA.cert.revoke_action,
+ IPA.cert.restore_action
+ ],
+ state: {
+ evaluators: [
+ IPA.service.has_keytab_evaluator,
+ IPA.service.krbprincipalkey_acl_evaluator,
+ IPA.cert.certificate_evaluator
+ ]
+ },
+ policies: [
+ IPA.service.certificate_policy()
+ ]
+ }).
+ association_facet({
+ name: 'managedby_host',
+ add_method: 'add_host',
+ remove_method: 'remove_host'
+ }).
+ standard_association_facets().
+ adder_dialog({
+ factory: IPA.service_adder_dialog,
+ height: 350,
+ sections: [
+ {
+ fields: [
+ {
+ type: 'combobox',
+ name: 'service',
+ label: IPA.messages.objects.service.service,
+ options: [
+ 'cifs',
+ 'DNS',
+ 'ftp',
+ 'HTTP',
+ 'imap',
+ 'ldap',
+ 'libvirt',
+ 'nfs',
+ 'smtp',
+ 'qpidd'
+ ],
+ editable: true,
+ size: 10,
+ required: true,
+ z_index: 2
+ },
+ {
+ type: 'entity_select',
+ name: 'host',
+ other_entity: 'host',
+ other_field: 'fqdn',
+ label: IPA.messages.objects.service.host,
+ required: true,
+ z_index: 1
+ },
+ {
+ type: 'checkbox',
+ name: 'force',
+ metadata: IPA.get_command_option('service_add', 'force')
+ }
+ ]
+ }
+ ]
+ });
+ };
+
+ return that;
+};
+
+IPA.service.details_facet = function(spec, no_init) {
+
+ var that = IPA.details_facet(spec, true);
+ that.certificate_loaded = IPA.observer();
+
+ if (!no_init) that.init_details_facet();
+
+ return that;
+};
+
+IPA.service_adder_dialog = function(spec) {
+
+ spec = spec || {};
+
+ var that = IPA.entity_adder_dialog(spec);
+
+ var init = function() {
+
+ //small hack - krbprincipalname should not be displayed. This way
+ //creation of associated widget is skipped.
+ //In future it would be better split section definion into widget and
+ //fields definition and create custom field with two associated
+ //widgets - 'service' and 'host' with this dialog's save logic.
+ that.builder.build_field({
+ type: 'field',
+ name: 'krbprincipalname',
+ required: false
+ });
+ };
+
+ that.save = function(record) {
+
+ var field = that.fields.get_field('service');
+ var service = field.save()[0];
+
+ field = that.fields.get_field('host');
+ var host = field.save()[0];
+
+ record['krbprincipalname'] = [ service+'/'+host ];
+
+ field = that.fields.get_field('force');
+ record['force'] = field.save();
+ };
+
+ init();
+
+ return that;
+};
+
+IPA.service_name_field = function(spec) {
+
+ spec = spec || {};
+
+ var that = IPA.field(spec);
+
+ that.load = function(record) {
+
+ that.field_load(record);
+
+ var krbprincipalname = record.krbprincipalname[0];
+ var value = krbprincipalname.replace(/\/.*$/, '');
+ that.values = [value];
+
+ that.reset();
+ };
+
+ return that;
+};
+
+IPA.field_factories['service_name'] = IPA.service_name_field;
+IPA.widget_factories['service_name'] = IPA.text_widget;
+
+
+IPA.service_host_field = function(spec) {
+
+ spec = spec || {};
+
+ var that = IPA.field(spec);
+
+ that.load = function(record) {
+
+ that.field_load(record);
+
+ var krbprincipalname = record.krbprincipalname[0];
+ var value = krbprincipalname.replace(/^.*\//, '').replace(/@.*$/, '');
+ that.values = [value];
+
+ that.reset();
+ };
+
+ return that;
+};
+
+IPA.field_factories['service_host'] = IPA.service_host_field;
+IPA.widget_factories['service_host'] = IPA.text_widget;
+
+IPA.service_provisioning_status_widget = function (spec) {
+
+ spec = spec || {};
+
+ var that = IPA.input_widget(spec);
+
+ that.create = function(container) {
+
+ that.widget_create(container);
+
+ that.status_valid = $('<div/>', {
+ name: 'kerberos-key-valid',
+ style: 'display: none;'
+ }).appendTo(container);
+
+ $('<img/>', {
+ src: 'images/check-icon.png',
+ style: 'float: left;',
+ 'class': 'status-icon'
+ }).appendTo(that.status_valid);
+
+ var content_div = $('<div/>', {
+ style: 'float: left;'
+ }).appendTo(that.status_valid);
+
+ content_div.append('<b>'+IPA.messages.objects.service.valid+'</b>');
+
+ that.status_missing = $('<div/>', {
+ name: 'kerberos-key-missing',
+ style: 'display: none;'
+ }).appendTo(container);
+
+ $('<img/>', {
+ src: 'images/caution-icon.png',
+ style: 'float: left;',
+ 'class': 'status-icon'
+ }).appendTo(that.status_missing);
+
+ content_div = $('<div/>', {
+ style: 'float: left;'
+ }).appendTo(that.status_missing);
+
+ content_div.append('<b>'+IPA.messages.objects.service.missing+'</b>');
+ };
+
+ that.update = function(values) {
+ that.status = values && values.length ? values[0] : false;
+ set_status(that.status ? 'valid' : 'missing');
+ };
+
+ that.clear = function() {
+ that.status_valid.css('display', 'none');
+ that.status_missing.css('display', 'none');
+ };
+
+ function set_status(status) {
+ that.status_valid.css('display', status == 'valid' ? 'inline' : 'none');
+ that.status_missing.css('display', status == 'missing' ? 'inline' : 'none');
+ }
+
+ return that;
+};
+
+IPA.field_factories['service_provisioning_status'] = IPA.field;
+IPA.widget_factories['service_provisioning_status'] = IPA.service_provisioning_status_widget;
+
+
+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() {
+
+ that.create_button({
+ name: 'unprovision',
+ label: IPA.messages.objects.service.unprovision,
+ click: function() {
+ that.unprovision();
+ }
+ });
+
+ that.create_button({
+ name: 'cancel',
+ label: IPA.messages.buttons.cancel,
+ click: function() {
+ that.close();
+ }
+ });
+ };
+
+ that.unprovision = function() {
+
+ 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();
+ IPA.notify_success(IPA.messages.objects.service.unprovisioned);
+ },
+ on_error: function(xhr, text_status, error_thrown) {
+ that.close();
+ }
+ }).execute();
+ };
+
+ that.create_buttons();
+
+ return that;
+};
+
+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.action(spec);
+
+ that.execute_action = function(facet) {
+
+ var dialog = IPA.service.unprovision_dialog({
+ entity: facet.entity,
+ facet: facet
+ });
+
+ dialog.open();
+ };
+
+ return that;
+};
+
+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_policy = function(spec) {
+
+ spec = spec || {};
+
+ function get_pkey(result) {
+ var values = result.krbprincipalname;
+ return values ? values[0] : null;
+ }
+
+ spec.get_pkey = spec.get_pkey || get_pkey;
+
+ spec.get_name = spec.get_name || function(result) {
+ var value = get_pkey(result);
+ return value ? value.replace(/@.*$/, '') : null;
+ };
+
+ spec.get_principal = spec.get_principal || get_pkey;
+
+ spec.get_hostname = spec.get_hostname || function(result) {
+ var value = get_pkey(result);
+ if (value) {
+ value = value.replace(/@.*$/, '').replace(/^.*\//, '');
+ }
+ return value;
+ };
+
+ var that = IPA.cert.load_policy(spec);
+ return that;
+};
+
+IPA.register('service', IPA.service.entity);