Initial implementation of Entitlements.

--
Endi S. Dewata
From a408bfe3e443341fc639b0d29e4918899dee705a Mon Sep 17 00:00:00 2001
From: Endi S. Dewata <[email protected]>
Date: Fri, 8 Apr 2011 01:16:07 -0400
Subject: [PATCH] Entitlements.

Initial implementation of Entitlements.

---
 install/ui/entitle.js                     |  196 +++++++++++++++++++++++++++++
 install/ui/index.html                     |    1 +
 install/ui/ipa.css                        |    6 +-
 install/ui/test/data/entitle_consume.json |   24 ++++
 install/ui/test/data/entitle_find.json    |   37 ++++++
 install/ui/test/data/entitle_get.json     |   27 ++++
 install/ui/test/data/ipa_init.json        |   57 ++++++++-
 install/ui/webui.js                       |    1 +
 ipalib/plugins/entitle.py                 |    2 +
 9 files changed, 349 insertions(+), 2 deletions(-)
 create mode 100644 install/ui/entitle.js
 create mode 100644 install/ui/test/data/entitle_consume.json
 create mode 100644 install/ui/test/data/entitle_find.json
 create mode 100644 install/ui/test/data/entitle_get.json

diff --git a/install/ui/entitle.js b/install/ui/entitle.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f62860c52fdea0cc4a302c23810a2c0c51cea1c
--- /dev/null
+++ b/install/ui/entitle.js
@@ -0,0 +1,196 @@
+/*jsl:import ipa.js */
+
+/*  Authors:
+ *    Endi S. Dewata <[email protected]>
+ *
+ * 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, entity.js */
+
+
+IPA.entitle = {};
+
+IPA.entity_factories.entitle = function() {
+
+    var builder = IPA.entity_builder();
+
+    builder.
+        entity('entitle').
+        facet({
+            factory: IPA.entitle.search_facet,
+            columns: [
+                {
+                    name: 'product',
+                    label: 'Product'
+                },
+                {
+                    name: 'quantity',
+                    label: 'Quantity'
+                },
+                {
+                    name: 'start',
+                    label: 'Start'
+                },
+                {
+                    name: 'end',
+                    label: 'End'
+                }
+            ],
+            search_all: true
+        }).
+            dialog({
+                factory: IPA.entitle.consume_dialog,
+                name: 'consume',
+                title: 'Consume Entitlements',
+                fields: [
+                    {
+                        name: 'quantity',
+                        label: 'Quantity',
+                        undo: false
+                    }
+                ]
+            }).
+        details_facet({
+            sections: [
+                {
+                    name: 'identity',
+                    label: IPA.messages.details.identity,
+                    fields: ['ipaentitlementid']
+                }
+            ]
+        }).
+        standard_association_facets();
+
+    return builder.build();
+};
+
+IPA.entitle.search_facet = function(spec) {
+
+    spec = spec || {};
+
+    var that = IPA.search_facet(spec);
+
+    that.create_action_panel = function(container) {
+
+        that.facet_create_action_panel(container);
+
+        var li = $('.action-controls', container);
+
+        var buttons = $('<span/>', {
+            'class': 'search-buttons'
+        }).appendTo(li);
+
+        $('<input/>', {
+            type: 'button',
+            name: 'consume',
+            value: 'Consume'
+        }).appendTo(buttons);
+    };
+
+    that.setup = function(container) {
+
+        that.search_facet_setup(container);
+
+        var action_panel = that.get_action_panel();
+
+        var button = $('input[name=consume]', action_panel);
+        that.consume_button = IPA.action_button({
+            label: 'Consume',
+            icon: 'ui-icon-plus',
+            click: function() {
+                var dialog = that.get_dialog('consume');
+                dialog.open(that.container);
+            }
+        });
+        button.replaceWith(that.consume_button);
+    };
+
+    that.refresh = function() {
+
+        function on_success(data, text_status, xhr) {
+
+            that.table.empty();
+
+            var result = data.result.result;
+            for (var i = 0; i<result.length; i++) {
+                var record = that.table.get_record(result[i], 0);
+                that.table.add_record(record);
+            }
+
+            var summary = $('span[name=summary]', that.table.tfoot);
+            if (data.result.truncated) {
+                var message = IPA.messages.search.truncated;
+                message = message.replace('${counter}', data.result.count);
+                summary.text(message);
+            } else {
+                summary.text(data.result.summary);
+            }
+        }
+
+        function on_error(xhr, text_status, error_thrown) {
+            var summary = $('span[name=summary]', that.table.tfoot).empty();
+            summary.append('<p>Error: '+error_thrown.name+'</p>');
+            summary.append('<p>'+error_thrown.title+'</p>');
+            summary.append('<p>'+error_thrown.message+'</p>');
+        }
+
+        var command = IPA.command({
+            method: 'entitle_get',
+            options: {
+                all: that.search_all
+            },
+            on_success: on_success,
+            on_error: on_error
+        });
+
+        command.execute();
+    };
+
+    return that;
+};
+
+IPA.entitle.consume_dialog = function(spec) {
+
+    spec = spec || {};
+
+    var that = IPA.dialog(spec);
+
+    that.add_button('Consume', function() {
+        var record = {};
+        that.save(record);
+
+        var command = IPA.command({
+            method: 'entitle_consume',
+            args: [ record.quantity ],
+            on_success: function() {
+                var entity = IPA.get_entity(that.entity_name);
+                var facet = entity.get_facet('search');
+                facet.table.refresh();
+                that.close();
+            }
+        });
+
+        command.execute();
+    });
+
+    that.add_button('Cancel', function() {
+        that.close();
+    });
+
+    return that;
+};
diff --git a/install/ui/index.html b/install/ui/index.html
index 83f0fb0eb5a00ebd3139f4721030b4d85e90f72d..011420f83e01bd510824028a0687264b06649a07 100644
--- a/install/ui/index.html
+++ b/install/ui/index.html
@@ -35,6 +35,7 @@
     <script type="text/javascript" src="sudo.js"></script>
     <script type="text/javascript" src="policy.js"></script>
     <script type="text/javascript" src="aci.js"></script>
