summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2011-03-07 12:35:11 -0600
committerAdam Young <ayoung@redhat.com>2011-03-07 14:53:29 -0500
commit80f497a889de3c29870810581c75017f846db9dc (patch)
tree61c1c36de2925fce4daabbf634eabc782c2720cc
parent154ed91457a258013a2f15cbbbf5adc36cf0e20a (diff)
downloadfreeipa-80f497a889de3c29870810581c75017f846db9dc.tar.gz
freeipa-80f497a889de3c29870810581c75017f846db9dc.tar.xz
freeipa-80f497a889de3c29870810581c75017f846db9dc.zip
Fixed memory leak caused by certificate dialogs.
Ticket 1054
-rwxr-xr-xinstall/ui/certificate.js449
-rw-r--r--install/ui/dialog.js7
2 files changed, 204 insertions, 252 deletions
diff --git a/install/ui/certificate.js b/install/ui/certificate.js
index c5de56c1..fea7448c 100755
--- a/install/ui/certificate.js
+++ b/install/ui/certificate.js
@@ -78,39 +78,27 @@ IPA.cert.get_dialog = function(spec) {
spec = spec || {};
- var that = {};
+ var that = IPA.dialog(spec);
+
+ that.width = spec.width || 500;
+ that.height = spec.height || 400;
- that.title = spec.title || '';
that.usercertificate = spec.usercertificate || '';
- var dialog = $('<div/>', {
- 'title': that.title
+ that.add_button(IPA.messages.buttons.close, function() {
+ that.close();
});
- var textarea = $('<textarea/>', {
- readonly: 'yes',
- style: 'width: 100%; height: 275px;'
- }).appendTo(dialog);
-
- textarea.val(
- IPA.cert.BEGIN_CERTIFICATE+'\n'+
- that.usercertificate+'\n'+
- IPA.cert.END_CERTIFICATE);
-
- that.open = function() {
-
- var buttons = {};
+ that.create = function() {
+ var textarea = $('<textarea/>', {
+ readonly: 'yes',
+ style: 'width: 100%; height: 275px;'
+ }).appendTo(that.container);
- buttons[IPA.messages.buttons.close] = function() {
- dialog.dialog('destroy');
- };
-
- dialog.dialog({
- modal: true,
- width: 500,
- height: 400,
- buttons: buttons
- });
+ textarea.val(
+ IPA.cert.BEGIN_CERTIFICATE+'\n'+
+ that.usercertificate+'\n'+
+ IPA.cert.END_CERTIFICATE);
};
return that;
@@ -120,64 +108,53 @@ IPA.cert.revoke_dialog = function(spec) {
spec = spec || {};
- var that = {};
+ var that = IPA.dialog(spec);
+
+ that.width = spec.width || 500;
+ that.height = spec.height || 300;
- that.title = spec.title || '';
that.revoke = spec.revoke;
- var dialog = $('<div/>', {
- 'title': that.title
+ that.add_button(IPA.messages.buttons.revoke, function() {
+ var values = {};
+ values['reason'] = that.select.val();
+ if (that.revoke) {
+ that.revoke(values);
+ }
+ that.close();
});
- var table = $('<table/>').appendTo(dialog);
-
- var tr = $('<tr/>').appendTo(table);
+ that.add_button(IPA.messages.buttons.cancel, function() {
+ that.close();
+ });
- var td = $('<td/>').appendTo(tr);
- td.append(IPA.messages.objects.cert.note+':');
+ that.create = function() {
- td = $('<td/>').appendTo(tr);
- td.append(IPA.messages.objects.cert.revoke_confirmation);
+ var table = $('<table/>').appendTo(that.container);
- tr = $('<tr/>').appendTo(table);
+ var tr = $('<tr/>').appendTo(table);
- td = $('<td/>').appendTo(tr);
- td.append(IPA.messages.objects.cert.reason+':');
+ var td = $('<td/>').appendTo(tr);
+ td.append(IPA.messages.objects.cert.note+':');
- td = $('<td/>').appendTo(tr);
+ td = $('<td/>').appendTo(tr);
+ td.append(IPA.messages.objects.cert.revoke_confirmation);
- var select = $('<select/>').appendTo(td);
- for (var i=0; i<IPA.cert.CRL_REASON.length; i++) {
- if (!IPA.cert.CRL_REASON[i]) continue;
- $('<option/>', {
- 'value': i,
- 'html': IPA.cert.CRL_REASON[i]
- }).appendTo(select);
- }
+ tr = $('<tr/>').appendTo(table);
- that.open = function() {
+ td = $('<td/>').appendTo(tr);
+ td.append(IPA.messages.objects.cert.reason+':');
- var buttons = {};
+ td = $('<td/>').appendTo(tr);
- buttons[IPA.messages.buttons.revoke] = function() {
- var values = {};
- values['reason'] = select.val();
- if (that.revoke) {
- that.revoke(values);
- }
- dialog.dialog('destroy');
- };
-
- buttons[IPA.messages.buttons.cancel] = function() {
- dialog.dialog('destroy');
- };
-
- dialog.dialog({
- modal: true,
- width: 500,
- height: 300,
- buttons: buttons
- });
+ that.select = $('<select/>').appendTo(td);
+ for (var i=0; i<IPA.cert.CRL_REASON.length; i++) {
+ if (!IPA.cert.CRL_REASON[i]) continue;
+ $('<option/>', {
+ 'value': i,
+ 'html': IPA.cert.CRL_REASON[i]
+ }).appendTo(that.select);
+ }
};
return that;
@@ -187,40 +164,28 @@ IPA.cert.restore_dialog = function(spec) {
spec = spec || {};
- var that = {};
+ var that = IPA.dialog(spec);
+
+ that.width = spec.width || 400;
+ that.height = spec.height || 200;
- that.title = spec.title || '';
that.restore = spec.restore;
- var dialog = $('<div/>', {
- 'title': that.title
+ that.add_button(IPA.messages.buttons.restore, function() {
+ var values = {};
+ if (that.restore) {
+ that.restore(values);
+ }
+ that.close();
});
- dialog.append(
- IPA.messages.objects.cert.restore_confirmation);
-
- that.open = function() {
-
- var buttons = {};
+ that.add_button(IPA.messages.buttons.cancel, function() {
+ that.close();
+ });
- buttons[IPA.messages.buttons.restore] = function() {
- var values = {};
- if (that.restore) {
- that.restore(values);
- }
- dialog.dialog('destroy');
- };
-
- buttons[IPA.messages.buttons.cancel] = function() {
- dialog.dialog('destroy');
- };
-
- dialog.dialog({
- modal: true,
- width: 400,
- height: 200,
- buttons: buttons
- });
+ that.create = function() {
+ that.container.append(
+ IPA.messages.objects.cert.restore_confirmation);
};
return that;
@@ -230,9 +195,11 @@ IPA.cert.view_dialog = function(spec) {
spec = spec || {};
- var that = {};
+ var that = IPA.dialog(spec);
+
+ that.width = spec.width || 600;
+ that.height = spec.height || 500;
- that.title = spec.title || '';
that.subject = IPA.cert.parse_dn(spec.subject);
that.serial_number = spec.serial_number || '';
that.issuer = IPA.cert.parse_dn(spec.issuer);
@@ -241,116 +208,103 @@ IPA.cert.view_dialog = function(spec) {
that.md5_fingerprint = spec.md5_fingerprint || '';
that.sha1_fingerprint = spec.sha1_fingerprint || '';
- var dialog = $('<div/>', {
- 'title': that.title
+ that.add_button(IPA.messages.buttons.close, function() {
+ that.close();
});
- var table = $('<table/>').appendTo(dialog);
-
- var tr = $('<tr/>').appendTo(table);
- $('<td/>', {
- 'colspan': 2,
- 'html': '<h3>'+IPA.messages.objects.cert.issued_to+'</h3>'
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.common_name+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.subject.cn
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.organization+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.subject.o
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.organizational_unit+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.subject.ou
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.serial_number+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.serial_number
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td/>', {
- 'colspan': 2,
- 'html': '<h3>'+IPA.messages.objects.cert.issued_by+'</h3>'
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.common_name+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.issuer.cn
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.organization+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.issuer.o
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.organizational_unit+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.issuer.ou
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td/>', {
- 'colspan': 2,
- 'html': '<h3>'+IPA.messages.objects.cert.validity+'</h3>'
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.issued_on+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.issued_on
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.expires_on+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.expires_on
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td/>', {
- 'colspan': 2,
- 'html': '<h3>'+IPA.messages.objects.cert.fingerprints+'</h3>'
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.sha1_fingerprint+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.sha1_fingerprint
- }).appendTo(tr);
-
- tr = $('<tr/>').appendTo(table);
- $('<td>'+IPA.messages.objects.cert.md5_fingerprint+':</td>').appendTo(tr);
- $('<td/>', {
- 'html': that.md5_fingerprint
- }).appendTo(tr);
-
- that.open = function() {
-
- var buttons = {};
-
- buttons[IPA.messages.buttons.close] = function() {
- dialog.dialog('destroy');
- };
-
- dialog.dialog({
- modal: true,
- width: 600,
- height: 500,
- buttons: buttons
- });
+ that.create = function() {
+
+ var table = $('<table/>').appendTo(that.container);
+
+ var tr = $('<tr/>').appendTo(table);
+ $('<td/>', {
+ 'colspan': 2,
+ 'html': '<h3>'+IPA.messages.objects.cert.issued_to+'</h3>'
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.common_name+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.subject.cn
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.organization+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.subject.o
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.organizational_unit+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.subject.ou
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.serial_number+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.serial_number
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td/>', {
+ 'colspan': 2,
+ 'html': '<h3>'+IPA.messages.objects.cert.issued_by+'</h3>'
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.common_name+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.issuer.cn
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.organization+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.issuer.o
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.organizational_unit+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.issuer.ou
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td/>', {
+ 'colspan': 2,
+ 'html': '<h3>'+IPA.messages.objects.cert.validity+'</h3>'
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.issued_on+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.issued_on
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.expires_on+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.expires_on
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td/>', {
+ 'colspan': 2,
+ 'html': '<h3>'+IPA.messages.objects.cert.fingerprints+'</h3>'
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.sha1_fingerprint+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.sha1_fingerprint
+ }).appendTo(tr);
+
+ tr = $('<tr/>').appendTo(table);
+ $('<td>'+IPA.messages.objects.cert.md5_fingerprint+':</td>').appendTo(tr);
+ $('<td/>', {
+ 'html': that.md5_fingerprint
+ }).appendTo(tr);
};
return that;
@@ -360,57 +314,45 @@ IPA.cert.request_dialog = function(spec) {
spec = spec || {};
- var that = {};
+ var that = IPA.dialog(spec);
+
+ that.width = spec.width || 500;
+ that.height = spec.height || 400;
- that.title = spec.title || '';
that.request = spec.request;
- var dialog = $('<div/>', {
- 'title': that.title
+ that.add_button(IPA.messages.buttons.issue, function() {
+ var values = {};
+ var request = that.textarea.val();
+ request =
+ IPA.cert.BEGIN_CERTIFICATE_REQUEST+'\n'+
+ $.trim(request)+'\n'+
+ IPA.cert.END_CERTIFICATE_REQUEST+'\n';
+ values['request'] = request;
+ if (that.request) {
+ that.request(values);
+ }
+ that.close();
});
- dialog.append(IPA.messages.objects.cert.enter_csr+':');
- dialog.append('<br/>');
- dialog.append('<br/>');
-
- dialog.append(IPA.cert.BEGIN_CERTIFICATE_REQUEST);
- dialog.append('<br/>');
-
- var textarea = $('<textarea/>', {
- style: 'width: 100%; height: 225px;'
- }).appendTo(dialog);
+ that.add_button(IPA.messages.buttons.cancel, function() {
+ that.close();
+ });
- dialog.append('<br/>');
- dialog.append(IPA.cert.END_CERTIFICATE_REQUEST);
+ that.create = function() {
+ that.container.append(IPA.messages.objects.cert.enter_csr+':');
+ that.container.append('<br/>');
+ that.container.append('<br/>');
- that.open = function() {
+ that.container.append(IPA.cert.BEGIN_CERTIFICATE_REQUEST);
+ that.container.append('<br/>');
- var buttons = {};
+ that.textarea = $('<textarea/>', {
+ style: 'width: 100%; height: 225px;'
+ }).appendTo(that.container);
- buttons[IPA.messages.buttons.issue] = function() {
- var values = {};
- var request = textarea.val();
- request =
- IPA.cert.BEGIN_CERTIFICATE_REQUEST+'\n'+
- $.trim(request)+'\n'+
- IPA.cert.END_CERTIFICATE_REQUEST+'\n';
- values['request'] = request;
- if (that.request) {
- that.request(values);
- }
- dialog.dialog('destroy');
- };
-
- buttons[IPA.messages.buttons.cancel] = function() {
- dialog.dialog('destroy');
- };
-
- dialog.dialog({
- modal: true,
- width: 500,
- height: 400,
- buttons: buttons
- });
+ that.container.append('<br/>');
+ that.container.append(IPA.cert.END_CERTIFICATE_REQUEST);
};
return that;
@@ -703,6 +645,7 @@ IPA.cert.status_widget = function(spec) {
'sha1_fingerprint': result['sha1_fingerprint']
});
+ dialog.init();
dialog.open();
}
@@ -725,6 +668,7 @@ IPA.cert.status_widget = function(spec) {
'usercertificate': entity_certificate
});
+ dialog.init();
dialog.open();
}
@@ -755,6 +699,7 @@ IPA.cert.status_widget = function(spec) {
}
});
+ dialog.init();
dialog.open();
}
@@ -791,6 +736,7 @@ IPA.cert.status_widget = function(spec) {
}
});
+ dialog.init();
dialog.open();
}
@@ -823,6 +769,7 @@ IPA.cert.status_widget = function(spec) {
}
});
+ dialog.init();
dialog.open();
}
diff --git a/install/ui/dialog.js b/install/ui/dialog.js
index c3efc25a..1b2f3192 100644
--- a/install/ui/dialog.js
+++ b/install/ui/dialog.js
@@ -36,6 +36,7 @@ IPA.dialog = function(spec) {
that._entity_name = spec.entity_name;
that.width = spec.width || '400px';
+ that.height = spec.height;
that.buttons = {};
@@ -173,7 +174,11 @@ IPA.dialog = function(spec) {
*/
that.open = function(container) {
- that.container = $('<div/>').appendTo(container);
+ that.container = $('<div/>');
+
+ if (container) {
+ container.append(that.container);
+ }
if (that.template) {
var template = IPA.get_template(that.template);