diff options
author | Endi S. Dewata <edewata@redhat.com> | 2011-03-07 12:35:11 -0600 |
---|---|---|
committer | Adam Young <ayoung@redhat.com> | 2011-03-07 14:53:29 -0500 |
commit | 80f497a889de3c29870810581c75017f846db9dc (patch) | |
tree | 61c1c36de2925fce4daabbf634eabc782c2720cc | |
parent | 154ed91457a258013a2f15cbbbf5adc36cf0e20a (diff) | |
download | freeipa-80f497a889de3c29870810581c75017f846db9dc.tar.gz freeipa-80f497a889de3c29870810581c75017f846db9dc.tar.xz freeipa-80f497a889de3c29870810581c75017f846db9dc.zip |
Fixed memory leak caused by certificate dialogs.
Ticket 1054
-rwxr-xr-x | install/ui/certificate.js | 449 | ||||
-rw-r--r-- | install/ui/dialog.js | 7 |
2 files changed, 204 insertions, 252 deletions
diff --git a/install/ui/certificate.js b/install/ui/certificate.js index c5de56c1f..fea7448cd 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 c3efc25a8..1b2f3192a 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); |