+    <script type="text/javascript" src="entitle.js"></script>
 
 
     <script type="text/javascript" src="develop.js"></script>
diff --git a/install/ui/ipa.css b/install/ui/ipa.css
index a4189ac4472c244a8b7d85047f4ec7943050e863..20f5dd6c913748f3e5c81063dc99d6814eee0aac 100644
--- a/install/ui/ipa.css
+++ b/install/ui/ipa.css
@@ -471,6 +471,10 @@ span.ui-icon-search {
         margin-left: 1em !important;
 }
 
+[title="Consume"] {
+        margin-left: 1em !important;
+}
+
 [title="mail"] {
         margin-top: 0em !important;
 }
@@ -960,4 +964,4 @@ table.scrollable tbody {
 .expand-collapse-all {
     float: right;
     padding-right: 1.5em;
-}
\ No newline at end of file
+}
diff --git a/install/ui/test/data/entitle_consume.json b/install/ui/test/data/entitle_consume.json
new file mode 100644
index 0000000000000000000000000000000000000000..878bf7bbf9966b6191025751c5509ac1712d0aa6
--- /dev/null
+++ b/install/ui/test/data/entitle_consume.json
@@ -0,0 +1,24 @@
+{
+    "error": null,
+    "id": 0,
+    "result": {
+        "result": {
+            "consumed": 13,
+            "ipaentitlementid": [
+                "b788ccee-4b09-48f0-8a9a-2c769f7b41e0"
+            ],
+            "ipauniqueid": [
+                "c63b1972-5ffe-11e0-8340-00163e2fe6de"
+            ],
+            "objectclass": [
+                "ipaobject",
+                "ipaentitlement"
+            ],
+            "product": "MKT-multiplier-client-50",
+            "quantity": 250,
+            "uuid": "b788ccee-4b09-48f0-8a9a-2c769f7b41e0"
+        },
+        "summary": "Consumed 1 entitlement(s).",
+        "value": "1"
+    }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/entitle_find.json b/install/ui/test/data/entitle_find.json
new file mode 100644
index 0000000000000000000000000000000000000000..76bd437e25e37994b6adf70c963009112b58746d
--- /dev/null
+++ b/install/ui/test/data/entitle_find.json
@@ -0,0 +1,37 @@
+{
+    "error": null,
+    "id": 0,
+    "result": {
+        "count": 1,
+        "result": [
+            {
+                "dn": "ipaentitlementid=b788ccee-4b09-48f0-8a9a-2c769f7b41e0,cn=entitlements,cn=etc,dc=idm,dc=lab,dc=bos,dc=redhat,dc=com",
+                "ipaentitlementid": [
+                    "b788ccee-4b09-48f0-8a9a-2c769f7b41e0"
+                ],
+                "ipauniqueid": [
+                    "c63b1972-5ffe-11e0-8340-00163e2fe6de"
+                ],
+                "objectclass": [
+                    "ipaobject",
+                    "ipaentitlement"
+                ],
+                "usercertificate": [
+                    {
+                        "__base64__": "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"
+                    },
+                    {
+                        "__base64__": "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"
+                    }
+                ],
+                "userpkcs12": [
+                    {
+                        "__base64__": "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"
+                    }
+                ]
+            }
+        ],
+        "summary": null,
+        "truncated": false
+    }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/entitle_get.json b/install/ui/test/data/entitle_get.json
new file mode 100644
index 0000000000000000000000000000000000000000..2ecae3f2170ce1fd54dcf158f9a8e41e4a5d8a40
--- /dev/null
+++ b/install/ui/test/data/entitle_get.json
@@ -0,0 +1,27 @@
+{
+    "error": null,
+    "id": 0,
+    "result": {
+        "count": 2,
+        "result": [
+            {
+                "certificate": "-----BEGIN CERTIFICATE-----\nMIIHVTCCBr6gAwIBAgIIAJuMxFgwNhUwDQYJKoZIhvcNAQEFBQAwRzEmMCQGA1UE\nAwwddm0tMDIyLmlkbS5sYWIuYm9zLnJlZGhhdC5jb20xCzAJBgNVBAYTAlVTMRAw\nDgYDVQQHDAdSYWxlaWdoMB4XDTExMDQwNTAwMDAwMFoXDTEyMDQwNDAwMDAwMFow\nKzEpMCcGA1UEAwwgOGE5MGNlOTYyZjI4ZGFiYjAxMmYyOGViN2EyNjAyMjMwggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCD0eal/e5ua7opJhvPdd3nr36p\n2l2t2WMDPRtyOo+h7yZOspoW+qAavd8HwBEbLNjVq56oMyB5/5saE3ubVMxyYFl6\ndvCpyOy1irxFiZAt3bl1oV3Al8xL0Tieug1SMUOkbz18zcmr/fhGe2ShU5cx9HRf\nBBx2GexCyUzdn8JiJHpSRKLBxicCmNAwlrv847v32ymJYJ/069Qetx87Xv/Qlct9\nzRMbi/4EMZ2rwabtOt8ZEYufkhdZvQgm/uPmWEMKYqvkALl97MjfkPTv9IRv8Rry\npt/GgCATxHABAVCadYcnE/QYOWwhpJjIPIBwImtUgLKSfJMmep1nHOJfyeYNAgMB\nAAGjggTgMIIE3DARBglghkgBhvhCAQEEBAMCBaAwCwYDVR0PBAQDAgSwMHcGA1Ud\nIwRwMG6AFIzw8TMZRe2EemNNdk/OQJydGp/goUukSTBHMSYwJAYDVQQDDB12bS0w\nMjIuaWRtLmxhYi5ib3MucmVkaGF0LmNvbTELMAkGA1UEBhMCVVMxEDAOBgNVBAcM\nB1JhbGVpZ2iCCQC0zvfl5WJ2gTAdBgNVHQ4EFgQU/z8K8+VKhseEGe81ukYTXjCZ\n6TswEwYDVR0lBAwwCgYIKwYBBQUHAwIwKgYNKwYBBAGSCAkBuIBDAQQZDBdNdWx0\naXBsaWVyIFByb2R1Y3QgQml0czAUBgsrBgEEAZIICQIBAQQFDAN5dW0wKAYMKwYB\nBAGSCAkCAQEBBBgMFmFsd2F5cy1lbmFibGVkLWNvbnRlbnQwKAYMKwYBBAGSCAkC\nAQECBBgMFmFsd2F5cy1lbmFibGVkLWNvbnRlbnQwHQYMKwYBBAGSCAkCAQEFBA0M\nC3Rlc3QtdmVuZG9yMCIGDCsGAQQBkggJAgEBBgQSDBAvZm9vL3BhdGgvYWx3YXlz\nMCYGDCsGAQQBkggJAgEBBwQWDBQvZm9vL3BhdGgvYWx3YXlzL2dwZzATBgwrBgEE\nAZIICQIBAQQEAwwBMDATBgwrBgEEAZIICQIBAQMEAwwBMDATBgwrBgEEAZIICQIB\nAQgEAwwBMTAVBgwrBgEEAZIICQIBAQkEBQwDMjAwMBQGCysGAQQBkggJAgABBAUM\nA3l1bTAnBgwrBgEEAZIICQIAAQEEFwwVbmV2ZXItZW5hYmxlZC1jb250ZW50MCcG\nDCsGAQQBkggJAgABAgQXDBVuZXZlci1lbmFibGVkLWNvbnRlbnQwHQYMKwYBBAGS\nCAkCAAEFBA0MC3Rlc3QtdmVuZG9yMCEGDCsGAQQBkggJAgABBgQRDA8vZm9vL3Bh\ndGgvbmV2ZXIwJQYMKwYBBAGSCAkCAAEHBBUMEy9mb28vcGF0aC9uZXZlci9ncGcw\nEwYMKwYBBAGSCAkCAAEEBAMMATAwEwYMKwYBBAGSCAkCAAEDBAMMATAwEwYMKwYB\nBAGSCAkCAAEIBAMMATAwFQYMKwYBBAGSCAkCAAEJBAUMAzYwMDAzBgorBgEEAZII\nCQQBBCUMI011bHRpcGxpZXIgUHJvZHVjdCBDbGllbnQgUGFjayAoNTApMDAGCisG\nAQQBkggJBAIEIgwgOGE5MGNlOTYyZjI4ZGFiYjAxMmYyOGU3YTcxNTAxMTgwKAYK\nKwYBBAGSCAkEAwQaDBhNS1QtbXVsdGlwbGllci1jbGllbnQtNTAwEQYKKwYBBAGS\nCAkEBQQDDAE1MCQGCisGAQQBkggJBAYEFgwUMjAxMS0wNC0wNVQwMDowMDowMFow\nJAYKKwYBBAGSCAkEBwQWDBQyMDEyLTA0LTA0VDAwOjAwOjAwWjASBgorBgEEAZII\nCQQMBAQMAjMwMBIGCisGAQQBkggJBAoEBAwCNDIwGwYKKwYBBAGSCAkEDQQNDAsx\nMjMzMTEzMTIzMTARBgorBgEEAZIICQQOBAMMATAwEQYKKwYBBAGSCAkECwQDDAEz\nMDQGCisGAQQBkggJBQEEJgwkYjc4OGNjZWUtNGIwOS00OGYwLThhOWEtMmM3Njlm\nN2I0MWUwMA0GCSqGSIb3DQEBBQUAA4GBAGc7e1w8IkyBrhwgmPNSeYnvfgMzqWRa\nZnDPJ29u/xECc95/EU51/ieFsX91SXSxC7IOSHgy62AMVLDKomkx+i82a5iNjGxE\nEDEqodQgKioSsZ9zDJsBM8kQ3TeZgPrCxB0y/uKFwZ8QgZ74/EpEPj4v6gyOcF4r\nszDCTfb8V5/f\n-----END CERTIFICATE-----\n",
+                "end": "2012-04-04T00:00:00Z",
+                "product": "Multiplier Product Client Pack (50)",
+                "quantity": 3,
+                "serial": "43783396311184917",
+                "start": "2011-04-05T00:00:00Z"
+            },
+            {
+                "certificate": "-----BEGIN CERTIFICATE-----\nMIIHVTCCBr6gAwIBAgIIY9jsLQtqWO8wDQYJKoZIhvcNAQEFBQAwRzEmMCQGA1UE\nAwwddm0tMDIyLmlkbS5sYWIuYm9zLnJlZGhhdC5jb20xCzAJBgNVBAYTAlVTMRAw\nDgYDVQQHDAdSYWxlaWdoMB4XDTExMDQwNTAwMDAwMFoXDTEyMDQwNDAwMDAwMFow\nKzEpMCcGA1UEAwwgOGE5MGNlOTYyZjI4ZGFiYjAxMmYyOGU4MmNjYjAyMjAwggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCD0eal/e5ua7opJhvPdd3nr36p\n2l2t2WMDPRtyOo+h7yZOspoW+qAavd8HwBEbLNjVq56oMyB5/5saE3ubVMxyYFl6\ndvCpyOy1irxFiZAt3bl1oV3Al8xL0Tieug1SMUOkbz18zcmr/fhGe2ShU5cx9HRf\nBBx2GexCyUzdn8JiJHpSRKLBxicCmNAwlrv847v32ymJYJ/069Qetx87Xv/Qlct9\nzRMbi/4EMZ2rwabtOt8ZEYufkhdZvQgm/uPmWEMKYqvkALl97MjfkPTv9IRv8Rry\npt/GgCATxHABAVCadYcnE/QYOWwhpJjIPIBwImtUgLKSfJMmep1nHOJfyeYNAgMB\nAAGjggTgMIIE3DARBglghkgBhvhCAQEEBAMCBaAwCwYDVR0PBAQDAgSwMHcGA1Ud\nIwRwMG6AFIzw8TMZRe2EemNNdk/OQJydGp/goUukSTBHMSYwJAYDVQQDDB12bS0w\nMjIuaWRtLmxhYi5ib3MucmVkaGF0LmNvbTELMAkGA1UEBhMCVVMxEDAOBgNVBAcM\nB1JhbGVpZ2iCCQC0zvfl5WJ2gTAdBgNVHQ4EFgQU/z8K8+VKhseEGe81ukYTXjCZ\n6TswEwYDVR0lBAwwCgYIKwYBBQUHAwIwKgYNKwYBBAGSCAkBuIBDAQQZDBdNdWx0\naXBsaWVyIFByb2R1Y3QgQml0czAUBgsrBgEEAZIICQIBAQQFDAN5dW0wKAYMKwYB\nBAGSCAkCAQEBBBgMFmFsd2F5cy1lbmFibGVkLWNvbnRlbnQwKAYMKwYBBAGSCAkC\nAQECBBgMFmFsd2F5cy1lbmFibGVkLWNvbnRlbnQwHQYMKwYBBAGSCAkCAQEFBA0M\nC3Rlc3QtdmVuZG9yMCIGDCsGAQQBkggJAgEBBgQSDBAvZm9vL3BhdGgvYWx3YXlz\nMCYGDCsGAQQBkggJAgEBBwQWDBQvZm9vL3BhdGgvYWx3YXlzL2dwZzATBgwrBgEE\nAZIICQIBAQQEAwwBMDATBgwrBgEEAZIICQIBAQMEAwwBMDATBgwrBgEEAZIICQIB\nAQgEAwwBMTAVBgwrBgEEAZIICQIBAQkEBQwDMjAwMBQGCysGAQQBkggJAgABBAUM\nA3l1bTAnBgwrBgEEAZIICQIAAQEEFwwVbmV2ZXItZW5hYmxlZC1jb250ZW50MCcG\nDCsGAQQBkggJAgABAgQXDBVuZXZlci1lbmFibGVkLWNvbnRlbnQwHQYMKwYBBAGS\nCAkCAAEFBA0MC3Rlc3QtdmVuZG9yMCEGDCsGAQQBkggJAgABBgQRDA8vZm9vL3Bh\ndGgvbmV2ZXIwJQYMKwYBBAGSCAkCAAEHBBUMEy9mb28vcGF0aC9uZXZlci9ncGcw\nEwYMKwYBBAGSCAkCAAEEBAMMATAwEwYMKwYBBAGSCAkCAAEDBAMMATAwEwYMKwYB\nBAGSCAkCAAEIBAMMATAwFQYMKwYBBAGSCAkCAAEJBAUMAzYwMDAzBgorBgEEAZII\nCQQBBCUMI011bHRpcGxpZXIgUHJvZHVjdCBDbGllbnQgUGFjayAoNTApMDAGCisG\nAQQBkggJBAIEIgwgOGE5MGNlOTYyZjI4ZGFiYjAxMmYyOGU3YTcxNTAxMTgwKAYK\nKwYBBAGSCAkEAwQaDBhNS1QtbXVsdGlwbGllci1jbGllbnQtNTAwEQYKKwYBBAGS\nCAkEBQQDDAE1MCQGCisGAQQBkggJBAYEFgwUMjAxMS0wNC0wNVQwMDowMDowMFow\nJAYKKwYBBAGSCAkEBwQWDBQyMDEyLTA0LTA0VDAwOjAwOjAwWjASBgorBgEEAZII\nCQQMBAQMAjMwMBIGCisGAQQBkggJBAoEBAwCNDIwGwYKKwYBBAGSCAkEDQQNDAsx\nMjMzMTEzMTIzMTARBgorBgEEAZIICQQOBAMMATAwEQYKKwYBBAGSCAkECwQDDAEx\nMDQGCisGAQQBkggJBQEEJgwkYjc4OGNjZWUtNGIwOS00OGYwLThhOWEtMmM3Njlm\nN2I0MWUwMA0GCSqGSIb3DQEBBQUAA4GBAEigZmqXPj9m1oq+ZCDrW6xTvs7AGqz9\n6MQRSK6mmFt9XRG/2cs24JnJLPxwP8Eo+w051RkyijfLEzOaXACswPFvhmxnlJxT\n9QnVGYO2bmPhcDi+OwwQPvDNqG5K97vBOMctEKxIJWVC83ZkKRyjHDlRnZkfE3Xn\nbAGuhPD96lbg\n-----END CERTIFICATE-----\n",
+                "end": "2012-04-04T00:00:00Z",
+                "product": "Multiplier Product Client Pack (50)",
+                "quantity": 1,
+                "serial": "7194760082933569775",
+                "start": "2011-04-05T00:00:00Z"
+            }
+        ],
+        "summary": null,
+        "truncated": false
+    }
+}
\ No newline at end of file
diff --git a/install/ui/test/data/ipa_init.json b/install/ui/test/data/ipa_init.json
index 8b5426fd96919a2ffd3defb5b008ab91b8ccd749..55e4c7094bbe7ff6e885a1b5199cc9c4afd138e8 100644
--- a/install/ui/test/data/ipa_init.json
+++ b/install/ui/test/data/ipa_init.json
@@ -4625,6 +4625,61 @@
                         ],
                         "uuid_attribute": ""
                     },
