mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
UI support for ssh keys
To user and host details pages was added ipasshpubkey attribute. New widget for ssh public keys was created. https://fedorahosted.org/freeipa/ticket/2340
This commit is contained in:
parent
651f932473
commit
eb87b8c319
@ -148,22 +148,28 @@ IPA.field = function(spec) {
|
|||||||
that.load = function(record) {
|
that.load = function(record) {
|
||||||
that.record = record;
|
that.record = record;
|
||||||
|
|
||||||
var value = record[that.name];
|
that.values = that.get_value(record, that.name);
|
||||||
if (value instanceof Array) {
|
|
||||||
that.values = value;
|
|
||||||
} else {
|
|
||||||
that.values = value !== undefined ? [value] : [];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!that.values.length) {
|
|
||||||
that.values = [''];
|
|
||||||
}
|
|
||||||
|
|
||||||
that.load_writable(record);
|
that.load_writable(record);
|
||||||
|
|
||||||
that.reset();
|
that.reset();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
that.get_value = function(record, name) {
|
||||||
|
|
||||||
|
var value = record[name];
|
||||||
|
|
||||||
|
if (!(value instanceof Array)) {
|
||||||
|
value = value !== undefined ? [value] : [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!value.length) {
|
||||||
|
value = [''];
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
|
||||||
that.load_writable = function(record) {
|
that.load_writable = function(record) {
|
||||||
|
|
||||||
that.writable = true;
|
that.writable = true;
|
||||||
@ -272,16 +278,21 @@ IPA.field = function(spec) {
|
|||||||
//compare values in array
|
//compare values in array
|
||||||
if (values.length !== that.values.length) return true;
|
if (values.length !== that.values.length) return true;
|
||||||
|
|
||||||
values.sort();
|
return !that.dirty_are_equal(that.values, values);
|
||||||
that.values.sort();
|
};
|
||||||
|
|
||||||
for (var i=0; i<values.length; i++) {
|
that.dirty_are_equal = function(orig_vals, new_vals) {
|
||||||
if (values[i] != that.values[i]) {
|
|
||||||
return true;
|
orig_vals.sort();
|
||||||
|
new_vals.sort();
|
||||||
|
|
||||||
|
for (var i=0; i<orig_vals.length; i++) {
|
||||||
|
if (orig_vals[i] !== new_vals[i]) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
that.is_empty = function(value) {
|
that.is_empty = function(value) {
|
||||||
@ -382,6 +393,7 @@ IPA.field = function(spec) {
|
|||||||
init();
|
init();
|
||||||
|
|
||||||
// methods that should be invoked by subclasses
|
// methods that should be invoked by subclasses
|
||||||
|
that.field_dirty_are_equal = that.dirty_are_equal;
|
||||||
that.field_load = that.load;
|
that.field_load = that.load;
|
||||||
that.field_reset = that.reset;
|
that.field_reset = that.reset;
|
||||||
that.field_save = that.save;
|
that.field_save = that.save;
|
||||||
@ -567,6 +579,56 @@ IPA.multivalued_field = function(spec) {
|
|||||||
return that;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
IPA.sshkeys_field = function(spec) {
|
||||||
|
|
||||||
|
spec = spec || {};
|
||||||
|
|
||||||
|
var that = IPA.multivalued_field(spec);
|
||||||
|
|
||||||
|
that.sshfp_attr = 'sshpubkeyfp' || spec.sshfp_attr;
|
||||||
|
|
||||||
|
that.load = function(record) {
|
||||||
|
|
||||||
|
var keys = that.get_value(record, that.name);
|
||||||
|
var fingerprints = that.get_value(record, that.sshfp_attr);
|
||||||
|
|
||||||
|
var values = [];
|
||||||
|
|
||||||
|
if (keys.length === fingerprints.length) {
|
||||||
|
for (var i=0; i<keys.length; i++) {
|
||||||
|
|
||||||
|
if (keys[i] === '') continue;
|
||||||
|
|
||||||
|
var value = {
|
||||||
|
key: keys[i].__base64__,
|
||||||
|
fingerprint: fingerprints[i]
|
||||||
|
};
|
||||||
|
values.push(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
that.values = values;
|
||||||
|
|
||||||
|
that.load_writable(record);
|
||||||
|
|
||||||
|
that.reset();
|
||||||
|
};
|
||||||
|
|
||||||
|
that.dirty_are_equal = function(orig_vals, new_vals) {
|
||||||
|
|
||||||
|
var i;
|
||||||
|
var orig_keys = [];
|
||||||
|
|
||||||
|
for (i=0; i<orig_vals.length; i++) {
|
||||||
|
orig_keys.push(orig_vals[i].key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return that.field_dirty_are_equal(orig_keys, new_vals);
|
||||||
|
};
|
||||||
|
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
IPA.select_field = function(spec) {
|
IPA.select_field = function(spec) {
|
||||||
|
|
||||||
spec = spec || {};
|
spec = spec || {};
|
||||||
@ -805,3 +867,4 @@ IPA.field_factories['entity_select'] = IPA.combobox_field;
|
|||||||
IPA.field_factories['combobox'] = IPA.combobox_field;
|
IPA.field_factories['combobox'] = IPA.combobox_field;
|
||||||
IPA.field_factories['link'] = IPA.link_field;
|
IPA.field_factories['link'] = IPA.link_field;
|
||||||
IPA.field_factories['enable'] = IPA.enable_field;
|
IPA.field_factories['enable'] = IPA.enable_field;
|
||||||
|
IPA.field_factories['sshkeys'] = IPA.sshkeys_field;
|
@ -63,7 +63,12 @@ IPA.host.entity = function(spec) {
|
|||||||
'l',
|
'l',
|
||||||
'nshostlocation',
|
'nshostlocation',
|
||||||
'nshardwareplatform',
|
'nshardwareplatform',
|
||||||
'nsosversion'
|
'nsosversion',
|
||||||
|
{
|
||||||
|
type: 'sshkeys',
|
||||||
|
name: 'ipasshpubkey',
|
||||||
|
label: IPA.messages.objects.sshkeystore.keys
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1251,11 +1251,11 @@ table.scrollable tbody {
|
|||||||
width: 250px;
|
width: 250px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.multivalued-text-widget [name=value] {
|
.multivalued-widget [name=value] {
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.multivalued-text-widget input {
|
.multivalued-widget input {
|
||||||
width: 250px;
|
width: 250px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1487,6 +1487,11 @@ div.entity[name=hbactest] div.facet[name=run_test] .hbac-test-content {
|
|||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --- SSH key store --- */
|
||||||
|
|
||||||
|
span.sshkey-status, a.sshkey-set {
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
/* --- Automember --- */
|
/* --- Automember --- */
|
||||||
|
|
||||||
.automember-header {
|
.automember-header {
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"enrolledby": "rsc",
|
"enrolledby": "rsc",
|
||||||
"fqdn": "rscwo",
|
"fqdn": "rscwo",
|
||||||
"ipaclientversion": "rscwo",
|
"ipaclientversion": "rscwo",
|
||||||
|
"ipasshpubkey": "rscwo",
|
||||||
"ipauniqueid": "rsc",
|
"ipauniqueid": "rsc",
|
||||||
"krbcanonicalname": "rscwo",
|
"krbcanonicalname": "rscwo",
|
||||||
"krbextradata": "rscwo",
|
"krbextradata": "rscwo",
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"enrolledby": "rsc",
|
"enrolledby": "rsc",
|
||||||
"fqdn": "rscwo",
|
"fqdn": "rscwo",
|
||||||
"ipaclientversion": "rscwo",
|
"ipaclientversion": "rscwo",
|
||||||
|
"ipasshpubkey": "rscwo",
|
||||||
"ipauniqueid": "rsc",
|
"ipauniqueid": "rsc",
|
||||||
"krbcanonicalname": "rsc",
|
"krbcanonicalname": "rsc",
|
||||||
"krbextradata": "rsc",
|
"krbextradata": "rsc",
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"enrolledby": "rsc",
|
"enrolledby": "rsc",
|
||||||
"fqdn": "rscwo",
|
"fqdn": "rscwo",
|
||||||
"ipaclientversion": "rscwo",
|
"ipaclientversion": "rscwo",
|
||||||
|
"ipasshpubkey": "rscwo",
|
||||||
"ipauniqueid": "rsc",
|
"ipauniqueid": "rsc",
|
||||||
"krbcanonicalname": "rsc",
|
"krbcanonicalname": "rsc",
|
||||||
"krbextradata": "rsc",
|
"krbextradata": "rsc",
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"enrolledby": "rsc",
|
"enrolledby": "rsc",
|
||||||
"fqdn": "rscwo",
|
"fqdn": "rscwo",
|
||||||
"ipaclientversion": "rscwo",
|
"ipaclientversion": "rscwo",
|
||||||
|
"ipasshpubkey": "rscwo",
|
||||||
"ipauniqueid": "rsc",
|
"ipauniqueid": "rsc",
|
||||||
"krbcanonicalname": "rsc",
|
"krbcanonicalname": "rsc",
|
||||||
"krbextradata": "rsc",
|
"krbextradata": "rsc",
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
"restore": "Restore",
|
"restore": "Restore",
|
||||||
"retry": "Retry",
|
"retry": "Retry",
|
||||||
"revoke": "Revoke",
|
"revoke": "Revoke",
|
||||||
|
"set": "Set",
|
||||||
"update": "Update",
|
"update": "Update",
|
||||||
"view": "View"
|
"view": "View"
|
||||||
},
|
},
|
||||||
@ -318,6 +319,16 @@
|
|||||||
"unprovision_title": "Unprovisioning ${entity}",
|
"unprovision_title": "Unprovisioning ${entity}",
|
||||||
"valid": "Kerberos Key Present, Service Provisioned"
|
"valid": "Kerberos Key Present, Service Provisioned"
|
||||||
},
|
},
|
||||||
|
"sshkeystore": {
|
||||||
|
"keys": "SSH public keys",
|
||||||
|
"set_dialog_help": "Base-64 encoded SSH public key:",
|
||||||
|
"set_dialog_title": "Set SSH key",
|
||||||
|
"show_set_key": "Show/Set key",
|
||||||
|
"status_mod_ns": "Modified: key not set",
|
||||||
|
"status_mod_s": "Modified",
|
||||||
|
"status_new_ns": "New: key not set",
|
||||||
|
"status_new_s": "New: key set"
|
||||||
|
},
|
||||||
"sudocmd": {
|
"sudocmd": {
|
||||||
"groups": "Groups"
|
"groups": "Groups"
|
||||||
},
|
},
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
"inetuserstatus": "rscwo",
|
"inetuserstatus": "rscwo",
|
||||||
"initials": "rscwo",
|
"initials": "rscwo",
|
||||||
"internationalisdnnumber": "rscwo",
|
"internationalisdnnumber": "rscwo",
|
||||||
|
"ipasshpubkey": "rscwo",
|
||||||
"ipauniqueid": "rsc",
|
"ipauniqueid": "rsc",
|
||||||
"jpegphoto": "rscwo",
|
"jpegphoto": "rscwo",
|
||||||
"krbcanonicalname": "rscwo",
|
"krbcanonicalname": "rscwo",
|
||||||
@ -107,6 +108,14 @@
|
|||||||
"homedirectory": [
|
"homedirectory": [
|
||||||
"/home/kfrog"
|
"/home/kfrog"
|
||||||
],
|
],
|
||||||
|
"ipasshpubkey": [
|
||||||
|
{
|
||||||
|
"__base64__": "AAAAB3NzaC1kc3MAAACBAJQdBmxjnYdDzpGPzAD2kkoRwGbPIqVsu6mR0eyLjMJafQPbOkrgFpIwxAhb519FHAr0olSOklwq5Pvkm7rSpnoXDAEoVlW5jNCj33NrYkVJTAmtsa4ihZIqz7KJYkYifQyBxy8nYScAlEu1a1k9xfbRT8ZAmiCqgd6klWaKZXHBAAAAFQCd2wJW3Rb7kclRPbKaRF1hhdW+hwAAAIBr9ZozKls1lAkqMZuhGgnvlFg5J7DXKRY6iju1VfMc5HiY1mq197Qq2PVi4iQ1Ach3Pvj/MZGLhz/SyIsH59Uugl21KeQjk2HHt/ZLL1PrJvm9LmX3Fv2E8lQNnEyPaA2Ngf6O0bbzii41lp1F6wo3xQLJCLldljcG+wskRf5RrgAAAIAKTDWct9ES5BZADb3TfBAng2aeeojg6rDhS6i0WYPtna2hjCdRaCnnXM079JVcYBq3IK7mFpINnqnn252Mr9OqGsu/92gglfpTpXq2Lzkvd2dbcyTPQmNBM7+KFlUOZ4hWb4c5CVLBwILccL7QakwSHRYlRhCsDyKbI+2qPGwrXg=="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__base64__": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCaoWIiTBqTqsWnAHFUfOUNY65sk2KuEp798ESyDWmOuJbjQNHG0grl8d5D9/OMuDvSHAthkTR4rXn1QAMm+Geh63XhS+nnEpzinPKloMWyF8wsNEw117TX2mA8wzeea1HDcqd0v4YKyU5FAHm+6hOALB9mrAnRZ4WoTY6NWtm3aoRge1D26pOuLRyNFB5Etwa7cmJqaK8EeHN0XNPIbaAP1JNVe46wyYvMlE/yhGYS9qW36OJpQBJGk9nYqHT3/6ai2w3TQ8k5puvAwBcCe0wYhBE9o8c5PmImIfa8lZ3Oo2gHIiOyA9gyHv3MBqUxXBC6PmmYHEr6y/wnYnfSHF+N"
|
||||||
|
}
|
||||||
|
],
|
||||||
"ipauniqueid": [
|
"ipauniqueid": [
|
||||||
"a2854798-e7d811df-b69ad8ca-cb44a24c"
|
"a2854798-e7d811df-b69ad8ca-cb44a24c"
|
||||||
],
|
],
|
||||||
@ -162,6 +171,10 @@
|
|||||||
"sn": [
|
"sn": [
|
||||||
"Frog"
|
"Frog"
|
||||||
],
|
],
|
||||||
|
"sshpubkeyfp": [
|
||||||
|
"6E:70:C6:8E:88:2F:F1:5D:63:B4:C5:D1:B8:A6:D6:0C (ssh-dss)",
|
||||||
|
"93:23:CD:AE:50:0F:BF:0A:EB:2C:0C:1A:0B:18:DF:0A (ssh-rsa)"
|
||||||
|
],
|
||||||
"uid": [
|
"uid": [
|
||||||
"kfrog"
|
"kfrog"
|
||||||
],
|
],
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
"inetuserstatus": "rscwo",
|
"inetuserstatus": "rscwo",
|
||||||
"initials": "rscwo",
|
"initials": "rscwo",
|
||||||
"internationalisdnnumber": "rscwo",
|
"internationalisdnnumber": "rscwo",
|
||||||
|
"ipasshpubkey": "rscwo",
|
||||||
"ipauniqueid": "rsc",
|
"ipauniqueid": "rsc",
|
||||||
"jpegphoto": "rscwo",
|
"jpegphoto": "rscwo",
|
||||||
"krbcanonicalname": "rscwo",
|
"krbcanonicalname": "rscwo",
|
||||||
@ -103,6 +104,14 @@
|
|||||||
"homedirectory": [
|
"homedirectory": [
|
||||||
"/home/kfrog"
|
"/home/kfrog"
|
||||||
],
|
],
|
||||||
|
"ipasshpubkey": [
|
||||||
|
{
|
||||||
|
"__base64__": "AAAAB3NzaC1kc3MAAACBAJQdBmxjnYdDzpGPzAD2kkoRwGbPIqVsu6mR0eyLjMJafQPbOkrgFpIwxAhb519FHAr0olSOklwq5Pvkm7rSpnoXDAEoVlW5jNCj33NrYkVJTAmtsa4ihZIqz7KJYkYifQyBxy8nYScAlEu1a1k9xfbRT8ZAmiCqgd6klWaKZXHBAAAAFQCd2wJW3Rb7kclRPbKaRF1hhdW+hwAAAIBr9ZozKls1lAkqMZuhGgnvlFg5J7DXKRY6iju1VfMc5HiY1mq197Qq2PVi4iQ1Ach3Pvj/MZGLhz/SyIsH59Uugl21KeQjk2HHt/ZLL1PrJvm9LmX3Fv2E8lQNnEyPaA2Ngf6O0bbzii41lp1F6wo3xQLJCLldljcG+wskRf5RrgAAAIAKTDWct9ES5BZADb3TfBAng2aeeojg6rDhS6i0WYPtna2hjCdRaCnnXM079JVcYBq3IK7mFpINnqnn252Mr9OqGsu/92gglfpTpXq2Lzkvd2dbcyTPQmNBM7+KFlUOZ4hWb4c5CVLBwILccL7QakwSHRYlRhCsDyKbI+2qPGwrXg=="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__base64__": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCaoWIiTBqTqsWnAHFUfOUNY65sk2KuEp798ESyDWmOuJbjQNHG0grl8d5D9/OMuDvSHAthkTR4rXn1QAMm+Geh63XhS+nnEpzinPKloMWyF8wsNEw117TX2mA8wzeea1HDcqd0v4YKyU5FAHm+6hOALB9mrAnRZ4WoTY6NWtm3aoRge1D26pOuLRyNFB5Etwa7cmJqaK8EeHN0XNPIbaAP1JNVe46wyYvMlE/yhGYS9qW36OJpQBJGk9nYqHT3/6ai2w3TQ8k5puvAwBcCe0wYhBE9o8c5PmImIfa8lZ3Oo2gHIiOyA9gyHv3MBqUxXBC6PmmYHEr6y/wnYnfSHF+N"
|
||||||
|
}
|
||||||
|
],
|
||||||
"ipauniqueid": [
|
"ipauniqueid": [
|
||||||
"a2854798-e7d811df-b69ad8ca-cb44a24c"
|
"a2854798-e7d811df-b69ad8ca-cb44a24c"
|
||||||
],
|
],
|
||||||
@ -149,6 +158,10 @@
|
|||||||
"sn": [
|
"sn": [
|
||||||
"Frog"
|
"Frog"
|
||||||
],
|
],
|
||||||
|
"sshpubkeyfp": [
|
||||||
|
"6E:70:C6:8E:88:2F:F1:5D:63:B4:C5:D1:B8:A6:D6:0C (ssh-dss)",
|
||||||
|
"93:23:CD:AE:50:0F:BF:0A:EB:2C:0C:1A:0B:18:DF:0A (ssh-rsa)"
|
||||||
|
],
|
||||||
"uid": [
|
"uid": [
|
||||||
"kfrog"
|
"kfrog"
|
||||||
],
|
],
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
"inetuserstatus": "rscwo",
|
"inetuserstatus": "rscwo",
|
||||||
"initials": "rscwo",
|
"initials": "rscwo",
|
||||||
"internationalisdnnumber": "rscwo",
|
"internationalisdnnumber": "rscwo",
|
||||||
|
"ipasshpubkey": "rscwo",
|
||||||
"ipauniqueid": "rsc",
|
"ipauniqueid": "rsc",
|
||||||
"jpegphoto": "rscwo",
|
"jpegphoto": "rscwo",
|
||||||
"krbcanonicalname": "rscwo",
|
"krbcanonicalname": "rscwo",
|
||||||
@ -104,6 +105,14 @@
|
|||||||
"homedirectory": [
|
"homedirectory": [
|
||||||
"/home/kfrog"
|
"/home/kfrog"
|
||||||
],
|
],
|
||||||
|
"ipasshpubkey": [
|
||||||
|
{
|
||||||
|
"__base64__": "AAAAB3NzaC1kc3MAAACBAJQdBmxjnYdDzpGPzAD2kkoRwGbPIqVsu6mR0eyLjMJafQPbOkrgFpIwxAhb519FHAr0olSOklwq5Pvkm7rSpnoXDAEoVlW5jNCj33NrYkVJTAmtsa4ihZIqz7KJYkYifQyBxy8nYScAlEu1a1k9xfbRT8ZAmiCqgd6klWaKZXHBAAAAFQCd2wJW3Rb7kclRPbKaRF1hhdW+hwAAAIBr9ZozKls1lAkqMZuhGgnvlFg5J7DXKRY6iju1VfMc5HiY1mq197Qq2PVi4iQ1Ach3Pvj/MZGLhz/SyIsH59Uugl21KeQjk2HHt/ZLL1PrJvm9LmX3Fv2E8lQNnEyPaA2Ngf6O0bbzii41lp1F6wo3xQLJCLldljcG+wskRf5RrgAAAIAKTDWct9ES5BZADb3TfBAng2aeeojg6rDhS6i0WYPtna2hjCdRaCnnXM079JVcYBq3IK7mFpINnqnn252Mr9OqGsu/92gglfpTpXq2Lzkvd2dbcyTPQmNBM7+KFlUOZ4hWb4c5CVLBwILccL7QakwSHRYlRhCsDyKbI+2qPGwrXg=="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__base64__": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCaoWIiTBqTqsWnAHFUfOUNY65sk2KuEp798ESyDWmOuJbjQNHG0grl8d5D9/OMuDvSHAthkTR4rXn1QAMm+Geh63XhS+nnEpzinPKloMWyF8wsNEw117TX2mA8wzeea1HDcqd0v4YKyU5FAHm+6hOALB9mrAnRZ4WoTY6NWtm3aoRge1D26pOuLRyNFB5Etwa7cmJqaK8EeHN0XNPIbaAP1JNVe46wyYvMlE/yhGYS9qW36OJpQBJGk9nYqHT3/6ai2w3TQ8k5puvAwBcCe0wYhBE9o8c5PmImIfa8lZ3Oo2gHIiOyA9gyHv3MBqUxXBC6PmmYHEr6y/wnYnfSHF+N"
|
||||||
|
}
|
||||||
|
],
|
||||||
"ipauniqueid": [
|
"ipauniqueid": [
|
||||||
"a2854798-e7d811df-b69ad8ca-cb44a24c"
|
"a2854798-e7d811df-b69ad8ca-cb44a24c"
|
||||||
],
|
],
|
||||||
@ -159,6 +168,10 @@
|
|||||||
"sn": [
|
"sn": [
|
||||||
"Frog"
|
"Frog"
|
||||||
],
|
],
|
||||||
|
"sshpubkeyfp": [
|
||||||
|
"6E:70:C6:8E:88:2F:F1:5D:63:B4:C5:D1:B8:A6:D6:0C (ssh-dss)",
|
||||||
|
"93:23:CD:AE:50:0F:BF:0A:EB:2C:0C:1A:0B:18:DF:0A (ssh-rsa)"
|
||||||
|
],
|
||||||
"uid": [
|
"uid": [
|
||||||
"kfrog"
|
"kfrog"
|
||||||
],
|
],
|
||||||
|
@ -211,7 +211,7 @@ test("Testing text widget.", function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("Testing multi-valued text widget.", function() {
|
test("Testing multi-valued text widget.", function() {
|
||||||
factory = IPA.multivalued_text_widget;
|
factory = IPA.multivalued_widget;
|
||||||
spec = {undo:true,name:'title'};
|
spec = {undo:true,name:'title'};
|
||||||
base_widget_test('test_value');
|
base_widget_test('test_value');
|
||||||
widget_string_test();
|
widget_string_test();
|
||||||
|
@ -91,7 +91,12 @@ IPA.user.entity = function(spec) {
|
|||||||
'uidnumber',
|
'uidnumber',
|
||||||
'gidnumber',
|
'gidnumber',
|
||||||
'loginshell',
|
'loginshell',
|
||||||
'homedirectory'
|
'homedirectory',
|
||||||
|
{
|
||||||
|
type: 'sshkeys',
|
||||||
|
name: 'ipasshpubkey',
|
||||||
|
label: IPA.messages.objects.sshkeystore.keys
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -308,7 +308,7 @@ IPA.password_widget = function(spec) {
|
|||||||
return that;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
IPA.multivalued_text_widget = function(spec) {
|
IPA.multivalued_widget = function(spec) {
|
||||||
|
|
||||||
spec = spec || {};
|
spec = spec || {};
|
||||||
|
|
||||||
@ -322,9 +322,12 @@ IPA.multivalued_text_widget = function(spec) {
|
|||||||
that.rows = [];
|
that.rows = [];
|
||||||
|
|
||||||
that.on_child_value_changed = function(row) {
|
that.on_child_value_changed = function(row) {
|
||||||
if(that.test_dirty_row(row)) {
|
if (that.test_dirty_row(row)) {
|
||||||
row.widget.show_undo();
|
row.widget.show_undo();
|
||||||
row.remove_link.hide();
|
row.remove_link.hide();
|
||||||
|
} else {
|
||||||
|
row.widget.hide_undo();
|
||||||
|
row.remove_link.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
that.value_changed.notify([], that);
|
that.value_changed.notify([], that);
|
||||||
@ -473,7 +476,7 @@ IPA.multivalued_text_widget = function(spec) {
|
|||||||
|
|
||||||
that.create = function(container) {
|
that.create = function(container) {
|
||||||
|
|
||||||
container.addClass('multivalued-text-widget');
|
container.addClass('multivalued-widget');
|
||||||
|
|
||||||
that.widget_create(container);
|
that.widget_create(container);
|
||||||
|
|
||||||
@ -2813,6 +2816,202 @@ IPA.widget_builder = function(spec) {
|
|||||||
return that;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
IPA.sshkeys_widget = function(spec) {
|
||||||
|
|
||||||
|
spec = spec || {};
|
||||||
|
spec.widget_factory = IPA.sshkey_widget;
|
||||||
|
|
||||||
|
var that = IPA.multivalued_widget(spec);
|
||||||
|
|
||||||
|
that.test_dirty_row = function(row) {
|
||||||
|
|
||||||
|
if(row.deleted || row.is_new) return true;
|
||||||
|
|
||||||
|
var values = row.widget.save();
|
||||||
|
|
||||||
|
var key = values[0];
|
||||||
|
var original_key = row.original_values[0];
|
||||||
|
|
||||||
|
if (original_key && original_key.key && original_key.key !== key) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
IPA.sshkey_widget = function(spec) {
|
||||||
|
|
||||||
|
spec = spec || {};
|
||||||
|
|
||||||
|
var that = IPA.input_widget(spec);
|
||||||
|
|
||||||
|
that.key = null;
|
||||||
|
that.originally_set = false;
|
||||||
|
|
||||||
|
that.create = function(container) {
|
||||||
|
|
||||||
|
that.widget_create(container);
|
||||||
|
|
||||||
|
container.addClass('text-widget');
|
||||||
|
|
||||||
|
that.status_label = $('<span />', {
|
||||||
|
'class': 'sshkey-status',
|
||||||
|
text: ''
|
||||||
|
}).appendTo(container);
|
||||||
|
|
||||||
|
that.link = $('<a/>', {
|
||||||
|
type: that.type,
|
||||||
|
'class': 'sshkey-set',
|
||||||
|
name: that.name,
|
||||||
|
href: '#show-certificate',
|
||||||
|
title: that.tooltip,
|
||||||
|
text: IPA.messages.objects.sshkeystore.show_set_key,
|
||||||
|
onclick: function() {
|
||||||
|
that.open_edit_dialog();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}).appendTo(container);
|
||||||
|
|
||||||
|
if (that.undo) {
|
||||||
|
that.create_undo(container);
|
||||||
|
}
|
||||||
|
|
||||||
|
that.create_error_link(container);
|
||||||
|
};
|
||||||
|
|
||||||
|
that.update = function(values) {
|
||||||
|
|
||||||
|
var key = values && values.length ? values[0] : null;
|
||||||
|
|
||||||
|
if (!key || key === '') {
|
||||||
|
key = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
that.key = $.extend({}, key);
|
||||||
|
|
||||||
|
if (that.key.key && that.key.key !== '' &&
|
||||||
|
that.key.fingerprint && that.key.fingerprint !== '') {
|
||||||
|
that.originally_set = true;
|
||||||
|
that.original_key = that.key.key;
|
||||||
|
}
|
||||||
|
that.update_link();
|
||||||
|
};
|
||||||
|
|
||||||
|
that.set_deleted = function(deleted) {
|
||||||
|
if (deleted) {
|
||||||
|
that.status_label.addClass('strikethrough');
|
||||||
|
} else {
|
||||||
|
that.status_label.removeClass('strikethrough');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
that.save = function() {
|
||||||
|
var value = that.key.key;
|
||||||
|
value = value ? [value] : [''];
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
|
||||||
|
that.update_link = function() {
|
||||||
|
var text = that.get_status();
|
||||||
|
that.status_label.text(text);
|
||||||
|
};
|
||||||
|
|
||||||
|
that.get_status = function() {
|
||||||
|
|
||||||
|
var text = '';
|
||||||
|
var value = that.key.key;
|
||||||
|
|
||||||
|
if (that.original_key) {
|
||||||
|
|
||||||
|
if (value !== that.original_key) {
|
||||||
|
if (value === '') {
|
||||||
|
text = IPA.messages.objects.sshkeystore.status_mod_ns;
|
||||||
|
} else {
|
||||||
|
text = IPA.messages.objects.sshkeystore.status_mod_s;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
text = that.key.fingerprint;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!value || value === '') {
|
||||||
|
text = IPA.messages.objects.sshkeystore.status_new_ns;
|
||||||
|
} else {
|
||||||
|
text = IPA.messages.objects.sshkeystore.status_new_s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return text;
|
||||||
|
};
|
||||||
|
|
||||||
|
that.set_user_value = function(value) {
|
||||||
|
|
||||||
|
var previous = that.key.key;
|
||||||
|
that.key.key = value;
|
||||||
|
that.update_link();
|
||||||
|
|
||||||
|
if (value !== previous) {
|
||||||
|
that.value_changed.notify([], that);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
that.open_edit_dialog = function() {
|
||||||
|
|
||||||
|
var dialog = that.create_edit_dialog();
|
||||||
|
dialog.open();
|
||||||
|
};
|
||||||
|
|
||||||
|
that.create_edit_dialog = function() {
|
||||||
|
|
||||||
|
var dialog = IPA.dialog({
|
||||||
|
title: IPA.messages.objects.sshkeystore.set_dialog_title,
|
||||||
|
width: 500,
|
||||||
|
height: 380
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog.message = IPA.messages.objects.sshkeystore.set_dialog_help;
|
||||||
|
|
||||||
|
dialog.create_button({
|
||||||
|
name: 'update',
|
||||||
|
label: IPA.messages.buttons.set,
|
||||||
|
click: function() {
|
||||||
|
var value = dialog.textarea.val();
|
||||||
|
that.set_user_value(value);
|
||||||
|
dialog.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog.create_button({
|
||||||
|
name: 'cancel',
|
||||||
|
label: IPA.messages.buttons.cancel,
|
||||||
|
click: function() {
|
||||||
|
dialog.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
dialog.create = function() {
|
||||||
|
|
||||||
|
dialog.container.append(dialog.message);
|
||||||
|
|
||||||
|
dialog.textarea = $('<textarea/>', {
|
||||||
|
'class': 'certificate',
|
||||||
|
readonly: that.read_only
|
||||||
|
}).appendTo(dialog.container);
|
||||||
|
|
||||||
|
var key = that.key.key || '';
|
||||||
|
dialog.textarea.val(key);
|
||||||
|
};
|
||||||
|
|
||||||
|
return dialog;
|
||||||
|
};
|
||||||
|
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
IPA.widget_factories['attribute_table'] = IPA.attribute_table_widget;
|
IPA.widget_factories['attribute_table'] = IPA.attribute_table_widget;
|
||||||
IPA.widget_factories['checkbox'] = IPA.checkbox_widget;
|
IPA.widget_factories['checkbox'] = IPA.checkbox_widget;
|
||||||
@ -2825,9 +3024,10 @@ IPA.widget_factories['enable'] = IPA.enable_widget;
|
|||||||
IPA.widget_factories['entity_select'] = IPA.entity_select_widget;
|
IPA.widget_factories['entity_select'] = IPA.entity_select_widget;
|
||||||
IPA.widget_factories['header'] = IPA.header_widget;
|
IPA.widget_factories['header'] = IPA.header_widget;
|
||||||
IPA.widget_factories['link'] = IPA.link_widget;
|
IPA.widget_factories['link'] = IPA.link_widget;
|
||||||
IPA.widget_factories['multivalued'] = IPA.multivalued_text_widget;
|
IPA.widget_factories['multivalued'] = IPA.multivalued_widget;
|
||||||
IPA.widget_factories['password'] = IPA.password_widget;
|
IPA.widget_factories['password'] = IPA.password_widget;
|
||||||
IPA.widget_factories['radio'] = IPA.radio_widget;
|
IPA.widget_factories['radio'] = IPA.radio_widget;
|
||||||
IPA.widget_factories['select'] = IPA.select_widget;
|
IPA.widget_factories['select'] = IPA.select_widget;
|
||||||
|
IPA.widget_factories['sshkeys'] = IPA.sshkeys_widget;
|
||||||
IPA.widget_factories['textarea'] = IPA.textarea_widget;
|
IPA.widget_factories['textarea'] = IPA.textarea_widget;
|
||||||
IPA.widget_factories['text'] = IPA.text_widget;
|
IPA.widget_factories['text'] = IPA.text_widget;
|
||||||
|
@ -194,6 +194,7 @@ class i18n_messages(Command):
|
|||||||
"restore": _("Restore"),
|
"restore": _("Restore"),
|
||||||
"retry": _("Retry"),
|
"retry": _("Retry"),
|
||||||
"revoke": _("Revoke"),
|
"revoke": _("Revoke"),
|
||||||
|
"set": _("Set"),
|
||||||
"update": _("Update"),
|
"update": _("Update"),
|
||||||
"view": _("View"),
|
"view": _("View"),
|
||||||
},
|
},
|
||||||
@ -457,6 +458,16 @@ class i18n_messages(Command):
|
|||||||
"unprovision_title": _("Unprovisioning ${entity}"),
|
"unprovision_title": _("Unprovisioning ${entity}"),
|
||||||
"valid": _("Kerberos Key Present, Service Provisioned"),
|
"valid": _("Kerberos Key Present, Service Provisioned"),
|
||||||
},
|
},
|
||||||
|
"sshkeystore": {
|
||||||
|
"keys": _("SSH public keys"),
|
||||||
|
"set_dialog_help": _("Base-64 encoded SSH public key:"),
|
||||||
|
"set_dialog_title": _("Set SSH key"),
|
||||||
|
"show_set_key": _("Show/Set key"),
|
||||||
|
"status_mod_ns": _("Modified: key not set"),
|
||||||
|
"status_mod_s": _("Modified"),
|
||||||
|
"status_new_ns": _("New: key not set"),
|
||||||
|
"status_new_s": _("New: key set"),
|
||||||
|
},
|
||||||
"sudocmd": {
|
"sudocmd": {
|
||||||
"groups": _("Groups"),
|
"groups": _("Groups"),
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user