+                    "entitle": {
+                        "aciattrs": [
+                            "ipaentitlementid",
+                            "ipauniqueid",
+                            "usercertificate",
+                            "userpkcs12"
+                        ],
+                        "attribute_members": {},
+                        "bindable": false,
+                        "container_dn": "cn=entitlements,cn=etc",
+                        "default_attributes": [
+                            "ipaentitlement"
+                        ],
+                        "hidden_attributes": [
+                            "objectclass",
+                            "aci"
+                        ],
+                        "label": "Entitlements",
+                        "methods": [
+                            "consume",
+                            "find",
+                            "import",
+                            "register",
+                            "sync"
+                        ],
+                        "name": "entitle",
+                        "object_class": [
+                            "ipaobject",
+                            "ipaentitlement"
+                        ],
+                        "object_class_config": null,
+                        "object_name": "entitlement",
+                        "object_name_plural": "entitlements",
+                        "parent_object": "",
+                        "rdn_attribute": "",
+                        "relationships": {
+                            "member": [
+                                "Member",
+                                "",
+                                "no_"
+                            ],
+                            "memberindirect": [
+                                "Indirect Member",
+                                null,
+                                "no_indirect_"
+                            ],
+                            "memberof": [
+                                "Member Of",
+                                "in_",
+                                "not_in_"
+                            ]
+                        },
+                        "takes_params": [],
+                        "uuid_attribute": "ipaentitlementid"
+                    },
                     "group": {
                         "aciattrs": [
                             "businesscategory",
@@ -9939,4 +9994,4 @@
             }
         ]
     }
-}
\ No newline at end of file
+}
diff --git a/install/ui/webui.js b/install/ui/webui.js
index 4e2c78c479835ce119280390de6f0257a4684ae8..bf60fa19bc8d637b92b8448e3ab2b7205e18ab29 100644
--- a/install/ui/webui.js
+++ b/install/ui/webui.js
@@ -59,6 +59,7 @@ IPA.admin_tab_set = function () {
             ]},
             {name:'selfservice'  ,entity:'selfservice'},
             {name:'delegation'  ,entity:'delegation'},
+            {name:'entitle', entity:'entitle'},
             {name:'config', entity:'config'}
         ]}];
 
diff --git a/ipalib/plugins/entitle.py b/ipalib/plugins/entitle.py
index aeb325b6be9c386fb728b573211ff0d3d445394d..ad4c2c6dfd80f28bbee37eb63ffe43330cfb9037 100644
--- a/ipalib/plugins/entitle.py
+++ b/ipalib/plugins/entitle.py
@@ -195,6 +195,8 @@ class entitle(LDAPObject):
     default_attributes = ['ipaentitlement']
     uuid_attribute = 'ipaentitlementid'
 
+    label = _('Entitlements')
+
     """
     def get_dn(self, *keys, **kwargs):
         try:
-- 
1.7.4

_______________________________________________
Freeipa-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to