diff options
Diffstat (limited to 'dogtag/kra-ui/shared/webapps/kra/agent')
61 files changed, 6075 insertions, 0 deletions
diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/GenError.template b/dogtag/kra-ui/shared/webapps/kra/agent/GenError.template new file mode 100644 index 000000000..2ecb08cf5 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/GenError.template @@ -0,0 +1,78 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<CMS_TEMPLATE> + +<TITLE>DRM Agent Processing Error!</TITLE> + +<BODY BGCOLOR="white"> + +<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> +Problem Processing Your Request +</font> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/kra/agent/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> + +<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> + +<SCRIPT LANGUAGE="JavaScript"> + +document.writeln('<P>'); +document.write('The '+result.fixed.authorityName+' '); +document.writeln('encountered a problem while processing your request. '); +document.writeln( + 'The following is a detailed message of the error that occurred.'); + +document.writeln('<P>'); +document.writeln('<BLOCKQUOTE><B><PRE>'); +if (result.fixed.errorDetails != null) { + document.write(result.fixed.errorDetails); +} else { + document.write('No further details provided.'); +} +document.writeln('</PRE></B></BLOCKQUOTE>'); + +if (result != null && result.recordSet != null && result.recordSet.length > 0){ + document.writeln('<P>'); + document.write('Additional Information:'); + document.writeln('<P>'); + document.write('<BLOCKQUOTE><B><PRE>'); + document.writeln('<UL>'); + for (var i = 0; i < result.recordSet.length; i++) { + if (result.recordSet[i].errorDescription != null) { + document.writeln(result.recordSet[i].errorDescription); + } + } + document.writeln('</UL>'); + document.write('</PRE></B></BLOCKQUOTE>'); +} +</SCRIPT> + +<P> +Please consult your local administrator for further assistance. +The Certificate System logs may provide further information. + +</font> +</BODY> +</HTML> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/GenPending.template b/dogtag/kra-ui/shared/webapps/kra/agent/GenPending.template new file mode 100644 index 000000000..62d4316b1 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/GenPending.template @@ -0,0 +1,61 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<CMS_TEMPLATE> + +<TITLE>DRM Agent Request Pending</TITLE> + +<BODY bgcolor="white"> + + +<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> +Request Successfully Submitted +</font> + +<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> + +<SCRIPT LANGUAGE="JavaScript"> +var authority = 'Certificate Managment System'; +if (result.fixed.authorityName != null) + authority = result.fixed.authorityName; +document.writeln('<P>'); +document.write('Congratulations, your request has been successfully '); +document.write('submitted to the '+authority+'. '); +document.write('Your request will be processed when an authorized agent '); +document.writeln('verifies and validates the information in your request.'); + +document.writeln('<P>'); +document.write('Your request ID is '); +if (result.fixed.requestId != null) { + document.write('<B>'+result.fixed.requestId+'</B>.'); + document.writeln('<P>'); + document.write('Your can check on the status of your request with '); + document.write('an authorized agent or local administrator '); + document.writeln('by referring to this request ID.'); +} else { + document.write('<B>not provided.</B> '); + document.write('<P>'); + document.writeln('Please consult your local administrator for assistance.'); +} +</SCRIPT> + +</font> +</BODY> +</HTML> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/GenRejected.template b/dogtag/kra-ui/shared/webapps/kra/agent/GenRejected.template new file mode 100644 index 000000000..d6c67f2c4 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/GenRejected.template @@ -0,0 +1,82 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<CMS_TEMPLATE> + +<TITLE>DRM Agent Request Rejected</TITLE> + +<BODY bgcolor="white"> + +<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> +Request Rejected +</font> + +<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> + +<SCRIPT LANGUAGE="JavaScript"> + +var authority = 'Certificate System'; +if (result.fixed.authorityName != null) { + authority = result.fixed.authorityName; +} + +document.writeln('<P>'); +document.write('Your request has been rejected by the '+authority+'. ' ); +document.write('This may indicate that some attributes of the request '); +document.write('violate the policies of this '+authority+'. '); + +document.writeln('<P>'); +document.writeln('Violation details: '); + +document.writeln('<P>'); +document.writeln('<BLOCKQUOTE><B><PRE>'); +if (result == null || result.recordSet == null || result.recordSet.length == 0){ + document.writeln('No further details provided.'); +} +else { + document.writeln('<UL>'); + for (var i = 0; i < result.recordSet.length; i++) { + if (result.recordSet[i].policyMessage != null) { + document.writeln(result.recordSet[i].policyMessage); + } + } + document.writeln('</UL>'); +} +document.writeln('</PRE></B></BLOCKQUOTE>'); + +document.writeln('<P>'); +document.write('Your request ID is '); +if (result.fixed.requestId == null) { + document.write('<B>not provided</B>.'); + document.writeln('<P>'); + document.write( + 'Please consult your local administrator for further assistance.'); +} else { + document.write('<B>'+result.fixed.requestId+'</B>. '); + document.writeln('<P>'); + document.write( + 'You can contact an authorized agent or local administrator for '); + document.writeln('further assistance by referring to the request ID.'); +} +</SCRIPT> + +</font> +</BODY> +</HTML> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/GenSuccess.template b/dogtag/kra-ui/shared/webapps/kra/agent/GenSuccess.template new file mode 100644 index 000000000..dc3a9775f --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/GenSuccess.template @@ -0,0 +1,44 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<!-- This template is intended to be replaced by request specific results ! --> +<CMS_TEMPLATE> + +<TITLE>DRM Agent Generic Request Success</TITLE> + +<BODY BGCOLOR=white> + +<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> +Request Successfully Submited +</font> + +<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> + +<SCRIPT LANGUAGE="Javascript"> +var authority = 'Certificate System'; +if (request.fixed.authorityName != null) + authority = request.fixed.authorityName; + +document.writeln('<P>'); +document.write('Congratulations, your request has been successfully '); +document.write('submitted and processed by the '+authority+'.'); +</SCRIPT> + +</font> +</body> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/GenSvcPending.template b/dogtag/kra-ui/shared/webapps/kra/agent/GenSvcPending.template new file mode 100644 index 000000000..66a524912 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/GenSvcPending.template @@ -0,0 +1,61 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<CMS_TEMPLATE> + +<TITLE>DRM Agent Request Svc Pending</TITLE> + +<BODY bgcolor="white"> + +<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> +Request Successfully Submitted +</font> + +<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> + +<SCRIPT LANGUAGE="JavaScript"> +document.writeln('<P>'); +document.write('Your request has been successfully submitted and processed '); +document.writeln('by the '+result.fixed.authorityName+'.'); +document.write('The '+result.fixed.authorityName+' is waiting for a remote '); +if (result.fixed.remoteAuthorityName != null) + document.write(result.fixed.remoteAuthorityName); +else + document.write('Certificate Manager or Data Recovery manager'); +document.write(' to fill your request.'); + +document.writeln('<P>'); +document.write('Your request ID is '); +if (result.fixed.requestId != null) { + document.write('<B>'+result.fixed.requestId+'</B>.'); + document.write('<P>'); + document.write('Your can check on status of your request with an '+ + 'authorized agent or local administrator by referring '+ + 'to this request ID.'); +} else { + document.write('not provided. '); + document.writeln('Please consult your local administrator for assistance.'); +} +</SCRIPT> + + +</font> +</BODY> +</HTML> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/GenUnauthorized.template b/dogtag/kra-ui/shared/webapps/kra/agent/GenUnauthorized.template new file mode 100644 index 000000000..fc137d06b --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/GenUnauthorized.template @@ -0,0 +1,42 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<!-- This template is intended to be replaced by request specific results ! --> +<CMS_TEMPLATE> + +<TITLE>DRM Agent Generic Unauthorized</TITLE> + +<BODY BGCOLOR=white> + +<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> +Unauthorized Access +</font> + +<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> + +<SCRIPT LANGUAGE="Javascript"> +document.writeln('<P>'); +document.write('You are not authorized for this operation.'); +document.write('<BR>'); +document.write('If you think this is an error please contact your '); +document.writeln('local administrator for further assistance.'); +</SCRIPT> + +</font> +</body> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/GenUnexpectedError.template b/dogtag/kra-ui/shared/webapps/kra/agent/GenUnexpectedError.template new file mode 100644 index 000000000..0af3aa15d --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/GenUnexpectedError.template @@ -0,0 +1,68 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<CMS_TEMPLATE> + +<TITLE>DRM Agent Processing Error!</TITLE> + +<BODY BGCOLOR="white"> + +<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> +Problem Processing Your Request +</font> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/kra/agent/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> + +<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> + +<SCRIPT LANGUAGE="JavaScript"> +var authority = 'Certificate System'; +if (result.fixed.authorityName != null) { + authority = result.fixed.authorityName; +} + +document.writeln('<P>'); +document.write('The '+authority+' encountered an unexpected error '); +document.writeln(' while processing your request.'); +document.writeln( + 'The following is a detailed message of the error that occurred.'); + +document.writeln('<P>'); +document.writeln('<BLOCKQUOTE><B><PRE>'); +if (result.fixed.unexpectedError != null) { + document.write(result.fixed.unexpectedError); +} else { + document.write('No further details provided.'); +} +document.writeln('</PRE></B></BLOCKQUOTE>'); + +document.writeln('<P>'); +document.writeln( + 'Please consult your local administrator for further assistance.'); +document.writeln('The Certificate System logs may provide further information.'); +</SCRIPT> + +</font> +</BODY> +</HTML> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/cms-funcs.js b/dogtag/kra-ui/shared/webapps/kra/agent/cms-funcs.js new file mode 100644 index 000000000..c8ffd51c7 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/cms-funcs.js @@ -0,0 +1,538 @@ +// --- BEGIN COPYRIGHT BLOCK --- +// 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; version 2 of the License. +// +// 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, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// Copyright (C) 2007 Red Hat, Inc. +// All rights reserved. +// --- END COPYRIGHT BLOCK --- + +//<!-- + + +function checkClientTime() +{ + var speed; + var server_date = new Date(serverdate); + var client_date = new Date(); + var zone = client_date.getTimezoneOffset(); + var timediff = 0; + + var serverutc = server_date.getTime(); + var clientutc = client_date.getTime(); + + var offset = clientutc - serverutc; + if (offset >0) { + speed = 'fast'; + } else { + speed = 'slow'; + } + timediff = Math.round(Math.abs(offset/1000/60)); + + if (timediff > 10) { + msg = 'Your computer\'s clock is '+ timediff+ ' minutes '+ speed + + '\n\nYou may encounter problems using your certificate\n' + + 'as your clock is set incorrectly.\n\n' + + 'According to the server, the time is:\n ' + server_date + + '\n\nPlease correct your clock before proceeding with enrollment'+ + '\n\nYour timezone is set to ' + (-zone/60) +' hours relative to GMT.\n' + + 'If you change your timezone, you may need to restart your browser\n'+ + 'before continuing.'; + alert(msg); + return false; + } + return true; +} + + + + +function doubleQuotes(componentName) +{ + for (i=0; i < componentName.length; i++) { + if (componentName.charAt(i) == '"') { + return true; + } + } + return false; +} + +function escapeDNComponent(str) +{ + var outStr = ""; + var escapeValue = false; + + // Do we need to escape any characters + for (i=0; i < str.length; i++) { + c = str.charAt(i); + if (c == ',' || c == '=' || c == '+' || c == '<' || + c == '>' || c == '#' || c == ';' || c == '\r' || + c == '\n') { + escapeValue = true; + break; + } + } + + if (escapeValue == true) { + outStr += '"'; + outStr += str; + outStr += '"'; + } else { + outStr += str; + } + return outStr; +} + +function formulateDN(form, distinguishedName) +{ + // Note: The alerts about double quotes are here to avoid + // problems with the code dealing with quoting and escaping in the + // Netscape Directory Server 1.0 implementation. + with (form) { + distinguishedName.value = ''; + if (form.E != null) { + if (E.value != '') { + if (doubleQuotes(E.value) == true) { + alert('Double quotes are not allowed in the E-mail field'); + E.value = ''; + E.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'E=' + escapeDNComponent(E.value); + } + } + if (form.CN!= null) { + if (CN.value != '') { + if (doubleQuotes(CN.value) == true) { + alert('Double quotes are not allowed in Common Name field'); + CN.value = ''; + CN.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'CN=' + escapeDNComponent(CN.value); + } + } + if (form.UID1 != null) { + if (UID1.value != '') { + if (doubleQuotes(UID1.value) == true) { + alert('Double quotes are not allowed in the user id field'); + UID1.value = ''; + UID1.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'UID=' + escapeDNComponent(UID1.value); + } + } + if (form.OU != null) { + if (OU.value != '') { + if (doubleQuotes(OU.value) == true) { + alert('Double quotes are not allowed in Org Unit field'); + OU.value = ''; + OU.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'OU=' + escapeDNComponent(OU.value); + } + } + if (form.O != null) { + if (O.value != '') { + if (doubleQuotes(O.value) == true) { + alert('Double quotes are not allowed in Organization field.'); + O.value = ''; + O.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'O=' + escapeDNComponent(O.value); + } + } + if (form.L != null) { + if (L.value != '') { + if (doubleQuotes(L.value) == true) { + alert('Double quotes are not allowed in Locality field.'); + L.value = ''; + L.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'L=' + escapeDNComponent(L.value); + } + } + if (form.ST != null) { + if (ST.value != '') { + if (doubleQuotes(ST.value) == true) { + alert('Double quotes are not allowed in State field.'); + ST.value = ''; + ST.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'ST=' + escapeDNComponent(ST.value); + } + } + if (form.C != null) { + if (C.value != '') { + if (doubleQuotes(C.value) == true) { + alert('Double quotes are not allowed in Country field.'); + C.value = ''; + C.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'C=' + escapeDNComponent(C.value); + } + } + } +} + +function isValidIssuerDN(form) +{ + // Note: The check here is to avoid a bug in Netscape Navigator 3.0 and 3.01 + // that are triggered on formation of the nickname on import of a CA cert if + // that cert does not contain an OU or O component. + if ((form.OU.value == '') && (form.O.value == '')) { + alert("You must enter an Organization Unit or an Organization."); + return false; + } else { + return true; + } +} + +function isValidAdminDN(form) +{ + // Note: The check here is to avoid a bug in Netscape Navigator 3.0 and 3.01 + // that are triggered on formation of the nickname on import of a personal cert if + // that cert does not contain a common name. + + if (form.CN.value == '') { + alert("You must enter a Common Name."); + return false; + } else { + return true; + } +} + +function isValidCSR(form) +{ + // Note: the checks here are of mixed origin. Some are required for Navigator + // and Communicator. The CSR field checks are to avoid server side rejection of the + // submission. These checks can be split up to be different for different types of + // certificates. + + formulateDN(form, form.subject); + // DEBUG + //alert(form.subject); + + with (form) { + if (email != null) { + if (E.value == "" && email.checked) { + alert("E-mail certificates must include an E-mail address."); + return false; + } + } + if (CN.value == "") { + alert("You must supply your name for the certificate."); + return false; + } + return true; + } +} + +function isNumber(string, radix) { + var i = 0; + var legalDigits; + if (radix == null || radix == 10) { + legalDigits = "0123456789"; + } else if (radix == 16) { + legalDigits = "0123456789abcdefABCDEF:"; + } else { + return false; + } + for(; i < string.length; ++i) { + if (string.charAt(i) != ' ') + break; + } + if (string.charAt(i) == '+' || string.charAt(i) == '-' ) { + ++i; + } + if (radix == 16 && i < string.length - 2 && + string.charAt(i) == '0' && + (string.charAt(i+1) == 'x' || string.charAt(i+1) == 'X') && + legalDigits.indexOf(string.charAt(i+2)) != -1) { + i += 3; + } + for(; i < string.length; ++i) { + if (legalDigits.indexOf(string.charAt(i)) == -1) + break; + } + for(; i < string.length; ++i) { + if (string.charAt(i) != ' ') + return false; + } + return true; +} + +function dateForm(name) +{ + var i; + document.write('<FORM NAME=\"'+ name +'\">'); + document.write('<SELECT NAME=\"day\"><OPTION VALUE=0> '); + for (i=1; i <=31; ++i) + document.write('<OPTION VALUE='+i+'>'+i); + document.write('</SELECT>'); + document.write('<SELECT NAME=\"month\">'+ + '<OPTION VALUE=13> '+ + '<OPTION VALUE=0>January'+ + '<OPTION VALUE=1>February'+ + '<OPTION VALUE=2>March'+ + '<OPTION VALUE=3>April'+ + '<OPTION VALUE=4>May'+ + '<OPTION VALUE=5>June'+ + '<OPTION VALUE=6>July'+ + '<OPTION VALUE=7>August'+ + '<OPTION VALUE=8>September'+ + '<OPTION VALUE=9>October'+ + '<OPTION VALUE=10>November'+ + '<OPTION VALUE=11>December'+ + '</SELECT>' + ); + + document.write('<SELECT NAME=\"year\"><OPTION VALUE=0> '); + for (i=1996; i <=2006; ++i) + document.write('<OPTION VALUE='+i+'>'+i); + document.write('</SELECT>'); + document.write('</FORM>'); +} + +function dateIsEmpty(form) +{ + return form.day.selectedIndex == 0 && + form.month.selectedIndex == 0 && + form.year.selectedIndex == 0; +} + + +function convertDate(form, fieldName) +{ + var date; + var day = form.day.options[form.day.selectedIndex].value; + var month = form.month.options[form.month.selectedIndex].value; + var year = form.year.options[form.year.selectedIndex].value; + date = new Date(year,month,day); + + // see if normalization was required + if (date.getMonth() != month || date.getDate() != day ) { + alert(fieldName + " is invalid"); + return null; + } + else + return Math.round(date.getTime() / 1000); +} + +function daysToSeconds(days){ + return 3600 * 24 * days; +} + +// encloses value in double quotes preceding all embedded double quotes with \ +function escapeValue(value) +{ + var result; + var fromIndex = 0, toIndex = 0; + + // kludgy work-around for indexOf JavaScript bug on empty string + if (value == "") + return '\"\"'; + + result = '\"'; + while ((toIndex = value.indexOf('\"',fromIndex)) != -1) { + result += value.substring(fromIndex,toIndex); + result += '\\"'; + fromIndex = toIndex + 1; + } + result += value.substring(fromIndex,value.length); + result += '\"'; + return result; +} + +// encloses value in double quotes preceding all embedded double quotes and +// backslashes with backslash +function escapeValueJSString(value) +{ + var result = ""; + + // Do we need to escape any characters + for (i=0; i < value.length; i++) { + c = value.charAt(i); + if (c == '\\' | c == '"') { + result += '\\'; + } + result += c; + } + return '\"' + result + '\"'; +} + +function escapeValueRfc1779(value) +{ + var result = ""; + + // Do we need to escape any characters + for (i=0; i < value.length; i++) { + c = value.charAt(i); + if (c == ',' || c == '=' || c == '+' || c == '<' || + c == '>' || c == '#' || c == ';' || c == '\r' || + c == '\n' || c == '\\' | c == '"') { + result += '\\'; + } + result += c; + } + return result; +} + +// helper function to construct name component(pattern) +function makeComponent(list,tag,value,asPattern) +{ + var last = list.length; + if (asPattern) { + list[last] = (value == "") ? "*" : (tag+"="+escapeValueRfc1779(value)); + } + else if (value != "") + list[last] = tag+"="+escapeValueRfc1779(value); +} + +// If asPattern is false formulates the RFC 1779 format subject name +// from the component parts skipping all components with blank values, +// otherwise builds RFC 1779-like matching pattern from components +function computeNameCriterion(form) +{ + var asPattern = form.match[1].checked; + var result = new Array; + + with (form) { + // The order of clauses here determines how components are ordered + // in the name sent in the client's request. A site may wish to + // re-order the clauses here if their conventions produce names + // with components in a different order. + makeComponent(result,"E",E.value,asPattern); + makeComponent(result,"CN",CN.value,asPattern); + makeComponent(result,"UID",UID.value,asPattern); + makeComponent(result,"OU",OU.value,asPattern); + makeComponent(result,"O",O.value,asPattern); + makeComponent(result,"L",L.value,asPattern); + makeComponent(result,"ST",ST.value,asPattern); + makeComponent(result,"C",C.value,asPattern); + } + if (result.length == 0) + return asPattern ? "0 == 0" : "0 == 1"; + else + return "subject" + ( asPattern ? " ~= " : " == ") + + escapeValue(result.join(', ')); +} + +function booleanCrit(crit,radioArg) +{ + for (var i = 0; i < radioArg.length; ++i ){ + if( radioArg[i].checked ) { + if (radioArg[i].value.length != 0) { + crit[crit.length] = radioArg[i].name + " == " + radioArg[i].value; + } + return; + } + } +} + +function isHTTPEscapeChar(c) +{ + if (c == '%' || c == '#' || c == '+' || c == '=' || c == '\n' || + c == '\r' || c == '\t' || c == ';' || c == '&' || + c == '>') { + return true; + } + + return false; +} + +function produceHTTPEscapedString(inString) +{ + table = new Object(); + table["%"] = "25"; + table["#"] = "23"; + table["+"] = "2B"; + table["="] = "3D"; + table["\n"] = "0A"; + table["\r"] = "0D"; + table["\t"] = "09"; + table[";"] = "3B"; + table["&"] = "26"; + table[">"] = "3E"; + + outString = ""; + + for (i=0; i < inString.length; i++) { + if (inString.charAt(i) == ' ') { + outString += '+'; + } else { + if (isHTTPEscapeChar(inString.charAt(i))) { + outString += "%" + table[inString.substring(i, i+1)]; + } else { + outString += inString.charAt(i); + } + } + } + + return outString; +} + +// strips (optional) spaces and 0[xX] prefix at the beginning of s +function stripPrefix(s) +{ + var i; + for(i = 0; i < s.length - 1; ++i) { + if (s.charAt(i) != ' ' ) + break; + } + if (s.charAt(i) == '0' && (s.charAt(i+1) == 'x' || s.charAt(i+1) == 'X')) { + return s.substring(i+2,s.length); + } else { + return s.substring(i,s.length);; + } +} + +// removes colons from value and returns the result +// used as helper to convert colon-separated hexadecimal numbers +// to regular numbers +function removeColons(value) +{ + var result = ""; + + for (i=0; i < value.length; i++) { + c = value.charAt(i); + if (c != ':' ){ + result += c; + } + } + return result; +} + +function navMajorVersion() +{ + return parseInt(navigator.appVersion.substring(0, navigator.appVersion.indexOf("."))); +} +//--> + + + + + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/funcs.js b/dogtag/kra-ui/shared/webapps/kra/agent/funcs.js new file mode 100644 index 000000000..daef83d17 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/funcs.js @@ -0,0 +1,686 @@ +// --- BEGIN COPYRIGHT BLOCK --- +// 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; version 2 of the License. +// +// 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, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// Copyright (C) 2007 Red Hat, Inc. +// All rights reserved. +// --- END COPYRIGHT BLOCK --- + +//<!-- +function doubleQuotes(componentName) +{ + for (i=0; i < componentName.length; i++) { + if (componentName.charAt(i) == '"') { + return true; + } + } + return false; +} + +function escapeDNComponent(str) +{ + var outStr = ""; + var escapeValue = false; + + // Do we need to escape any characters + for (i=0; i < str.length; i++) { + c = str.charAt(i); + if (c == ',' || c == '=' || c == '+' || c == '<' || + c == '>' || c == '#' || c == ';' || c == '\r' || + c == '\n') { + escapeValue = true; + break; + } + } + + if (escapeValue == true) { + outStr += '"'; + outStr += str; + outStr += '"'; + } else { + outStr += str; + } + return outStr; +} + +function formulateDN(form, distinguishedName) +{ + // Note: The alerts about double quotes are here to avoid + // problems with the code dealing with quoting and escaping in the + // Netscape Directory Server 1.0 implementation. + with (form) { + distinguishedName.value = ''; + if (form.eMail != null) { + if (eMail.value != '') { + if (doubleQuotes(eMail.value) == true) { + alert('Double quotes are not allowed in the E-mail field'); + eMail.value = ''; + eMail.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'E=' + escapeDNComponent(eMail.value); + } + } + if (form.commonName != null) { + if (commonName.value != '') { + if (doubleQuotes(commonName.value) == true) { + alert('Double quotes are not allowed in Common Name field'); + commonName.value = ''; + commonName.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'CN=' + escapeDNComponent(commonName.value); + } + } + if (form.userID != null) { + if (userID.value != '') { + if (doubleQuotes(userID.value) == true) { + alert('Double quotes are not allowed in the user id field'); + userID.value = ''; + userID.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'UID=' + escapeDNComponent(userID.value); + } + } + if (form.orgUnit != null) { + if (orgUnit.value != '') { + if (doubleQuotes(orgUnit.value) == true) { + alert('Double quotes are not allowed in Org Unit field'); + orgUnit.value = ''; + orgUnit.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'OU=' + escapeDNComponent(orgUnit.value); + } + } + if (form.org != null) { + if (org.value != '') { + if (doubleQuotes(org.value) == true) { + alert('Double quotes are not allowed in Organization field.'); + org.value = ''; + org.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'O=' + escapeDNComponent(org.value); + } + } + if (form.locality != null) { + if (locality.value != '') { + if (doubleQuotes(locality.value) == true) { + alert('Double quotes are not allowed in Locality field.'); + locality.value = ''; + locality.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'L=' + escapeDNComponent(locality.value); + } + } + if (form.state != null) { + if (state.value != '') { + if (doubleQuotes(state.value) == true) { + alert('Double quotes are not allowed in State field.'); + state.value = ''; + state.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'ST=' + escapeDNComponent(state.value); + } + } + if (form.country != null) { + if (country.value != '') { + if (doubleQuotes(country.value) == true) { + alert('Double quotes are not allowed in Country field.'); + country.value = ''; + country.focus(); + return; + } + if (distinguishedName.value != '') distinguishedName.value += ', '; + distinguishedName.value += 'C=' + escapeDNComponent(country.value); + } + } + } +} + +function isValidIssuerDN(form) +{ + // Note: The check here is to avoid a bug in Netscape Navigator 3.0 and 3.01 + // that are triggered on formation of the nickname on import of a CA cert if + // that cert does not contain an OU or O component. + if ((form.orgUnit.value == '') && (form.org.value == '')) { + alert("You must enter an Organization Unit or an Organization."); + return false; + } else { + return true; + } +} + +function isValidAdminDN(form) +{ + // Note: The check here is to avoid a bug in Netscape Navigator 3.0 and 3.01 + // that are triggered on formation of the nickname on import of a personal cert if + // that cert does not contain a common name. + + if (form.commonName.value == '') { + alert("You must enter a Common Name."); + return false; + } else { + return true; + } +} + +function isValidCSR(form) +{ + // Note: the checks here are of mixed origin. Some are required for Navigator + // and Communicator. The CSR field checks are to avoid server side rejection of the + // submission. These checks can be split up to be different for different types of + // certificates. + + formulateDN(form, form.subject); + + with (form) { + if (isEmailCert != null) { + if (eMail.value == "" && isEmailCert.checked) { + alert("E-mail certificates must include an E-mail address."); + return false; + } + } + if (commonName.value == "") { + alert("You must supply your name for the certificate."); + return false; + } + if (csrRequestorName.value == "") { + csrRequestorName.value = commonName.value; + } + if (csrRequestorPhone.value == "" && csrRequestorEmail.value == "") { + alert("You must supply a contact phone number or e-mail address."); + return false; + } + return true; + } +} + +function isNegative(string) { + if (string.charAt(0) == '-') + return true; + else + return false; +} + +function isNumber(string, radix) { + var i = 0; + var legalDigits; + if (radix == null || radix == 10) { + legalDigits = "0123456789"; + } else if (radix == 16) { + legalDigits = "0123456789abcdefABCDEF:"; + } else { + return false; + } + for(; i < string.length; ++i) { + if (string.charAt(i) != ' ') + break; + } + if (string.charAt(i) == '+' || string.charAt(i) == '-' ) { + ++i; + } + if (radix == 16 && i < string.length - 2 && + string.charAt(i) == '0' && + (string.charAt(i+1) == 'x' || string.charAt(i+1) == 'X') && + legalDigits.indexOf(string.charAt(i+2)) != -1) { + i += 3; + } + for(; i < string.length; ++i) { + if (legalDigits.indexOf(string.charAt(i)) == -1) + break; + } + for(; i < string.length; ++i) { + if (string.charAt(i) != ' ') + return false; + } + return true; +} + +function isDecimalNumber(string) { + var i = 0; + var legalDigits = "0123456789"; + + for (; i < string.length; i++) { + if (string.charAt(i) != ' ') + break; + } + if (i < string.length && + legalDigits.indexOf(string.charAt(i)) != -1) { + i++; + } else + return false; + + for (; i < string.length; i++) { + if (legalDigits.indexOf(string.charAt(i)) == -1) + break; + } + for (; i < string.length; i++) { + if (string.charAt(i) != ' ') + return false; + } + + return true; +} + +function isHexNumber(string) { + var i = 0; + var legalDigits = "0123456789abcdefABCDEF"; + + for (; i < string.length; i++) { + if (string.charAt(i) != ' ') + break; + } + if (i < string.length - 2 && + string.charAt(i) == '0' && + (string.charAt(i+1) == 'x' || string.charAt(i+1) == 'X') && + legalDigits.indexOf(string.charAt(i+2)) != -1) { + i += 3; + } else + return false; + + for (; i < string.length; i++) { + if (legalDigits.indexOf(string.charAt(i)) == -1) + break; + } + for (; i < string.length; i++) { + if (string.charAt(i) != ' ') + return false; + } + + return true; +} + +function trim(string) { + var i, k, newString; + + for (i = 0; i < string.length; i++) { + if (string.charAt(i) != ' ' ) + break; + } + for (k = string.length - 1; k > i; k--) { + if (string.charAt(k) != ' ' ) + break; + } + k++; + + if (k > i) + newString = string.substring(i, k); + else + newString = null; + + return newString; +} + + +function dateForm(name) +{ + var i; + document.write('<FORM NAME=\"'+ name +'\">'); + document.write('<SELECT NAME=\"day\"><OPTION VALUE=0> '); + for (i=1; i <=31; ++i) + document.write('<OPTION VALUE='+i+'>'+i); + document.write('</SELECT>'); + document.write('<SELECT NAME=\"month\">'+ + '<OPTION VALUE=13> '+ + '<OPTION VALUE=0>January'+ + '<OPTION VALUE=1>February'+ + '<OPTION VALUE=2>March'+ + '<OPTION VALUE=3>April'+ + '<OPTION VALUE=4>May'+ + '<OPTION VALUE=5>June'+ + '<OPTION VALUE=6>July'+ + '<OPTION VALUE=7>August'+ + '<OPTION VALUE=8>September'+ + '<OPTION VALUE=9>October'+ + '<OPTION VALUE=10>November'+ + '<OPTION VALUE=11>December'+ + '</SELECT>' + ); + + document.write('<SELECT NAME=\"year\"><OPTION VALUE=0> '); + for (i=1996; i <=2006; ++i) + document.write('<OPTION VALUE='+i+'>'+i); + document.write('</SELECT>'); + document.write('</FORM>'); +} + +function dateIsEmpty(form) +{ + return form.day.selectedIndex == 0 && + form.month.selectedIndex == 0 && + form.year.selectedIndex == 0; +} + + +function convertDate(form, fieldName) +{ + var date; + var day = form.day.options[form.day.selectedIndex].value; + var month = form.month.options[form.month.selectedIndex].value; + var year = form.year.options[form.year.selectedIndex].value; + date = new Date(year,month,day); + + // see if normalization was required + if (date.getMonth() != month || date.getDate() != day || year == 0) { + alert(fieldName + " is invalid"); + return null; + } + else + return date.getTime(); +// return Math.round(date.getTime() / 1000); +} + +function daysToSeconds(days){ + return 3600 * 24 * days; +} + +// encloses value in double quotes preceding all embedded double quotes with \ +function escapeValue(value) +{ + var result; + var fromIndex = 0, toIndex = 0; + + // kludgy work-around for indexOf JavaScript bug on empty string + if (value == "") + return '\"\"'; + + result = '\"'; + while ((toIndex = value.indexOf('\"',fromIndex)) != -1) { + result += value.substring(fromIndex,toIndex); + result += '\\"'; + fromIndex = toIndex + 1; + } + result += value.substring(fromIndex,value.length); + result += '\"'; + return result; +} + +// encloses value in double quotes preceding all embedded double quotes and +// backslashes with backslash +function escapeValueJSString(value) +{ + var result = ""; + + // Do we need to escape any characters + for (i=0; i < value.length; i++) { + c = value.charAt(i); + if (c == '\\' | c == '"') { + result += '\\'; + } + result += c; + } + return '\"' + result + '\"'; +} + +function escapeValueRfc1779(value) +{ + var result = ""; + + // Do we need to escape any characters + for (i=0; i < value.length; i++) { + c = value.charAt(i); + if (c == ',' || c == '=' || c == '+' || c == '<' || + c == '>' || c == '#' || c == ';' || c == '\r' || + c == '\n' || c == '\\' || c == '"') { + result += '\\'; + } + result += c; + } + return result; +} + +// helper function to construct name component(pattern) +function makeComponent(list,tag,value,asPattern) +{ + var last = list.length; +// if (asPattern) { +// list[last] = (value == "") ? "*" : (tag+"="+escapeValueRfc1779(value)); +// } +// else if (value != "") + if (value != "") { + list[last] = tag+"="+escapeValueRfc1779(value); +// } else if (!asPattern) { +// list[last] = tag+"=*"; + } +// alert("asPattern = " + asPattern); +} + +// If asPattern is false formulates the RFC 1779 format subject name +// from the component parts skipping all components with blank values, +// otherwise builds RFC 1779-like matching pattern from components +function computeNameCriterion(form) +{ + var asPattern = form.match[1].checked; + var result = new Array; + + with (form) { + // The order of clauses here determines how components are ordered + // in the name sent in the client's request. A site may wish to + // re-order the clauses here if their conventions produce names + // with components in a different order. + makeComponent(result,"E",eMail.value,asPattern); + makeComponent(result,"CN",commonName.value,asPattern); + makeComponent(result,"UID",userID.value,asPattern); + makeComponent(result,"OU",orgUnit.value,asPattern); + makeComponent(result,"O",org.value,asPattern); + makeComponent(result,"L",locality.value,asPattern); + makeComponent(result,"ST",state.value,asPattern); + makeComponent(result,"C",country.value,asPattern); + } + if (result.length == 0) +// return asPattern ? "0 == 0" : "0 == 1"; + return "(x509Cert.subject=*)"; + else { + return "(x509Cert.subject" + (asPattern ? "~=" : "=") + escapeValue(nsjoin(result,",")) + ")"; + } +// escapeValue(result.join(', ')); +} + +// helper function to construct name component(pattern) +function makeComponentFilter(list,tag,value,asPattern) +{ + var last = list.length; + if (value != "") { + if (asPattern) { + list[last] = "(x509Cert.subject=*"+tag+"=*"+ + escapeValueRfc1779(value)+"*)"; + } else { + // exact match (either the end, or appended with ",") + list[last] = "(|(x509Cert.subject=*"+tag+"="+ + escapeValueRfc1779(value)+",*)" + +"(x509Cert.subject=*"+tag+"="+ + escapeValueRfc1779(value)+"))"; + } + } +} + +function computeNameFilter(form) +{ + var asPattern = form.match[1].checked; + var result = new Array; + + with (form) { + // The order of clauses here determines how components are ordered + // in the name sent in the client's request. A site may wish to + // re-order the clauses here if their conventions produce names + // with components in a different order. + makeComponentFilter(result,"E",eMail.value,asPattern); + makeComponentFilter(result,"CN",commonName.value,asPattern); + makeComponentFilter(result,"UID",userID.value,asPattern); + makeComponentFilter(result,"OU",orgUnit.value,asPattern); + makeComponentFilter(result,"O",org.value,asPattern); + makeComponentFilter(result,"L",locality.value,asPattern); + makeComponentFilter(result,"ST",state.value,asPattern); + makeComponentFilter(result,"C",country.value,asPattern); + } + if (result.length == 0) { + return "(x509Cert.subject=*)"; + } else { + if (asPattern) { + return "(|" + nsjoin(result,"") + ")"; + } else { + return "(&" + nsjoin(result,"") + ")"; + } + } +} + +function booleanCrit(crit,radioArg) +{ + for (var i = 0; i < radioArg.length; ++i ){ + if( radioArg[i].checked ) { + if (radioArg[i].value.length != 0) { + crit[crit.length] = radioArg[i].name + " == " + radioArg[i].value; + } + return; + } + } +} + +function isHTTPEscapeChar(c) +{ + if (c == '%' || c == '#' || c == '+' || c == '=' || c == '\n' || + c == '\r' || c == '\t' || c == ';' || c == '&' || + c == '>') { + return true; + } + + return false; +} + +function produceHTTPEscapedString(inString) +{ + table = new Object(); + table["%"] = "25"; + table["#"] = "23"; + table["+"] = "2B"; + table["="] = "3D"; + table["\n"] = "0A"; + table["\r"] = "0D"; + table["\t"] = "09"; + table[";"] = "3B"; + table["&"] = "26"; + table[">"] = "3E"; + + outString = ""; + + for (i=0; i < inString.length; i++) { + if (inString.charAt(i) == ' ') { + outString += '+'; + } else { + if (isHTTPEscapeChar(inString.charAt(i))) { + outString += "%" + table[inString.substring(i, i+1)]; + } else { + outString += inString.charAt(i); + } + } + } + + return outString; +} + +function isHex(string) +{ + if (string.charAt(0) == '0' && + (string.charAt(1) == 'x' || string.charAt(1) == 'X')) { + return true; + } else { + return false; + } +} + +function writeError(errorDetails) +{ + document.write("<center><h2><b>" + + "Problem Processing Your Request" + + "</b></h2></center><p>" + + "The service encountered a problem " + + "when processing your request. This problem may " + + "indicate a flaw in the form used to submit your " + + "request or the values that were entered into the form." + + "The following message supplies more information " + + "about the error that occurred.<p>"); + document.write("<blockquote><b><pre>"); + if (errorDetails != null) { + document.write(errorDetails); + } else { + document.write("Unable to provide details. " + + "Contact Administrator."); + } + document.write("</pre></b></blockquote>"); + if (result.header.errorDescription != null) { + document.write('<p>Additional Information:<p>'); + document.write('<blockquote><b>'); + document.write(result.header.errorDescription); + document.write('</b></blockquote>'); + } + document.write("<p>"); + document.write("Please consult your local administrator for " + + "further assistance."); + document.write("The certificate server's log may provide " + + "further information."); +} + +// strips (optional) spaces and 0[xX] prefix at the beginning of s +function stripPrefix(s) +{ + var i; + for(i = 0; i < s.length - 1; ++i) { + if (s.charAt(i) != ' ' ) + break; + } + if (s.charAt(i) == '0' && (s.charAt(i+1) == 'x' || s.charAt(i+1) == 'X')) { + return s.substring(i+2,s.length); + } else { + return s.substring(i,s.length);; + } +} + +// removes colons from value and returns the result +// used as helper to convert colon-separated hexadecimal numbers +// to regular numbers +function removeColons(value) +{ + var result = ""; + + for (i=0; i < value.length; i++) { + c = value.charAt(i); + if (c != ':' ){ + result += c; + } + } + return result; +} + +// Replacement for the array.join() function which isn't in MSIE 3.0 + +function nsjoin(array,str) { + val = ""; + for (i=0; i<array.length; i++) { + val = val + array[i]; + if (i < (array.length-1)) val = val+str; + } + return val; +} +//--> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgLeftTab.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgLeftTab.gif Binary files differnew file mode 100644 index 000000000..35a76c859 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgLeftTab.gif diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgRightTab.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgRightTab.gif Binary files differnew file mode 100644 index 000000000..a519bc759 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgRightTab.gif diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/favicon.ico b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/favicon.ico Binary files differnew file mode 100644 index 000000000..efc1d33f4 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/favicon.ico diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/goto-tall.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/goto-tall.gif Binary files differnew file mode 100644 index 000000000..6eea3ef5c --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/goto-tall.gif diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/gray90.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/gray90.gif Binary files differnew file mode 100644 index 000000000..c6f811102 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/gray90.gif diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/hr.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/hr.gif Binary files differnew file mode 100644 index 000000000..14f8acf92 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/hr.gif diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgLeftTab.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgLeftTab.gif Binary files differnew file mode 100644 index 000000000..a78fbc89d --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgLeftTab.gif diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgRightTab.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgRightTab.gif Binary files differnew file mode 100644 index 000000000..71852402d --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgRightTab.gif diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/logo_header.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/logo_header.gif Binary files differnew file mode 100644 index 000000000..573482227 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/logo_header.gif diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/spacer.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/spacer.gif Binary files differnew file mode 100644 index 000000000..13acffe53 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/spacer.gif diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/header.template b/dogtag/kra-ui/shared/webapps/kra/agent/header.template new file mode 100644 index 000000000..0de93919a --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/header.template @@ -0,0 +1,82 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<CMS_TEMPLATE> +<title>Header</title> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> + +<body onResize=location.reload() bgcolor="#CCCCCC" link="#FFFFFF" vlink="#FFFFFF" alink="#CCCCFF"> +<table border="0" width="100%" cellspacing="0" cellpadding="0" bgcolor="#000080"> + <tr> + <td> + <table border="0" cellspacing="12" cellpadding="0"> + <tr> + <td><img src="/kra/agent/graphics/logo_header.gif"></td> + <td> </td> + <td><font size="+1" face="PrimaSans BT, Verdana, sans-serif" color="white"><b>Dogtag<sup><font color="#999999" size="-2">®</font></sup> Agent Services</b></font></td> + </tr> + </table> + <table border="0" cellspacing="0" cellpadding="0"> + <tr> + <td><img src="/kra/agent/graphics/spacer.gif" alt="" width="12" height="21"></td> +<SCRIPT type="text/javascript"> + for (var i = 0; i < result.recordSet.length; ++i) { + if (result.recordSet[i].id == header.selected) { + document.write('<td><img src="/kra/agent/graphics/lgLeftTab.gif" width="13" height="21"><\/td>'); + document.write('<td bgcolor="#cccccc" nowrap>'); + } else { + document.write('<td><img src="/kra/agent/graphics/dgLeftTab.gif" width="13" height="21"><\/td>'); + document.write('<td bgcolor="#999999" nowrap>'); + } + document.write('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + if (result.recordSet[i].type == "CertificateAuthority") { + type = "Certificate Manager"; + } else if (result.recordSet[i].type == "KeyRecoveryAuthority") { + type = "Data Recovery Manager"; + } else if (result.recordSet[i].type == "OCSPAuthority") { + type = "Online Certificate Status Manager"; + } else if (result.recordSet[i].type == "RegistrationAuthority") { + type = "Registration Manager"; + } + if (result.recordSet[i].id == header.selected) { + document.write('<b>' + type + '<\/b>'); + } else { + document.write('<a href="../' + + result.recordSet[i].id + + '/index.html" target="_top">' + + type + '<\/a>'); + } + document.write('<\/font><\/td>'); + if (result.recordSet[i].id == header.selected) { + document.write('<td><img src="/kra/agent/graphics/lgRightTab.gif" width="16" height="21" alt=""><\/td>'); + } else { + document.write('<td><img src="/kra/agent/graphics/dgRightTab.gif" width="16" height="21" alt=""><\/td>'); + } + } +</SCRIPT> + </tr> + </table> + </td> + </tr> +</table> +</body> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/helpfun.js b/dogtag/kra-ui/shared/webapps/kra/agent/helpfun.js new file mode 100644 index 000000000..14a80bb95 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/helpfun.js @@ -0,0 +1,35 @@ +// --- BEGIN COPYRIGHT BLOCK --- +// 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; version 2 of the License. +// +// 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, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// Copyright (C) 2007 Red Hat, Inc. +// All rights reserved. +// --- END COPYRIGHT BLOCK --- + +function help(helptopic) { + + var HelpWin=window.open("","MyWin", "toolbar=no,directories=no,menubar=no,status=no,scrollbars=yes,resizable=yes,width=500,height=500"); + + HelpWin.location = helptopic; + HelpWin.focus(); + +} + +function helpstatus(helpline) { + + window.status = helpline; + + return true; + +} + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/index.html b/dogtag/kra-ui/shared/webapps/kra/agent/index.html new file mode 100644 index 000000000..30662d47a --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/index.html @@ -0,0 +1,23 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<html> +<script lang="javascript"> + // redirect to 'ROOT' + window.location = "/"; +</script> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/index.template b/dogtag/kra-ui/shared/webapps/kra/agent/index.template new file mode 100644 index 000000000..2a6c6b972 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/index.template @@ -0,0 +1,140 @@ +<!-- --- BEGIN COPYRIGHT BLOCK --- + 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; version 2 of the License. + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Copyright (C) 2007 Red Hat, Inc. + All rights reserved. + --- END COPYRIGHT BLOCK --- --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<CMS_TEMPLATE> +<title>DRM Agent</title> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> + +<body bgcolor="#FFFFFF" link="#666699" vlink="#666699" alink="#333366"> +<table border="0" width="100%" cellspacing="0" cellpadding="6"> + <tr bgcolor="#000080"> + <td> + <table border="0" cellspacing="12" cellpadding="0"> + <tr> + <td><img src="/kra/agent/graphics/logo_header.gif"></td> + <td> </td> + <td><font size="+1" face="PrimaSans BT, Verdana, sans-serif" color="white"><b>Dogtag<sup><font color="#999999" size="-2">®</font></sup> Agent Services</b></font></td> + </tr> + </table> + </td> + </tr> + <tr valign="TOP"> + <td> </td> + <td> + <table border="0" cellspacing="0" cellpadding="0"> + <tr valign="TOP"> + <td> </td> + <td> </td> + </tr> +<SCRIPT type="text/javascript"> +function displayError() +{ + document.write("<center><h2><b>" + + "Problem Processing Your Request" + + "</b></h2></center><p>" + + "The service encountered a problem " + + "when processing your request. This problem may " + + "indicate a flaw in the form used to submit your " + + "request or the values that were entered into the form." + + "The following message supplies more information " + + "about the error that occurred.<p>"); + document.write("<blockquote><b><pre>"); + if (result.header.errorDetails != null) { + document.write(result.header.errorDetails); + } else { + document.write("Unable to provide details. " + + "Contact Administrator."); + } + document.write("</pre></b></blockquote>"); + if (result.header.errorDescription != null) { + document.write('<p>Additional Information:<p>'); + document.write('<blockquote><b>'); + document.write(result.header.errorDescription); + document.write('</b></blockquote>'); + } + document.write("<p>"); + document.write("Please consult your local administrator for " + + "further assistance."); + document.write("The certificate server's log may provide " + + "further information."); +} + +if (result.header.errorDetails != null) { + displayError(); +} else { + var displayServices = 'true'; + for (var i = 0; i < result.recordSet.length; ++i) { + document.write('<tr valign="TOP">'); + document.write('<td>'); + document.write('<img src="/graphics/goto-tall.gif" width="10" height="15"> </td>'); + document.write('<td>'); + document.write('<font face="PrimaSans BT, Verdana, sans-serif">'); + document.write('<a href="'); + document.write(result.recordSet[i].id + '/index.html'); + if (result.recordSet[i].type == "RegistrationAuthority") { + document.write('">Registration Manager Agent Services</a></font>'); + document.write('<font size="-1" face="PrimaSans BT, Verdana, sans-serif"><br>'); + document.write('The operations available through this menu are used to process certificate requests, revoke certificates, and update information in the directory server.'); + } else if (result.recordSet[i].type == "CertificateAuthority") { + document.write('">Certificate Manager Agent Services</a></font>'); + document.write('<font size="-1" face="PrimaSans BT, Verdana, sans-serif"><br>'); + document.write('The operations available through this menu are used to process certificate requests, revoke certificates, and update information in the directory server.'); + } else if (result.recordSet[i].type == "OCSPAuthority") { + displayServices = 'false'; + document.write('">Online Certificate Status Manager Agent Services</a></font>'); + document.write('<font size="-1" face="PrimaSans BT, Verdana, sans-serif"><br>'); + document.write('The operations available through this menu are used to check certificate status.'); + } else if (result.recordSet[i].type == "KeyRecoveryAuthority") { + displayServices = 'false'; + document.write('">Data Recovery Manager Agent Services</a></font>'); + document.write('<font size="-1" face="PrimaSans BT, Verdana, sans-serif"><br>'); + document.write('The operations available through this menu are used to process key requests, and recover keys.'); + } else { + document.write('">Internal Error</a></font>'); + } + document.write('</font></td></tr>'); + } +} +document.write('<tr valign="TOP">'); +document.write('<td> </td>'); +document.write('<td> </td>'); +document.write('</tr>'); +if (displayServices== 'true') +{ + document.write('<tr valign="TOP">'); + document.write('<TD><IMG src="/graphics/goto-tall.gif" width="10" height="15"></TD>'); + document.write('<TD><FONT face="PrimaSans BT, Verdana, sans-serif">'); + document.write('<A href="ports">Services Summary</A></FONT></TD>'); + document.write('</tr>'); +} +document.write('<TR valign="TOP">'); +document.write('<TD> </TD>'); +document.write('<TD> </TD>'); +document.write('</tr>'); +document.write('</table>'); +document.write('</td>'); +document.write('<td> </td>'); +document.write('</tr>'); +</SCRIPT> + +</table> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/GrantRecovery.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/GrantRecovery.html new file mode 100644 index 000000000..225bbdb30 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/GrantRecovery.html @@ -0,0 +1,46 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<HEAD> +<TITLE>Authorize Recovery (for Recovery Agents)</TITLE> +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<SCRIPT LANGUAGE="JavaScript" SRC="../helpfun.js"> +</SCRIPT> +</HEAD> + +<body bgcolor="#FFFFFF" link="#666699" vlink="#666699" alink="#333366"> +<font size="+1" face="PrimaSans BT, Verdana, sans-serif">Authorize Recovery (for Recovery Agents)<br></font> +<font size="-1" face="PrimaSans BT, Verdana, sans-serif"> +Use this form to approve a key recovery. +</font> +<table border="0" cellspacing="0" cellpadding="0" background="/graphics/hr.gif" width="100%"> + <tr> + <td> </td> + </tr> +</table> + +<FORM ACTION="examineRecovery" METHOD=POST> +<INPUT TYPE="HIDDEN" NAME="op" VALUE="examineRecovery"> + +<table border="0" cellspacing="2" cellpadding="2"> + <tr> + <td valign="top" align="right"> + <font size="-1" face="PrimaSans BT, Verdana, sans-serif">Recovery authorization reference number:<br></font> + </td> + <td><INPUT TYPE="TEXT" NAME="recoveryID" SIZE=10 MAXLENGTH=99"></td> + </tr> +</table> + +<p> +<br> +<TABLE cellpadding="6" cellspacing="0" border="0" width="100%"> + <TR> + <TD align="right" bgcolor="#e5e5e5"> + <INPUT TYPE="submit" VALUE="Examine" width="72"> + <!-- <INPUT TYPE="button" VALUE="Help" width="72" + onClick="help('/manual/agt_gide/kraagt.htm#1022642')"> --> + </TD> + </TR> +</TABLE> +</FORM> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/ListRequests.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/ListRequests.html new file mode 100644 index 000000000..11c1b5ef8 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/ListRequests.html @@ -0,0 +1,96 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<HEAD> +<TITLE>List Key Service Requests</TITLE> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<SCRIPT LANGUAGE="JavaScript" SRC="../funcs.js"></SCRIPT> +<SCRIPT LANGUAGE="JavaScript" SRC="../helpfun.js"></SCRIPT> +<script LANGUAGE="JavaScript"> +<!-- +function doSubmit(form) +{ + if (form.lastEntryOnPage.value != "") { + if (isDecimalNumber(form.lastEntryOnPage.value) || + isHexNumber(form.lastEntryOnPage.value)) { + form.lastEntryOnPage.value = trim(form.lastEntryOnPage.value); + } else { + alert("You must specify a hexadecimal or decimal number " + + "for the starting request identifier."); + return; + } + } + form.submit(); +} +//--> +</script> +</HEAD> + +<body bgcolor="#FFFFFF" link="#666699" vlink="#666699" alink="#333366"> +<font size="+1" face="PrimaSans BT, Verdana, sans-serif">List Requests<br></font> +<font size="-1" face="PrimaSans BT, Verdana, sans-serif"> +Use this form to show a list of key service requests.</font> +<table border="0" cellspacing="0" cellpadding="0" background="/graphics/hr.gif" width="100%"> + <tr> + <td> </td> + </tr> +</table> + +<FORM ACTION="queryReq" METHOD=POST> + +<table border="0" cellspacing="2" cellpadding="2"> + <tr> + <td valign="top" align="right"> + <font size="-1" face="PrimaSans BT, Verdana, sans-serif">Request type:</font> + </td> + <td valign="top"> + <SELECT NAME="reqType"> + <OPTION SELECTED VALUE="enrollment">Show archival requests</OPTION> + <OPTION VALUE="recovery">Show recovery requests</OPTION> + <OPTION VALUE="netkeyKeygen">Show token key requests</OPTION> + <OPTION VALUE="showAll">Show all requests</OPTION> + </SELECT> + </td> + </tr> + <tr> + <td valign="top" align="right"> + <font size="-1" face="PrimaSans BT, Verdana, sans-serif">Request status:</font> + </td> + <td valign="top"> + <SELECT NAME="reqState"> + <OPTION SELECTED VALUE="showCompleted">Show completed requests</OPTION> + <OPTION VALUE="showPending">Show pending requests</OPTION> + <OPTION VALUE="showCancelled">Show canceled requests</OPTION> + <OPTION VALUE="showRejected">Show rejected requests</OPTION> + <OPTION VALUE="showAll">Show all requests</OPTION> + </SELECT> + </td> + </tr> + <tr> + <td valign="top" align="right"> + <font size="-1" face="PrimaSans BT, Verdana, sans-serif">Starting request identifier:<br>(optional)</font> + </td> + <td><INPUT TYPE="TEXT" NAME="lastEntryOnPage" SIZE=10 MAXLENGTH=99></td> + </tr> +</table> + +<p> +<br> +<TABLE cellpadding="6" cellspacing="0" border="0" width="100%" BACKGROUND="/graphics/gray90.gif"> + <TR> + <TD align="right" bgcolor="#e5e5e5"> + <INPUT TYPE="button" VALUE="Find" width="72" onClick="doSubmit(this.form);"> + <font size=-1 face="PrimaSans BT, Verdana, sans-serif">first</font> + <INPUT TYPE="hidden" NAME="direction" VALUE="first"> + <INPUT TYPE="TEXT" NAME="maxCount" SIZE=7 MAXLENGTH=99 VALUE="20"> + <font size=-1 face="PrimaSans BT, Verdana, sans-serif">records</font> + <!-- <INPUT TYPE="button" VALUE="Help" width="72" + onClick="help('http://www.redhat.com/docs/manuals/cert-system/8.0/agent/html/DRM_Recovering_Encrypted_Data.html#DRM_Recovering_Encrypted_Data-List_Requests')"> --> + </TD> + </TR> +</TABLE> + +</FORM> +</BODY> + +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/SrchKey.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/SrchKey.html new file mode 100644 index 000000000..685405465 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/SrchKey.html @@ -0,0 +1,323 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.5 [en]C-NSCP (WinNT; I) [Netscape]"> + <title>Search for Keys</title> +</head> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- +function publicKeyCritInUse() +{ + return document.publicKeyCritForm.inUse.checked; +} +function publicKeyCrit() +{ + if (document.publicKeyCritForm.publicKeyData.value.length == 0) { + alert("No public key specified"); + return null; + } + return "publicKey=x509cert#"+ + escapeValue(document.publicKeyCritForm.publicKeyData.value); +} +function ownerNameCritInUse() +{ + return document.ownerNameCritForm.inUse.checked; +} +function ownerNameCrit() +{ + return "keyOwnerName=" + document.ownerNameCritForm.ownerName.value; +} +function serialNumberRangeCritInUse() +{ + return document.serialNumberRangeCritForm.inUse.checked; +} + +function serialNumberRangeCrit() +{ + var crit = new Array; + var next = 0; + + var canonicalFrom = "", canonicalTo = ""; + + if (document.serialNumberRangeCritForm.serialFrom.value != "") { + if (isHex(document.serialNumberRangeCritForm.serialFrom.value)) { + canonicalFrom = parseInt(stripPrefix(document.serialNumberRangeCritForm.serialFrom.value),16); + } else { + canonicalFrom = document.serialNumberRangeCritForm.serialFrom.value; + } + crit[next++] = "keySerialNumber >= " + canonicalFrom; + } + if (document.serialNumberRangeCritForm.serialTo.value != "") { + if (isHex(document.serialNumberRangeCritForm.serialTo.value)) { + canonicalTo = parseInt(stripPrefix(document.serialNumberRangeCritForm.serialTo.value),16); + } else { + canonicalTo = document.serialNumberRangeCritForm.serialTo.value; + } + crit[next++] = "keySerialNumber <= " +canonicalTo; + } + + if (document.serialNumberRangeCritForm.serialFrom.value != "" && + document.serialNumberRangeCritForm.serialTo.value != "") { + if (parseInt(canonicalFrom) > parseInt(canonicalTo)) { + alert("The low end of the range is larger than the high end."); + return null; + } + } + + if (next == 0) { + return "keySerialNumber=*"; + } else if (next == 1) { + return crit[0]; + } else if (next == 2) { + return "&(" + crit[0] + ")(" + crit[1] + ")"; + } + // return crit.join("&"); +} +function archivedByCritInUse() +{ + return document.archivedByCritForm.inUse.checked; +} + +function archivedByCrit() +{ + if (document.archivedByCritForm.archivedBy.value.length == 0) { + alert("User id in 'issued by' filter is empty"); + return null; + } + return "keyArchivedBy = "+ + document.archivedByCritForm.archivedBy.value; +} + +function doSubmit(form) +{ + var andFilter = new Array; + var critCount = 0; + + if (serialNumberRangeCritInUse()) { + if ((andFilter[critCount++] = serialNumberRangeCrit()) == null) + return; + } + if (ownerNameCritInUse()) { + if ((andFilter[critCount++] = ownerNameCrit()) == null) + return; + } + if (publicKeyCritInUse()) { + if ((andFilter[critCount++] = publicKeyCrit()) == null) + return; + } + if (archivedByCritInUse()) { + if ((andFilter[critCount++] = archivedByCrit()) == null) + return; + } + + // At least one section must be selected + if (critCount == 0) { + alert("You must choose at least one section on this form."); + return; + } else if (critCount == 1) { + form.queryFilter.value = "(" + andFilter[0] + ")"; + } else if (critCount == 2) { + form.queryFilter.value = "(&(" + andFilter[0] + ")(" + + andFilter[1] + "))"; + } else if (critCount == 3) { + form.queryFilter.value = "(&(" + andFilter[0] + ")(" + + andFilter[1] + ")(" + andFilter[2] + "))"; + } else if (critCount == 4) { + form.queryFilter.value = "(&(" + andFilter[0] + ")(" + + andFilter[1] + ")(" + andFilter[2] + ")(" + + andFilter[3] + "))"; + } + + // form.queryFilter.value = andFilter.join("&"); + + form.op.value = "srchKey"; + + keyQuery = "srchKey?op=" + form.op.value + + "&maxResults=" + form.maxResults.value + + "&maxCount=" + form.maxCount.value + + "&queryFilter=" + + produceHTTPEscapedString(form.queryFilter.value); + + // Create two frames + window.location=keyQuery; +} +//--> +</script> +<body bgcolor="#FFFFFF"> +<font size=+1 face="PrimaSans BT, Verdana, sans-serif">Search for Keys +</font> +<br><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Use this form +to search for archived keys according to the criteria you specify. +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +Each section lets you specify a key property. Select a property, then +fill in any needed details in that section. +You can combine search criteria to further narrow the search. +<p> +In the list of keys found by the search, you can click a button to display +details about individual keys. +</font> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +<b><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Owner Name</font></b> +<form name="ownerNameCritForm"> +<input type="CHECKBOX" name="inUse"> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Show keys +belonging to a particular owner</font> +<blockquote> +<table> +<tr> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Owner Name:</font> +</td> +<td> +<input type="TEXT" name="ownerName" size=36> +</td> +</tr> +</table> +</blockquote> +</form> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +<b><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Key Identifiers</font></b> +<form name="serialNumberRangeCritForm"> +<input type="CHECKBOX" name="inUse"><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Show +keys that fall within a particular range of key identifiers</font> +<blockquote> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Enter +a range of key identifiers in hexadecimal form (starting with 0x, as they appear in key displays) or in decimal form.</font> +<p> +<table> +<tr> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Lowest +key identifier:</font> +</td> +<td> +<input TYPE="TEXT" NAME="serialFrom" SIZE=10 MAXLENGTH=99"> +</td> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +(leave blank for no lower limit) +</font> +</td> +</tr> +<tr> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Highest +key identifier:</font> +</td> +<td> +<input TYPE="TEXT" NAME="serialTo" SIZE=10 MAXLENGTH=99"> +</td> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +(leave blank for no upper limit) +</font> +</td> +</tr> +</table> +</blockquote> +</form> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +<b><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Certificate</font></b> +<form name="publicKeyCritForm"> +<input type="CHECKBOX" name="inUse"><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Show +the key that corresponds to the following certificate</font> +<blockquote> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +Copy the certificate, then paste it into this text area.</font> +<p> +<textarea name="publicKeyData" rows=10 cols=64></textarea></form> +</blockquote> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +<b><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Archiver</font></b> +<form name="archivedByCritForm"> +<input type="CHECKBOX" name="inUse"><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Show +keys that have been archived by a particular server</font> +<blockquote> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Enter +the user ID of the Certificate Manager or Registration Manager that submitted the archival request to the Data Recovery Manager.</font> +<p> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +User ID: +</font> +<input TYPE="text" NAME="archivedBy" SIZE=10> +<p> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +Note: Archiver information is available only when the Certificate Manager or Registration Manager is remote from the Data Recovery Manager. +</font> +<p> +</blockquote> +</form> + +<br><form name="queryForm" action="srchKey" method=POST> +<input type="HIDDEN" name="op" value=""> +<input type="HIDDEN" name="maxCount" VALUE="5"> +<input type="HIDDEN" name="queryFilter" VALUE=""> +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> + +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"><b>Limits</b></font> +<table border="0" cellspacing="2" cellpadding="2"> + <tr> + <td align="right"> + <font size=-1 face="PrimaSans BT, Verdana, sans-serif"> + Maximum results:</font> + </td> + <td> + <INPUT TYPE="TEXT" NAME="maxResults" VALUE=10 SIZE=5 MAXLENGTH=10> + </td> + </tr> + <tr> + <td align="right"> + <font size=-1 face="PrimaSans BT, Verdana, sans-serif"> + Time limit (in seconds):</font> + </td> + <td> + <INPUT TYPE="TEXT" NAME="timeLimit" SIZE=5 MAXLENGTH=10> + </td> + </tr> +</table> +<br> +<TABLE cellpadding="6" cellspacing="0" border="0" width="100%"> +<TR> +<TD align="right" bgcolor="#eeeeee"> +<input type="button" value="Show Key" onClick='doSubmit(queryForm)'> +<!-- <input type="button" value=Help +onClick="help('/manual/agt_gide/kraagt.htm#1019227')"> --> +</TD> +</TR> +</TABLE> +</form> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/SrchRecoverKey.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/SrchRecoverKey.html new file mode 100644 index 000000000..f4de8ca1f --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/SrchRecoverKey.html @@ -0,0 +1,328 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="GENERATOR" content="Mozilla/4.5 [en]C-NSCP (WinNT; I) [Netscape]"> + <title>Recover Keys (for Administrators)</title> +</head> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- +function publicKeyCritInUse() +{ + return document.publicKeyCritForm.inUse.checked; +} +function publicKeyCrit() +{ + if (document.publicKeyCritForm.publicKeyData.value.length == 0) { + alert("No public key specified"); + return null; + } + return "publicKey=x509cert#"+ + escapeValue(document.publicKeyCritForm.publicKeyData.value); +} +function ownerNameCritInUse() +{ + return document.ownerNameCritForm.inUse.checked; +} +function ownerNameCrit() +{ + return "keyOwnerName=" + document.ownerNameCritForm.ownerName.value; +} +function serialNumberRangeCritInUse() +{ + return document.serialNumberRangeCritForm.inUse.checked; +} + +function serialNumberRangeCrit() +{ + var crit = new Array; + var next = 0; + + var canonicalFrom = "", canonicalTo = ""; + + if (document.serialNumberRangeCritForm.serialFrom.value != "") { + if (isHex(document.serialNumberRangeCritForm.serialFrom.value)) { + canonicalFrom = parseInt(stripPrefix(document.serialNumberRangeCritForm.serialFrom.value),16); + } else { + canonicalFrom = document.serialNumberRangeCritForm.serialFrom.value; + } + crit[next++] = "keySerialNumber >= " + canonicalFrom; + } + if (document.serialNumberRangeCritForm.serialTo.value != "") { + if (isHex(document.serialNumberRangeCritForm.serialTo.value)) { + canonicalTo = parseInt(stripPrefix(document.serialNumberRangeCritForm.serialTo.value),16); + } else { + canonicalTo = document.serialNumberRangeCritForm.serialTo.value; + } + crit[next++] = "keySerialNumber <= " +canonicalTo; + } + + if (document.serialNumberRangeCritForm.serialFrom.value != "" && + document.serialNumberRangeCritForm.serialTo.value != "") { + if (parseInt(canonicalFrom) > parseInt(canonicalTo)) { + alert("The low end of the range is larger than the high end."); + return null; + } + } + + if (next == 0) { + return "keySerialNumber=*"; + } else if (next == 1) { + return crit[0]; + } else if (next == 2) { + return "&(" + crit[0] + ")(" + crit[1] + ")"; + } + // return crit.join("&"); +} +function archivedByCritInUse() +{ + return document.archivedByCritForm.inUse.checked; +} + +function archivedByCrit() +{ + if (document.archivedByCritForm.archivedBy.value.length == 0) { + alert("User id in 'issued by' filter is empty"); + return null; + } + return "keyArchivedBy = "+ + document.archivedByCritForm.archivedBy.value; +} + +function doSubmit(form) +{ + var andFilter = new Array; + var critCount = 0; + + if (serialNumberRangeCritInUse()) { + if ((andFilter[critCount++] = serialNumberRangeCrit()) == null) + return; + } + if (ownerNameCritInUse()) { + if ((andFilter[critCount++] = ownerNameCrit()) == null) + return; + } + if (publicKeyCritInUse()) { + if ((andFilter[critCount++] = publicKeyCrit()) == null) + return; + form.publicKeyData.value = document.publicKeyCritForm.publicKeyData.value; + } + if (archivedByCritInUse()) { + if ((andFilter[critCount++] = archivedByCrit()) == null) + return; + } + + // At least one section must be selected + if (critCount == 0) { + alert("You must choose at least one section on this form."); + return; + } else if (critCount == 1) { + form.queryFilter.value = "(" + andFilter[0] + ")"; + } else if (critCount == 2) { + form.queryFilter.value = "(&(" + andFilter[0] + ")(" + + andFilter[1] + "))"; + } else if (critCount == 3) { + form.queryFilter.value = "(&(" + andFilter[0] + ")(" + + andFilter[1] + ")(" + andFilter[2] + "))"; + } else if (critCount == 4) { + form.queryFilter.value = "(&(" + andFilter[0] + ")(" + + andFilter[1] + ")(" + andFilter[2] + ")(" + + andFilter[3] + "))"; + } + + // form.queryFilter.value = andFilter.join("&"); + + form.op.value = "srchKeyForRecovery"; + + keyQuery = "srchKeyForRecovery?op=" + form.op.value + + "&maxResults=" + form.maxResults.value + + "&maxCount=" + form.maxCount.value + + "&queryFilter=" + + produceHTTPEscapedString(form.queryFilter.value); + if (form.publicKeyData.value != "") { + keyQuery = keyQuery + "&publicKeyData="+ + produceHTTPEscapedString(form.publicKeyData.value); + } + + // Create two frames + window.location=keyQuery; +} +//--> +</script> +<body bgcolor="#FFFFFF"> +<font size=+1 face="PrimaSans BT, Verdana, sans-serif"> +Recover Keys (for Administrators)</font> +<br><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Use this form +to search for archived keys according to the criteria you specify. +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +Each section +lets you specify a key property. Select a property, then fill in any needed details in that section. You can combine search criteria to further narrow the search. +<p> +In the list of keys found by the search, you can click a button to recover individual keys. +</font> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +<b><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Owner Name</font></b> +<form name="ownerNameCritForm"> +<input type="CHECKBOX" name="inUse"> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Show +keys belonging to a particular owner</font> +<blockquote> +<table> +<tr> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Owner Name:</font> +</td> +<td> +<input type="TEXT" name="ownerName" size=36> +</td> +</tr> +</table> +</blockquote> +</form> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +<b><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Key Identifiers</font></b> +<form name="serialNumberRangeCritForm"> +<input type="CHECKBOX" name="inUse"><font face="PrimaSans BT, Verdana, sans-serif"><font size=-1>Show +keys that fall within a particular range of key identifiers</font></font> +<blockquote> +<font face="PrimaSans BT, Verdana, sans-serif"><font size=-1>Enter +a range of key identifiers in hexadecimal form (starting with 0x, as they appear in key displays) or in decimal form.</font></font> +<p> +<table> +<tr> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Lowest +key identifier:</font> +</td> +<td> +<input TYPE="TEXT" NAME="serialFrom" SIZE=10 MAXLENGTH=99"> +</td> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +(leave blank for no lower limit) +</font> +</td> +</tr> +<tr> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Highest +key identifier:</font> +</td> +<td> +<input TYPE="TEXT" NAME="serialTo" SIZE=10 MAXLENGTH=99"> +</td> +<td> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +(leave blank for no upper limit) +</font> +</td> +</tr> +</table> +</blockquote> +</form> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +<b><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Certificate</font></b> +<form name="publicKeyCritForm"> +<input type="CHECKBOX" name="inUse"><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Show +the key that corresponds to the following certificate</font> +<blockquote> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +Copy the certificate, then paste it into this text area.</font> +<p> +<textarea name="publicKeyData" rows=10 cols=64></textarea></form> +</blockquote> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> +<b><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Archiver</font></b> +<form name="archivedByCritForm"> +<input type="CHECKBOX" name="inUse"><font size=-1 face="PrimaSans BT, Verdana, sans-serif">Show +keys that have been archived by</font> a particular server +<blockquote> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +Enter the user ID of the Certificate or Registration Manager that submitted the archival request to the Data Recovery Manager. +</font> +<p> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +User ID: +</font> +<input TYPE="text" NAME="archivedBy" SIZE=10> +<p> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +Note: Archiver information is available only when the Certificate Manager or Registration Manager is remote from the Data Recovery Manager. +</font> +<p> +</blockquote> +</form> + +<br><form name="queryForm" action="srchKeyForRecovery" method=POST> +<input type="HIDDEN" name="op" value=""> +<input type="HIDDEN" name="maxCount" VALUE="5"> +<input type="HIDDEN" name="queryFilter" VALUE=""> +<input type="HIDDEN" name="publicKeyData" VALUE=""> +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> + +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"><b>Limits</b></font> +<table border="0" cellspacing="2" cellpadding="2"> + <tr> + <td align="right"> + <font size=-1 face="PrimaSans BT, Verdana, sans-serif"> + Maximum results:</font> + </td> + <td> + <INPUT TYPE="TEXT" NAME="maxResults" VALUE=10 SIZE=5 MAXLENGTH=10> + </td> + </tr> + <tr> + <td align="right"> + <font size=-1 face="PrimaSans BT, Verdana, sans-serif"> + Time limit (in seconds):</font> + </td> + <td> + <INPUT TYPE="TEXT" NAME="timeLimit" SIZE=5 MAXLENGTH=10> + </td> + </tr> +</table> +<br> +<TABLE cellpadding="6" cellspacing="0" border="0" width="100%"> +<TR> +<TD align="right" bgcolor="#eeeeee"> +<input type="button" value="Show Key" onClick='doSubmit(queryForm)'> +<!-- <input type="button" value=Help +onClick="help('/manual/agt_gide/kraagt.htm#1019227')"> --> +</TD> +</TR> +</TABLE> +</form> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/blank.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/blank.html new file mode 100644 index 000000000..d2c04a676 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/blank.html @@ -0,0 +1,10 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#CCCCCC"> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/confirmRecover.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/confirmRecover.html new file mode 100644 index 000000000..94df8b7f7 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/confirmRecover.html @@ -0,0 +1,6 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<TITLE>Recover Key Confirm</TITLE> +<HEAD> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/confirmRecoverBySerial.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/confirmRecoverBySerial.template new file mode 100644 index 000000000..88a8d5c84 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/confirmRecoverBySerial.template @@ -0,0 +1,70 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<CMS_TEMPLATE> +<TITLE>Recovering Key</TITLE> + +<HEAD> +<BODY bgcolor="white"> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<SCRIPT LANGUAGE="JavaScript"> +function renderCredentialBoxes(m) +{ + var str = ""; + + for(var i = 0; i < m; ++i) { + str = str + "Agent ID#" + i + + ":<INPUT TYPE=text NAME=\"uid" + i + + "\" VALUE=\"\">" + "Password #" + i + + ":<INPUT TYPE=password NAME=\"pwd" + i + + "\" VALUE=\"\" AutoComplete=off >\n"; + } + return str; +} + +function renderRecoverButton(serialNumber, noOfAgents) +{ + return "<FORM METHOD=post "+ + // "onSubmit=\"return recoverKey("+serialNumber+");\" "+ + "ACTION=\""+ "/agent/kra/recoverBySerial" +"\">\n"+ + renderCredentialBoxes(noOfAgents) + + "<INPUT TYPE=hidden NAME=\"op\" VALUE=\"recoverBySerial\">\n"+ + "<INPUT TYPE=hidden NAME=\"serialNumber\" VALUE=\""+ + serialNumber +"\">\n"+ + "<h2><b>PKCS#12 Delivery:</b></h2>"+ + "<p>"+ + "<p><pre>"+ + "PKCS#12 Password:<INPUT TYPE=password NAME=\"p12Password\" VALUE=\"\" AutoComplete=off >\n"+ + "Receipient Email:<INPUT TYPE=text NAME=\"p12Delivery\" VALUE=\"\">\n"+ + "</pre><p>"+ + "<INPUT TYPE=hidden NAME=\"commit\" VALUE=\"yes\">"+ + "<INPUT TYPE=submit VALUE=\"Recover\">"+ + "</FORM>\n"; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.write("<h2><b>Warning:</b></h2>"); + document.write("<p><pre>"); + document.write("Microsoft's Internet Explorer does not support " + + "no-cache feature."); + document.write("There is a security risk where Administrator " + + "can use back button to steal the recovery agents' passwords."); + document.write("</pre>"); + document.write("<h2><b>Key Content:</b></h2>"); + document.write("<p><pre>"); + document.write(result.header.publicKey); + document.write("</pre><p>"); + document.write("<h2><b>Recovery Agent Credentials:</b></h2>"); + document.write("<p><pre>"); + document.write(renderRecoverButton(result.header.serialNumber, + result.header.noOfRequiredAgents)); + document.write("</pre><p>"); +} +</SCRIPT> +<p> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerial.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerial.template new file mode 100644 index 000000000..a88599ede --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerial.template @@ -0,0 +1,114 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> +<CMS_TEMPLATE> +<title>Display Key</title> +<head> +</head> +<body bgcolor="white"> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +function renderDateFromSecs(secs) +{ + if (secs == null) return ""; + var today = new Date(); + var dateTmp = new Date(); + dateTmp.setTime(secs * 1000); + var dateStr = dateTmp.toLocaleString(); + return dateStr; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.writeln( + '<font face="PrimaSans BT, Verdana, sans-serif"><font size=+1>'+ + 'Key ' + + '<a href="' + '/kra/agent/kra/displayBySerial' + + '?op=displayBySerial&serialNumber=' + result.header.serialNumber + '"' + + 'onMouseOver=" return helpstatus(\'Click to redisplay this ' + + 'request \')" onMouseOut="return helpstatus(\'\')">' + + renderHexNumber(result.header.serialNumber,8) + + '</a></font></font>'); + document.writeln('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + + document.writeln('<table border="0" cellspacing="2" cellpadding="2" width="100%">'); + document.writeln('<tr><td valign="top" align="left" colspan="3" bgcolor="#e5e5e5">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('Key</font></td></tr>'); + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">State:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.state + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Created on:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(result.header.archivedOn) + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Updated on:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(result.header.archivedOn) + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Archiver:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.archivedBy + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Public key:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.publicKey + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Owner name:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.ownerName + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key algorithm:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.keyAlgorithm + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key length:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.keyLength + '</font></td>'); + document.writeln('</tr>'); + + + document.write("</table>"); + document.writeln('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); +} +</script> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerial2.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerial2.template new file mode 100644 index 000000000..332d205c2 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerial2.template @@ -0,0 +1,132 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <title>Display Certificate</title> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> + +<CMS_TEMPLATE> + + +<SCRIPT LANGUAGE="JavaScript"> +//<!-- + +function navMajorVersion() +{ + return parseInt(navigator.appVersion.substring(0, navigator.appVersion.indexOf("."))); +} + +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + + return sign + '0x' + '0' + absValue; +} +//--> +</SCRIPT> + +<body bgcolor="#FFFFFF" link="#6666CC" vlink="#6666CC" alink="#333399"> +<font face="PrimaSans BT, Verdana, sans-serif" size="+1">Certificate +<SCRIPT LANGUAGE="JavaScript"> +//<!-- +document.write(' ' + '0x0'+result.header.serialNumber); +if (navigator.appName == 'Netscape' && + navMajorVersion() > 3 && + typeof(crypto.version) != "undefined") { + document.write( + '<input type=hidden name=cmmfResponse value=true>'); +} + +//--> +</SCRIPT> +</font><br> +<table border="0" cellspacing="0" cellpadding="0" background="art/hr.gif" width="100%"> + <tr> + <td> </td> + </tr> +</table> + +<table border="0" cellspacing="2" cellpadding="2" width="100%"> +<tr align="left" bgcolor="#e5e5e5"><td align="left"> +<font face="PrimaSans BT, Verdana, sans-serif" size="-1"> +Certificate contents</font></td></tr></table> + +<pre> +<SCRIPT LANGUAGE="JavaScript"> +document.write(result.header.certPrettyPrint); +</SCRIPT> +</pre> + +<p> +<table border="0" cellspacing="2" cellpadding="2" width="100%"> +<tr align="left" bgcolor="#e5e5e5"><td align="left"> +<font face="PrimaSans BT, Verdana, sans-serif" size="-1"> +Certificate fingerprints</font></td></tr></table> + +<pre> +<SCRIPT LANGUAGE="JavaScript"> +document.write(result.header.certFingerprint); +</SCRIPT> +</pre> + +<p> +<table border="0" cellspacing="2" cellpadding="2" width="100%"> +<tr align="left" bgcolor="#e5e5e5"><td align="left"> +<font face="PrimaSans BT, Verdana, sans-serif" size="-1"> +Installing this certificate in a server</font></td></tr></table> + +<p> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +The following format can be used to install this certificate into a server. +<p> +Base 64 encoded certificate +</font> +<p><pre> +-----BEGIN CERTIFICATE----- +<SCRIPT LANGUAUGE="JavaScript"> +document.write(result.header.certChainBase64); +</SCRIPT> +-----END CERTIFICATE----- +</pre> + +<br><p> +<table border="0" cellspacing="2" cellpadding="2" width="100%"> +<tr align="left" bgcolor="#e5e5e5"><td align="left"> +<font face="PrimaSans BT, Verdana, sans-serif" size="-1"> +Downloading this certificate</font></td></tr></table> +<p> +<font size=-1 face="PrimaSans BT, Verdana, sans-serif"> +To download the certificate into your system, click the following button. +</font> +<p> + +<SCRIPT LANGUAGE="JavaScript"> +document.write("<center>"); +var loc = '/agent/kra/getBySerial?serialNumber='+ result.header.serialNumber; +if (navigator.appName == "Netscape") { + loc = loc + '&importCert=true'; + if (navMajorVersion() > 3 && typeof(crypto.version) != "undefined") { + loc = loc + '&cmmfResponse=true'; + } +} +document.write('<form>\n'+ + '<INPUT TYPE=\"button\" VALUE=\"Download This Certificate\"'+ + ' onClick=\"location.href=\''+ loc + '\'\">\n'+ + '</form>\n'); + +document.write("</center>"); +</SCRIPT> + +</font> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerialForRecovery.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerialForRecovery.template new file mode 100644 index 000000000..717d1d7d6 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerialForRecovery.template @@ -0,0 +1,232 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> +<CMS_TEMPLATE> +<title>Display Key</title> +<body bgcolor="white"> + +<SCRIPT LANGUAGE="JavaScript"> + +function PKCS12Password() +{ + if (document.forms[0].initAsyncRecovery.checked) { + document.forms[0].p12Password.disabled= true; + document.forms[0].p12PasswordAgain.disabled= true; + document.forms[0].nickname.disabled= true; + } else { + document.forms[0].p12Password.disabled= false; + document.forms[0].p12PasswordAgain.disabled= false; + document.forms[0].nickname.disabled= false; + } +} +</SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +function renderDateFromSecs(secs) +{ + if (secs == null) return ""; + var today = new Date(); + var dateTmp = new Date(); + dateTmp.setTime(secs * 1000); + var dateStr = dateTmp.toLocaleString(); + return dateStr; +} + +function renderCredentialBoxes(m) +{ + var str = ""; + + for(var i = 0; i < m; ++i) { + str = str + + "<tr>" + + "<td align=right><font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">" + + "Agent ID #" + i + ":" + + "</font></td>" + + "<td align=left><font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">" + + "<input type=text name=\"uid" + i + + "\" value=\"\">" + + "</font></td>" + + "</tr>" + + "<tr>" + + "<td align=right><font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">" + + "Password #" + i + ":" + + "</font></td>" + + "<td align=left><font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">" + + "<input type=password name=\"pwd" + i + + "\" value=\"\" AutoComplete=off >" + + "</font></td>" + + "</tr>"; + } + return str; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.writeln( + '<font face="PrimaSans BT, Verdana, sans-serif"><font size=+1>'+ + 'Key ' + + '<a href="' + '/kra/agent/kra/displayBySerial?' + + 'op=displayBySerial&serialNumber=' + result.header.serialNumber + '"' + + 'onMouseOver=" return helpstatus(\'Click to redisplay this ' + + 'request \')" onMouseOut="return helpstatus(\'\')">' + + renderHexNumber(result.header.serialNumber,8) + + '</a></font></font>'); + + document.writeln('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + + document.write('<form method=post ' + + 'action="' + '/kra/agent/kra/recoverBySerial' + '">\n'); + document.writeln('<table border="0" cellspacing="2" cellpadding="2" width="100%">'); + document.writeln('<tr><td valign="top" align="left" colspan="3" bgcolor="#e5e5e5">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('Key</font></td></tr>'); + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">State:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.state + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Created on:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(result.header.archivedOn) + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Updated on:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(result.header.archivedOn) + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Archiver:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.archivedBy + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Public key:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.publicKey + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Owner name:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.ownerName + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key algorithm:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.keyAlgorithm + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key length:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.keyLength + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Async Recovery:</font></td>'); + // initiate an asynchronous recovery or not + document.writeln('<td>'); + document.write('<input type="checkbox" CHECKED onClick="PKCS12Password()" name="initAsyncRecovery" value="ON">'); + document.writeln('</td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">PKCS #12 Password:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><input type=password disabled name="p12Password" value="" AutoComplete=off ></font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">PKCS #12 Password again:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><input type=password disabled name="p12PasswordAgain" value="" AutoComplete=off ></font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Nickname (Optional):</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><input type=text disabled name="nickname" value=""></font></td>'); + document.writeln('</tr>'); + + // certificate + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Certificate:</font></td>'); + if (result.header.publicKeyData != null) { + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><textarea name=cert rows=10 cols=56>' + result.header.publicKeyData + '</textarea></font></td>'); + } else { + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><textarea name=cert rows=10 cols=56></textarea></font></td>'); + } + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.writeln('</tr>'); + + // use distributed-recovery mode or not + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif"></font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + if (result.header.keySplitting == 'true') { + document.write('<input type="checkbox" CHECKED name="localAgents" Value="yes">'); + } else { + document.write('<input type="hidden" name="localAgents" Value="yes">'); + } + document.write('</font></td>'); + document.writeln('</tr>'); + + // recovery ID +/* recoery ID does not apply to async case + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Recovery authorization reference number:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.recoveryID + '</font></td>'); + document.writeln('</tr>'); + document.writeln('<input type=hidden name="op" value="recoverBySerial">'); +*/ + + if (result.header.keySplitting == 'true') { + document.write(renderCredentialBoxes(result.header.noOfRequiredAgents)); + } + + document.writeln('<input type=hidden name="recoveryID" VALUE="' + + result.header.recoveryID + '">\n'); + document.writeln('<input type=hidden name="serialNumber" VALUE="' + + result.header.serialNumber + '">\n'); + document.write('</table>'); + document.writeln('<table cellpadding="6" cellspacing="0" border="0" width="100%">'); + document.writeln('<tr>'); + document.writeln('<td align="right" bgcolor="#e5e5e5">'); + document.writeln('<input type=submit value="Recover">'); + // document.writeln("<input type=button value=\"Help\" onClick=\"help('/manual/agt_gide/kraagt.htm#KeyRecoveryForm')\">"); + document.writeln('</td>'); + document.writeln('</tr>'); + document.writeln('</table>'); + document.writeln('</form>'); +} +</script> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/examineRecovery.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/examineRecovery.template new file mode 100644 index 000000000..240f7e9e4 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/examineRecovery.template @@ -0,0 +1,109 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<CMS_TEMPLATE> +<title>Examine Recovery</title> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> +<body bgcolor="white"> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +function renderDateFromSecs(secs) +{ + if (secs == null) return ""; + var today = new Date(); + var dateTmp = new Date(); + dateTmp.setTime(secs * 1000); + var dateStr = dateTmp.toLocaleString(); + return dateStr; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.writeln( + '<font face="PrimaSans BT, Verdana, sans-serif"><font size=+1>'+ + 'Recovery Operation ' + result.header.recoveryID + + '</font></font>'); + + document.writeln('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + document.write('<form method=post ' + + 'action="' + '/kra/agent/kra/grantRecovery' + '">\n'); + + document.writeln('<table border="0" cellspacing="2" cellpadding="2" width="100%">'); + document.writeln('<tr><td valign="top" align="left" colspan="3" bgcolor="#e5e5e5">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('Key</font></td></tr>'); + + document.writeln('<tr>'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key Identifier:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.serialNumber + '</font></td>'); + document.writeln('</tr>'); + document.writeln('<tr>'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Owner Name:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.ownerName + '</font></td>'); + document.writeln('</tr>'); + document.writeln('<tr>'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key Algorithm:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.keyAlgorithm + '</font></td>'); + document.writeln('</tr>'); + document.writeln('<tr>'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Public Key:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.publicKey + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + if (result.header.keySplitting == 'true') { + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Agent Identifier:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><input type=text name="agentID" value=""></font></td>'); + document.writeln('</tr>'); document.writeln('<tr>'); document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Agent Password:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><input type=password name="agentPWD" value="" AutoComplete=off ></font></td>'); + document.writeln('</tr>'); + document.writeln('<tr>'); + } + document.writeln('</tr>'); + + document.writeln('<input type=hidden name="op" value="grantRecovery">'); + document.writeln('<input type=hidden name="recoveryID" VALUE="' + + result.header.recoveryID + '">\n'); + document.write('</table>'); + + document.writeln('<table cellpadding="6" cellspacing="0" border="0" width="100%">'); + document.writeln('<tr>'); + document.writeln('<td align="right" bgcolor="#e5e5e5">'); + document.writeln('<input type=submit value="Grant">'); + // document.writeln("<input type=button value=\"Help\" onClick=\"help('/manual/agt_gide/kraagt.htm#1022642')\">"); + document.writeln('</td>'); + document.writeln('</tr>'); + document.writeln('</table>'); + document.writeln('</form>'); +} +</script> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/finishAsyncRecovery.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/finishAsyncRecovery.template new file mode 100644 index 000000000..0d2caf676 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/finishAsyncRecovery.template @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Key Recovery Result</title> +</head> +<body bgcolor="white"> +<CMS_TEMPLATE> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- +function displayApprovalRecord(agentNumber, agentName) +{ + document.writeln("Agent" + agentNumber + " (" + agentName + + ") has approved the request."); +} +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Key Recovery Status</font>'); + document.write('<center><hr width="100%"></center>'); + + + document.writeln('<table border="0" cellspacing="2" cellpadding="2" width="100%">'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Recovery Authorization Reference Number:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.recoveryID + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key Identifier:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderHexNumber(result.header.serialNumber,8) + '</font></td>'); + document.writeln('</tr>'); + document.write('</table>'); + + document.write("<pre>"); + document.write('<font face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('The request has been submitted.'); + document.writeln(result.header.noOfRequiredAgents + + ' recovery agents are required for authorization.' ); + document.writeln('<p>'); + for(var i = 0; i < result.recordSet.length; ++i ) { + displayApprovalRecord(i+1, result.recordSet[i].agentName); + } + if (result.recordSet.length < result.header.noOfRequiredAgents) { + document.writeln('Waiting for the remaining approvals ...'); + } else if (result.header.status != "complete") { + document.writeln('<p>'); + document.writeln('The key is being recovered ...'); + } + document.write('</font>'); + document.write("</pre>"); + + document.write('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + if (result.header.status == "complete") { + document.writeln("<p>"); + document.writeln("The request is completed."); + document.writeln("<p>"); + + document.writeln( + 'If the key is not saved, you will need to go through the ' + + 'recovery process again. ' + + 'Click ' + + '<a href="/kra/agent/kra/getAsyncPk12?reqID=' + + result.header.requestID + '"' + + 'onMouseOver=" return helpstatus(\'Click to get key in PKCS12 ' + + '\')" onMouseOut="return helpstatus(\'\')">' + + "here" + + '</a>' + ' to save the recovered key in PKCS12 format.' +); + } + document.write('</font>'); +} + +//--> +</script> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/finishRecovery.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/finishRecovery.template new file mode 100644 index 000000000..e73a26237 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/finishRecovery.template @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Key Recovery Result</title> +</head> +<body bgcolor="white"> +<CMS_TEMPLATE> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- +function displayApprovalRecord(agentNumber, agentName) +{ + document.writeln("Agent" + agentNumber + " (" + agentName + + ") has approved the request."); +} +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Key Recovery Status</font>'); + document.write('<center><hr width="100%"></center>'); + + + document.writeln('<table border="0" cellspacing="2" cellpadding="2" width="100%">'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Recovery Authorization Reference Number:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.recoveryID + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key Identifier:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderHexNumber(result.header.serialNumber,8) + '</font></td>'); + document.writeln('</tr>'); + document.write('</table>'); + + document.write("<pre>"); + document.write('<font face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('The request has been submitted.'); + document.writeln(result.header.noOfRequiredAgents + + ' recovery agents are required for authorization.' ); + document.writeln('<p>'); + for(var i = 0; i < result.recordSet.length; ++i ) { + displayApprovalRecord(i+1, result.recordSet[i].agentName); + } + if (result.recordSet.length < result.header.noOfRequiredAgents) { + document.writeln('Waiting for the remaining approvals ...'); + } else if (result.header.status != "complete") { + document.writeln('<p>'); + document.writeln('The key is being recovered ...'); + } + document.write('</font>'); + document.write("</pre>"); + + document.write('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + if (result.header.status == "complete") { + document.writeln("<p>"); + document.writeln("The request is completed."); + document.writeln("<p>"); + + document.writeln( + 'If the key is not saved, you will need to go through the ' + + 'recovery process again. ' + + 'Click ' + + '<a href="/kra/agent/kra/getPk12?recoveryID=' + + result.header.recoveryID + '"' + + 'onMouseOver=" return helpstatus(\'Click to get key in PKCS12 ' + + '\')" onMouseOut="return helpstatus(\'\')">' + + "here" + + '</a>' + ' to save the recovered key in PKCS12 format.' +); + } + document.write('</font>'); +} + +//--> +</script> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameGrant.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameGrant.html new file mode 100644 index 000000000..14b3ced02 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameGrant.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<frameset cols="140,1*" border="0" frameborder="NO"> + <frame src="menuGrant.html" NORESIZE scrolling="NO" frameborder="NO" marginwidth="0" marginheight="0" name="left"> + + <frame src="grantRecovery.html" marginwidth="16" marginheight="16" frameborder="NO" NORESIZE name="content"> + +</frameset> +<noframes><body bgcolor="#FFFFFF"> + +</body></noframes> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameRecover.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameRecover.html new file mode 100644 index 000000000..60cd76f41 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameRecover.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<frameset cols="140,1*" border="0" frameborder="NO"> + <frame src="menuRecover.html" NORESIZE scrolling="NO" frameborder="NO" marginwidth="0" marginheight="0" name="left"> + + <frame src="srchRecoverKey.html" marginwidth="16" marginheight="16" frameborder="NO" NORESIZE name="content"> + +</frameset> +<noframes><body bgcolor="#FFFFFF"> + +</body></noframes> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameRequest.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameRequest.html new file mode 100644 index 000000000..ae544e34b --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameRequest.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<frameset cols="140,1*" border="0" frameborder="NO"> + <frame src="menuRequest.html" NORESIZE scrolling="NO" frameborder="NO" marginwidth="0" marginheight="0" name="left"> + + <frame src="listRequests.html" marginwidth="16" marginheight="16" frameborder="NO" NORESIZE name="content"> + +</frameset> +<noframes><body bgcolor="#FFFFFF"> + +</body></noframes> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameSearch.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameSearch.html new file mode 100644 index 000000000..a48fee2e6 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameSearch.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<frameset cols="140,1*" border="0" frameborder="NO"> + <frame src="menuSearch.html" NORESIZE scrolling="NO" frameborder="NO" marginwidth="0" marginheight="0" name="left"> + + <frame src="srchKey.html" marginwidth="16" marginheight="16" frameborder="NO" NORESIZE name="content"> + +</frameset> +<noframes><body bgcolor="#FFFFFF"> + +</body></noframes> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameStats.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameStats.html new file mode 100644 index 000000000..57a24de47 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/frameStats.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<frameset cols="140,1*" border="0" frameborder="NO"> + <frame src="menuStats.html" NORESIZE scrolling="NO" frameborder="NO" marginwidth="0" marginheight="0" name="left"> + + <frame src="/getStats" marginwidth="16" marginheight="16" frameborder="NO" NORESIZE name="content"> + +</frameset> +<noframes><body bgcolor="#FFFFFF"> + +</body></noframes> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/getApprovalStatus.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/getApprovalStatus.template new file mode 100644 index 000000000..5a6a1114a --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/getApprovalStatus.template @@ -0,0 +1,102 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<META HTTP-EQUIV="Refresh" CONTENT="5"> +<title>Key Recovery Result</title> +</head> +<body bgcolor="white"> +<CMS_TEMPLATE> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- +function displayApprovalRecord(agentNumber, agentName) +{ + document.writeln("Agent" + agentNumber + " (" + agentName + + ") has approved the request."); +} +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Key Recovery Status</font>'); + document.write('<center><hr width="100%"></center>'); + + + document.writeln('<table border="0" cellspacing="2" cellpadding="2" width="100%">'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Recovery Authorization Reference Number:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.recoveryID + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key Identifier:</font> <font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderHexNumber(result.header.serialNumber,8) + '</font></td>'); + document.writeln('</tr>'); + document.write('</table>'); + + document.write("<pre>"); + document.write('<font face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('The request has been submitted.'); + document.writeln(result.header.noOfRequiredAgents + + ' recovery agents are required for authorization.' ); + document.writeln('<p>'); + for(var i = 0; i < result.recordSet.length; ++i ) { + displayApprovalRecord(i+1, result.recordSet[i].agentName); + } + if (result.recordSet.length < result.header.noOfRequiredAgents) { + document.writeln('Waiting for the remaining approvals ...'); + } else if (result.header.status != "complete") { + document.writeln('<p>'); + document.writeln('The key is being recovered ...'); + } + document.write('</font>'); + document.write("</pre>"); + + document.write('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + if (result.header.status == "complete") { + document.writeln("<p>"); + document.writeln("The request is completed."); + document.writeln("<p>"); + + document.writeln( + 'If the key is not saved, you will need to go through the ' + + 'recovery process again. ' + + 'Click ' + + '<a href="/kra/agent/kra/getPk12?recoveryID=' + + result.header.recoveryID + '"' + + 'onMouseOver=" return helpstatus(\'Click to get key in PKCS12 ' + + '\')" onMouseOut="return helpstatus(\'\')">' + + "here" + + '</a>' + ' to save the recovered key in PKCS12 format.' +); + } + document.write('</font>'); +} + +//--> +</script> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/getStats.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/getStats.template new file mode 100644 index 000000000..cfd2f3193 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/getStats.template @@ -0,0 +1,124 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <title>Display CRL</title> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<SCRIPT LANGUAGE="JavaScript" SRC="../helpfun.js"></SCRIPT> +<SCRIPT LANGUAGE="JavaScript"> +<!-- +if (navigator.appName == "Microsoft Internet Explorer") { + document.writeln('<META HTTP-EQUIV="Pragma" CONTENT="no-cache">'); +} +//--> +</SCRIPT> +</head> + +<CMS_TEMPLATE> + +<body bgcolor="#FFFFFF" link="#6666CC" vlink="#6666CC" alink="#333399"> +<font face="PrimaSans BT, Verdana, sans-serif" size="+1"> +Statistics +</font><br> +<table border="0" cellspacing="0" cellpadding="0" background="/graphics/hr.gif" width="100%"> + <tr> + <td> </td> + </tr> +</table> +<br> + +<SCRIPT LANGUAGE="JavaScript"> +<!-- + document.writeln('<table border="0" cellspacing="0" cellpadding="0" width="100%">'); + document.writeln('<tr align="left" bgcolor="#e5e5e5"><td align="left">'); + document.writeln('<font face="PrimaSans BT, Verdana, sans-serif" size="-1">'); + document.writeln('Detailed Information (Start Time <b>' + header.startTime + '</b>, Current Time: <b>' + header.curTime + '</b>)</font></td><td align=right><a href="getStats?op=clear">Clear Statistics</a></td></tr></table>'); + + document.writeln('<table border="0" cellspacing="2" cellpadding="2" width="100%">'); + document.writeln('<tr>'); + document.writeln('<td width="40%">'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('<b>Action</b></font></td>'); + document.writeln('<td align="left">'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('<b># of operations</b></font></td>'); + document.writeln('<td align="left">'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('<b>Time Taken (in msec)</b></font></td>'); + document.writeln('<td align="left">'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('<b>Min</b></font></td>'); + document.writeln('<td align="left">'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('<b>Max</b></font></td>'); + document.writeln('<td align="left">'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('<b>Std Dev</b></font></td>'); + document.writeln('<td align="left">'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('<b>Avg</b></font></td>'); + document.writeln('<td align="left">'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('<b>Percentage</b></font></td>'); + document.writeln('</tr>'); + for (var i = 0; i <= recordCount; i++) { + if (result.recordSet[i].name.charAt(0) == '-') { + document.writeln('<tr><td>'); + } else { + document.writeln('<tr bgcolor="#cccccc"><td>'); + } + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln(result.recordSet[i].name + '</font></td>'); + document.writeln('<td>'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln(result.recordSet[i].noOfOp+'</font></td>'); + document.writeln('<td>'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln(result.recordSet[i].timeTaken+'</font></td>'); + document.writeln('<td>'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + if (result.recordSet[i].max == -1) { + document.writeln('-</font></td>'); + } else { + document.writeln(result.recordSet[i].min+'</font></td>'); + } + document.writeln('<td>'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + if (result.recordSet[i].max == -1) { + document.writeln('-</font></td>'); + } else { + document.writeln(result.recordSet[i].max+'</font></td>'); + } + document.writeln('<td>'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + if (result.recordSet[i].stddev == -1) { + document.writeln('-</font></td>'); + } else { + document.writeln(result.recordSet[i].stddev+'</font></td>'); + } + document.writeln('<td>'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + if (result.recordSet[i].noOfOp == 0) { + document.writeln('-'); + } else { + document.writeln(Math.round(100*(result.recordSet[i].avg))/100); + } + document.writeln('</font></td>'); + document.writeln('<td>'); + document.writeln('<font size=-1 face="PrimaSans BT, Verdana, sans-serif">'); + if (result.recordSet[i].noOfOp == 0) { + document.writeln('-'); + } else { + document.writeln(Math.round(100*(result.recordSet[i].percentage))/100 + '%'); + } + document.writeln('</font></td>'); + document.writeln('</tr>'); + } + document.writeln('</table><br>'); + +//--> +</SCRIPT> + +</BODY> +</HTML> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/grantAsyncRecovery.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/grantAsyncRecovery.template new file mode 100644 index 000000000..c76e61ac4 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/grantAsyncRecovery.template @@ -0,0 +1,45 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<CMS_TEMPLATE> +<head><title>Key Recovery Grant Result</title></head> +<body bgcolor="white"> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Key Recovery Result</font>'); + document.write('<center><hr width="100%"></center>'); + document.write("<p>"); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=-1>'); + document.write('Asynchronous Key recovery request' + +'<a href="/kra/agent/kra/processReq?op=processReq&seqNum=' + + result.header.requestID+'"> ' + result.header.requestID + '</a>' + + ' has been granted by ' + result.header.agentID); + document.write('</font>'); +} + +//--> +</script> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/grantRecovery.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/grantRecovery.template new file mode 100644 index 000000000..906da8338 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/grantRecovery.template @@ -0,0 +1,44 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<CMS_TEMPLATE> +<head><title>Key Recovery Result</title></head> +<body bgcolor="white"> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Key Recovery Result</font>'); + document.write('<center><hr width="100%"></center>'); + document.write("<p>"); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=-1>'); + document.write('Recovery of key with key identifier ' + + toHex(result.header.serialNumber) + + ' has been granted by ' + result.header.agentID); + document.write('</font>'); +} + +//--> +</script> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/index.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/index.html new file mode 100644 index 000000000..3ca0f8959 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/index.html @@ -0,0 +1,18 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>DRM Agent</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<link rel="shortcut icon" href="/kra/agent/graphics/favicon.ico" /> +</head> + +<frameset rows="105,1*" frameborder="NO" border="0"> + <frame src="/kra/agent/header?selected=kra" name="top" NORESIZE scrolling="NO" frameborder="NO" marginwidth="0" marginheight="0"> + + <frame src="frameRequest.html" scrolling="NO" name="middle" NORESIZE frameborder="NO" marginwidth="0" marginheight="0"> +</frameset> +<noframes><body bgcolor="#FFFFFF"> + +</body></noframes> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuCheck.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuCheck.html new file mode 100644 index 000000000..0787f104c --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuCheck.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#CCCCCC" link="#FFFFFF" vlink="#FFFFFF" alink="#333399"> + <table border="0" cellspacing="4" cellpadding="4" width="100%"> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRequest.html" target="middle"><b>List Requests</b></a></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameSearch.html" target="middle"><b>Search for Keys</b></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRecover.html" target="middle"><b>Recover Keys</b></font></td> + </tr> + <tr> + </tr> + <tr> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameGrant.html" target="middle"><b>Authorize Recovery</b></font></td> + </tr> + </table> +</body> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuGrant.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuGrant.html new file mode 100644 index 000000000..594dfaf06 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuGrant.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#CCCCCC" link="#FFFFFF" vlink="#FFFFFF" alink="#333399"> + <table border="0" cellspacing="4" cellpadding="4" width="100%"> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRequest.html" target="middle"><b>List Requests</b></a></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameSearch.html" target="middle"><b>Search for Keys</b></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRecover.html" target="middle"><b>Recover Keys</b></font></td> + </tr> + <tr> + </tr> + <tr> + </tr> + <tr> + <td bgcolor="white"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameGrant.html" target="middle"><b><font color=black>Authorize Recovery</font></b></font></td> + </tr> + </table> +</body> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuRecover.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuRecover.html new file mode 100644 index 000000000..1439917d4 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuRecover.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#CCCCCC" link="#FFFFFF" vlink="#FFFFFF" alink="#333399"> + <table border="0" cellspacing="4" cellpadding="4" width="100%"> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRequest.html" target="middle"><b>List Requests</b></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameSearch.html" target="middle"><b>Search for Keys</b></a></font></td> + </tr> + <tr> + <td bgcolor="white"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRecover.html" target="middle"><b><font color=black>Recover Keys</font></b></a></font></td> + </tr> + <tr> + </tr> + <tr> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameGrant.html" target="middle"><b>Authorize Recovery</b></a></font></td> + </tr> + </table> +</body> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuRequest.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuRequest.html new file mode 100644 index 000000000..69a5300a6 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuRequest.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#CCCCCC" link="#FFFFFF" vlink="#FFFFFF" alink="#333399"> + <table border="0" cellspacing="4" cellpadding="4" width="100%"> + <tr> + <td bgcolor="white"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRequest.html" target="middle"><b><font color=black>List Requests</font></b></a></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameSearch.html" target="middle"><b>Search for Keys</b></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRecover.html" target="middle"><b>Recover Keys</b></font></td> + </tr> + <tr> + </tr> + <tr> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameGrant.html" target="middle"><b>Authorize Recovery</b></font></td> + </tr> + </table> +</body> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuSearch.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuSearch.html new file mode 100644 index 000000000..e3f23d53f --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuSearch.html @@ -0,0 +1,33 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#CCCCCC" link="#FFFFFF" vlink="#FFFFFF" alink="#333399"> + <table border="0" cellspacing="4" cellpadding="4" width="100%"> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRequest.html" target="middle"><b>List Requests</b></a></font></td> + </tr> + <tr> + <td bgcolor="white"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameSearch.html" target="middle"><b><font color=black>Search for Keys</font></b></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRecover.html" target="middle"><b>Recover Keys</b></font></td> + </tr> + <tr> + </tr> + <tr> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameGrant.html" target="middle"><b>Authorize Recovery</b></font></td> + </tr> + </table> +</body> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuStats.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuStats.html new file mode 100644 index 000000000..2d132b185 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/menuStats.html @@ -0,0 +1,37 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#CCCCCC" link="#FFFFFF" vlink="#FFFFFF" alink="#333399"> + <table border="0" cellspacing="4" cellpadding="4" width="100%"> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRequest.html" target="middle"><b>List Requests</b></a></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameSearch.html" target="middle"><b>Search for Keys</b></font></td> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameRecover.html" target="middle"><b>Recover Keys</b></font></td> + </tr> + <tr> + </tr> + <tr> + </tr> + <tr> + <td bgcolor="#999999"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameGrant.html" target="middle"><b>Authorize Recovery</b></font></td> + </tr> + <tr> + <td bgcolor="white"><font size="-1" face="PrimaSans BT, Verdana, sans-serif"> + <a href="frameStats.html" target="middle"><b><font color="black">Statistics</font></b></font></td> + </tr> + </table> +</body> +</html> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/monitor.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/monitor.template new file mode 100644 index 000000000..27fa7f84a --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/monitor.template @@ -0,0 +1,184 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> +<HEAD><TITLE>Monitor</TITLE> +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +</HEAD> +<CMS_TEMPLATE> +<BODY bgcolor="white"> +<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif"> +Monitor +</font> +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> + +<SCRIPT LANGUAUGE="JavaScript"> +if (result.header.error != null) { + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln('CS monitor encountered the following error:'+result.header.error); + document.writeln('</font>'); +} else if (result.header.issuerName != null && + result.header.startDate != null && + result.header.interval != null && + result.header.numberOfIntervals != null && + result.header.totalNumberOfRequests != null && + result.header.totalNumberOfCertificates != null) { + var timeRange = result.header.interval * result.header.numberOfIntervals; + + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + + document.write('The following authority: '+result.header.issuerName+ + ' during <b>'+timeRange+' seconds</b>, starting from '+ + result.header.startDate+', processed <b>'+ + result.header.totalNumberOfRequests+' requests</b>'); + if (result.header.totalNumberOfCertificates > 0) + document.write(' and generated <b>'+result.header.totalNumberOfCertificates+ + ' certificates</b>'); + document.writeln('.<br> '); + document.writeln('</font>'); + + if ((typeof(result.recordSet) != "undefined") && (result.recordSet.length > 0)) { + var addCerts = 0; + if (result.recordSet[0].numberOfCertificates != null) + addCerts = 1; + + document.writeln('<table BORDER=1 CELLSPACING=0 CELLPADDING=4 align="center">'); + document.writeln('<tr>'); + document.writeln('<td align="center" BGCOLOR="#e5e5e5">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln('Interval number</font></td>'); + document.writeln('<td align="center" BGCOLOR="#e5e5e5">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln('Number of requests</font></td>'); + if (addCerts == 1) { + document.writeln('<td align="center" BGCOLOR="#e5e5e5">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln('Number of certificates</font></td>'); + } + document.writeln('</tr>'); + + var maxCerts = 0; + var maxReqs = 0; + for (var i = 0; i < result.recordSet.length; i++) { + document.writeln('<tr>'); + document.writeln('<td align="center">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln(' '+(i+1)+' </font></td>'); + document.writeln('<td align="center">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + if (result.recordSet[i].numberOfRequests != null && + result.recordSet[i].numberOfRequests > 0 && + result.recordSet[i].firstRequest != null) { + document.write('<a href="queryReq?seqNumFrom='+result.recordSet[i].firstRequest+ + '&reqType=showAll&reqState=showAll&maxCount='+ + result.recordSet[i].numberOfRequests+ + '&totalRecordCount='+result.recordSet[i].numberOfRequests+'">'+ + result.recordSet[i].numberOfRequests+'</a>'); + } else if (result.recordSet[i].numberOfRequests != null) { + document.write(' '+result.recordSet[i].numberOfRequests); + } else { + document.write(' 0'); + } + document.writeln('</font></td>'); + if (result.recordSet[i].numberOfRequests > maxReqs) + maxReqs = result.recordSet[i].numberOfRequests; + if (addCerts == 1) { + document.writeln('<td align="center">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + if (result.recordSet[i].numberOfCertificates != null && + result.recordSet[i].numberOfCertificates > 0 && + result.recordSet[i].startTime != null && + result.recordSet[i].endTime != null) { + document.write('<a href="srchCerts?queryCertFilter=(%26(requestCreateTime%3e%3d'+ + result.recordSet[i].startTime+ + ')(requestCreateTime%3c%3d'+ + result.recordSet[i].endTime+'))&maxResults='+ + (result.recordSet[i].numberOfCertificates+1)+'">'+ + result.recordSet[i].numberOfCertificates+'</a>'); + if (result.recordSet[i].numberOfCertificates > maxCerts) + maxCerts = result.recordSet[i].numberOfCertificates; + } else if (result.recordSet[i].numberOfCertificates != null) { + document.write(' '+result.recordSet[i].numberOfCertificates); + } else { + document.write(' 0'); + } + document.writeln('</font></td>'); + } + document.writeln('</tr>'); + } + if (result.header.totalNumberOfRequests != null) { + document.writeln('<tr>'); + document.writeln('<td align="center" BGCOLOR="#eeeeee">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln('Total</font></td>'); + document.writeln('<td align="center" BGCOLOR="#eeeeee">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln(' '+result.header.totalNumberOfRequests+' </font></td>'); + if (addCerts == 1) { + document.writeln('<td align="center" BGCOLOR="#eeeeee">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + if (result.header.totalNumberOfCertificates != null) { + document.write(' '+result.header.totalNumberOfCertificates); + } else { + document.write('0'); + } + document.writeln('</font></td>'); + } + document.writeln('</tr>'); + } + if (result.recordSet.length > 0) { + document.writeln('<tr>'); + document.writeln('<td align="center" BGCOLOR="#eeeeee">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln('Average</font></td>'); + document.writeln('<td align="center" BGCOLOR="#eeeeee">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln(' '+result.header.totalNumberOfRequests+' / '+timeRange+'s = '+ + (result.header.totalNumberOfRequests/timeRange)+'</font></td>'); + if (addCerts == 1) { + document.writeln('<td align="center" BGCOLOR="#eeeeee">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.write(' '+result.header.totalNumberOfCertificates+' / '+timeRange+'s = '+ + (result.header.totalNumberOfCertificates/timeRange)+'</font></td>'); + } + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.writeln('<td align="center" BGCOLOR="#eeeeee">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln('Max</font></td>'); + document.writeln('<td align="center" BGCOLOR="#eeeeee">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln(' '+maxReqs+' / '+result.header.interval+'s = '+ + (maxReqs/result.header.interval)+'</font></td>'); + if (addCerts == 1) { + document.writeln('<td align="center" BGCOLOR="#eeeeee">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.write(' '+maxCerts+' / '+result.header.interval+'s = '+ + (maxCerts/result.header.interval)+'</font></td>'); + } + document.writeln('</tr>'); + } + document.writeln('</table><br>'); + + document.writeln('<DIV ALIGN="CENTER">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">'); + document.writeln('This table presents authority activity in the time range of '+ + timeRange+' seconds divided into '+result.header.numberOfIntervals+ + ' intervals ('+result.header.interval+' seconds each).'); + document.writeln('</font>'); + document.writeln('</DIV>'); + } +} else { + document.writeln('Error'); +} + + +</SCRIPT> + + +</BODY> +</HTML> + diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/processReq.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/processReq.template new file mode 100644 index 000000000..a5292102d --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/processReq.template @@ -0,0 +1,281 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> +</head> +<CMS_TEMPLATE> +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<SCRIPT LANGUAGE="JavaScript" SRC="../helpfun.js"></SCRIPT> +<SCRIPT LANGUAGE="JavaScript"> +//<!-- + +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +function renderDateFromSecs(secs) +{ + if (secs == null) return ""; + var today = new Date(); + var dateTmp = new Date(); + dateTmp.setTime(secs * 1000); + var dateStr = dateTmp.toLocaleString(); + return dateStr; +} + +function passwdValidate() +{ + + if (document.forms[0].p12Password.value != document.forms[0].p12PasswordAgain.value) { + alert("Passwords do not match"); + return false; + } + return true; +} + +// +// This form is a template that gets a preamble defining the contents +// of the request form as a JavaScript object called 'result.header'. +// whose properties are filled in by the server. +// +document.writeln('<body vlink="0000ff" alink="ff0000" link="0000ff" bgcolor="white">'); +document.writeln( + '<font face="PrimaSans BT, Verdana, sans-serif"><font size=+1>'+ + 'Request ' + + '<a href="/kra/agent/kra/processReq?op=processReq&seqNum=' + + result.header.seqNum + '"' + + 'onMouseOver=" return helpstatus(\'Click to redisplay this ' + + 'request \')" onMouseOut="return helpstatus(\'\')">' + + result.header.seqNum + + '</a></font></font>'); +document.writeln('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD></TD></TR></TABLE>'); + + +document.writeln('<form action="/kra/agent/kra/getAsyncPk12" method=post onSubmit="return passwdValidate()">'); +document.writeln('<table border="0" cellspacing="2" cellpadding="2" width="100%">'); +document.writeln('<tr><td valign="top" align="left" colspan="3" bgcolor="#e5e5e5">'); +document.writeln('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">' +); +document.writeln('Request</font></td></tr>'); +document.writeln('<tr>'); +document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Status:</font></td>'); +document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.status + '</font></td>'); +document.writeln('</tr>'); + +// Note these values are filtered for safety by the server. +if (result.header.requestorName != null || + result.header.requestorEmail != null || + result.header.requestorPhone != null) { + document.writeln('<p><b> Requestor\'s Contact Information:</b><br>'); + document.writeln('<blockquote>'); + if (result.header.requestorName != null) { + document.writeln('<b> Name: </b>', + result.header.requestorName, + '<br>'); + } + if (result.header.requestorEmail != null) { + document.writeln('<b> E-mail: </b>', + result.header.requestorEmail, + '<br>'); + } + if (result.header.requestorPhone != null) { + document.writeln('<b> Phone: </b>', + result.header.requestorPhone, + '<br>'); + } + document.writeln('</blockquote>'); +} + +// request type +document.writeln('<tr>'); +document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Type:</font></td>'); +document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.requestType + '</font></td>'); +document.writeln('</tr>'); + +// createdOn +document.writeln('<tr>'); +document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Created on:</font></td>'); +document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(result.header.createdOn) + '</font></td>'); +document.writeln('</tr>'); + +// updateBy +document.writeln('<tr>'); +document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Updated by:</font></td>'); +document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.updatedBy + '</font></td>'); +document.writeln('</tr>'); + +// updatedOn +document.writeln('<tr>'); +document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Updated on:</font></td>'); +document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(result.header.updatedOn) + '</font></td>'); +document.writeln('</tr>'); + +document.writeln('<INPUT TYPE="HIDDEN" NAME="seqNum" VALUE="' + + result.header.seqNum + '">'); + +if (result.header.requestorName != null) { + document.writeln('<INPUT TYPE="HIDDEN" NAME="requestorName" VALUE="' + + result.header.requestorName + '">'); +} +if (result.header.requestorEmail != null) { + document.writeln('<INPUT TYPE="HIDDEN" NAME="requestorEmail" VALUE="' + + result.header.requestorEmail + '">'); +} +if (result.header.requestorPhone != null) { + document.writeln('<INPUT TYPE="HIDDEN" NAME="requestorPhone" VALUE="' + + result.header.requestorPhone + '">'); +} + + +// Note: requestorComments are safely filtered by server +if (result.header.requestorComments != null) { + document.writeln('<b> Comments Made When The Request Was Filed:</b><br>'); + document.writeln('<blockquote>', result.header.requestorComments, + '</blockquote>'); + document.writeln('<b> Additional Comments:</b><br>'); + document.writeln('<blockquote>'); + document.writeln('<INPUT TYPE="TEXT" NAME="moreComments" SIZE=72 VALUE="">'); + document.writeln('</blockquote>'); +} + +if (result.header.requestType == "enrollment") { + document.writeln('<tr><td valign="top" align="left" colspan="3" bgcolor="#e5e5e5">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('Archival Information</font></td></tr>'); + + // Archival-specific UI + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Public key:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.publicKey + '</font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Owner name:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.ownerName + '</font></td>'); + document.writeln('</tr>'); + + // key serial number + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key identifier:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.serialNumber + '</font></td>'); + document.writeln('</tr>'); + +} else if (result.header.requestType == "recovery") { + document.writeln('<tr><td valign="top" align="left" colspan="3" bgcolor="#e5e5e5">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('Recovery Information</font></td></tr>'); + + // Recovery-specific UI + // key serial number + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Key identifier:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + result.header.serialNumber + '</font></td>'); + document.writeln('</tr>'); + + // Recovery agents who have approved the recovery request + var initAgent=""; + var approveAgents=""; + if (result.header.approvingAgents.indexOf(",")== -1) { + initAgent = result.header.approvingAgents; + } else { + initAgent = result.header.approvingAgents.substring(0, + result.header.approvingAgents.indexOf(",")); + approveAgents = result.header.approvingAgents.substring( + result.header.approvingAgents.indexOf(",")+1); + } + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Recovery Initiating Agent:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + initAgent+ '</font></td>'); + document.writeln('</tr>'); + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Recovery Approving Agents:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + approveAgents + + '</font></td>'); + document.writeln('</tr>'); +} + + +if (result.header.status != "complete") { + document.writeln('<tr><td valign="top" align="left" colspan="3" bgcolor="#e5e5e5">'); + document.writeln('<font size="-1" face="PrimaSans BT, Verdana, sans-serif">'); + document.writeln('Action</font></td></tr>'); + if (result.header.requestType == "recovery") { + if (result.header.status == "pending") { +document.writeln('<tr>'); +document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">Asynchronous Key Recovery:</font></td>'); + document.writeln('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><a href="/kra/agent/kra/grantAsyncRecovery?op=grantRecovery&reqID=' + + result.header.seqNum + '">' + ' Grant</a></font></td>'); +document.writeln('</tr>'); + + } else if (result.header.status == "approved") { + var initAgent = result.header.approvingAgents.substring(0, + result.header.approvingAgents.indexOf(",")); + + // get PKCS#12 password + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">PKCS #12 Password:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><input type=password name="p12Password" value="" AutoComplete=off ></font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.write('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">PKCS #12 Password again:</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><input type=password name="p12PasswordAgain" value="" AutoComplete=off ></font></td>'); + document.writeln('</tr>'); + + document.writeln('<tr>'); + document.writeln('<input type=hidden name="op" VALUE="getAsyncPk12">'); + document.writeln('<input type=hidden name="reqID" VALUE="' + + result.header.seqNum + '">\n'); + document.writeln('<td align=right><font size="-1" face="PrimaSans BT, Verdana, sans-serif">(only allowed for initiating agent,' + initAgent+')</font></td>'); + document.writeln('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><input type=submit value="Retrieve PKCS#12"></font></td>'); + document.writeln('</tr>'); + } + } else { + if (result.header.assignedTo != null) { + document.write('<b> Assigned To: </b>',result.header.assignedTo); + } else { + document.write('<b> Unassigned </b>'); + } + if (result.header.assignedTo == null) { + document.write('<a href="/kra/agent/kra/processReq?op=processReq&doAssign=yes&seqNum=' + + result.header.seqNum + '"' + + 'onMouseOver=" return helpstatus(\'Click to assign the ' + + 'request to yourself\')" ' + + 'onMouseOut="return helpstatus(\'\')">', + ' Assign To Me','</a>'); + } else if (result.header.assignedTo != result.header.callerName) { + document.write('<a href="/' + + '/kra/agent/kra/processReq?op=processReq&doAssign=yes&overrideAssignment=yes&seqNum=' + result.header.seqNum + '">', + ' Re-assign To Me', '</a>'); + } + } +} + +document.writeln('</table>'); +document.writeln('</form>'); +document.writeln('</body>'); + +//--> +</SCRIPT> + +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/queryKey.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/queryKey.template new file mode 100644 index 000000000..0bea5f140 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/queryKey.template @@ -0,0 +1,208 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<CMS_TEMPLATE> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> + +<title>Key Query Result</title> +<body bgcolor="white"> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- + +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function recoverKey(serialNumber) +{ + return confirm("WARNING!! You are about to do an irreversible operation.\nDo you really want to recover key # "+ + renderHexNumber(serialNumber,8)+ " ?"); +} + +function renderOidName(oid) +{ + if (oid == "1.2.840.113549.1.1.1") + return "PKCS #1 RSA"; + else if (oid == "1.2.840.113549.1.1.4") + return "PKCS #1 MD5 With RSA"; + else + return "OID."+oid; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +function renderDateFromSecs(secs) +{ + if (secs == null) return ""; + var today = new Date(); + var dateTmp = new Date(); + dateTmp.setTime(secs * 1000); + var dateStr = dateTmp.toLocaleString(); + return dateStr; +} + +function renderDetailsButton(serialNumber) +{ + return '<form method=post '+ + 'action="'+ + '/kra/agent/kra/displayBySerial' +'">\n'+ + '<input type=hidden name="op" value="displayBySerial">\n'+ + '<input type=hidden name="serialNumber" value="'+ + serialNumber + + '">\n'+ + '<input type=submit value="Details"></form>\n'; +} + +function renderRecoverButton(serialNumber) +{ + return '<form method=post ' + + 'ACTION="'+ + '/kra/agent/kra/confirmRecoverSerial' + '">\n'+ + '<input type=hidden name="op" value="confirmRecoverBySerial">\n'+ + '<input type=hidden name="serialNumber" VALUE="' + + serialNumber + + '">\n' + + '<input type=hidden name="commit" value="yes">' + + '<input type=hidden name="updateCRL" value="yes">' + + '<input type=submit value="Recover">' + + '</form>\n'; +} + +function displayKeyRecord(rec) +{ + document.write('<tr bgcolor=#e5e5e5>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Key identifier</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">State</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Filed</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Updated</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Archiver</font></td>'); + document.write('</tr>'); + + document.write('<tr>'); + // document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><a href="' + '/kra/agent/kra/displayBySerial?' + 'op=displayBySerial&serialNumber=' + rec.serialNumber + '">' + renderHexNumber(rec.serialNumber,8) + '</a></font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderHexNumber(rec.serialNumber,8) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + rec.state + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(rec.archivedOn) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(rec.archivedOn) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + rec.archivedBy + '</font></td>'); + document.write('</tr>'); + + document.write('<tr bgcolor=#e5e5e5>'); + document.write('<td>'); + document.write('</td>'); + document.write('<td align=left colspan=2>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Algorithm</font></td>'); + document.write('<td align=left colspan=2>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Owner Name</font></td>'); + document.write('</tr>'); + + document.write('<tr>'); + document.write('<td>'); + document.write(renderDetailsButton(rec.serialNumber)); + document.write('</td>'); + document.write('<td align=left colspan=2><font size="-1" face="PrimasSans BT, Verdana, sans-serif">' + + renderOidName(rec.keyAlgorithm) + (rec.keyLength != null ? + " with "+ rec.keyLength + "-bit key" : "")+ '</font></td>'); + document.write('<td align=left colspan=2><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + + rec.ownerName + '</font></td>'); + document.write('</tr>'); +} + +function renderHidden(name,value) +{ + return '<INPUT TYPE="hidden" NAME="' + name + '" VALUE="">\n'; +} + +function doNext(form) +{ + form.action = '/kra/agent/kra/'+result.header.op; + form.op.value = result.header.op; + form.queryFilter.value = result.header.queryFilter; + form.querySentinel.value = result.header.querySentinel; + form.totalRecordCount.value = result.header.totalRecordCount; + form.submit(); +} + +function displayNextForm() +{ + document.write( + '<div align=center> \n'+ + '<form name ="nextForm" method=POST ' + + 'onSubmit="doNext(nextForm);" '+ + 'action="">\n'+ + renderHidden("op")+ + renderHidden("queryFilter")+ + renderHidden("querySentinel")+ + renderHidden("totalRecordCount")); + document.write( + '<input type=submit value=" Next "> '+ + '<input type=text size=2 maxlength=99 name=maxCount value="'+ + result.fixed.maxCount+ + '"><font size="1" face="PrimasSans BT, Verdana, sans-serif"> record(s)</font>\n'+ + '</FORM></DIV>\n'); +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else if (result.header.totalRecordCount == 0) { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Search Results</font>\n'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + document.write('<div align=left><b><font face="PrimaSans BT, Verdana, sans-serif" size="+1">No Matching Key Found</font></b></div>\n'); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Search Results</font>\n'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>'); + document.write('Authority: ' + +(result.header.archiverName != null ? result.header.archiverName : "UNKNOWN")); + document.write('</font><br>\n'); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=-1>'); + document.write('Total Number of Records Found : ' + + result.header.totalRecordCount); + document.write('</font>\n'); + document.write('<p>'); + + document.write('<table cellpadding=6 cellspacing=4 border=0 width=100%>'); + + for(var i = 0; i < result.recordSet.length; ++i ) { + displayKeyRecord(result.recordSet[i]); + } + document.write('</table>'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + + if (result.header.querySentinel != null) { + displayNextForm(); + } +} + +//--> +</script> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/queryKeyForRecovery.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/queryKeyForRecovery.template new file mode 100644 index 000000000..09e873377 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/queryKeyForRecovery.template @@ -0,0 +1,220 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<CMS_TEMPLATE> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> +<title>Key Query Result</title> +<body bgcolor="white"> +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- + +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function recoverKey(serialNumber) +{ + return confirm("WARNING!! You are about to do an irreversible operation.\nDo you really want to recover key # "+ + renderHexNumber(serialNumber,8)+ " ?"); +} + +function renderOidName(oid) +{ + if (oid == "1.2.840.113549.1.1.1") + return "PKCS #1 RSA"; + else if (oid == "1.2.840.113549.1.1.4") + return "PKCS #1 MD5 With RSA"; + else + return "OID."+oid; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +function renderDateFromSecs(secs) +{ + if (secs == null) return ""; + var today = new Date(); + var dateTmp = new Date(); + dateTmp.setTime(secs * 1000); + var dateStr = dateTmp.toLocaleString(); + return dateStr; +} + +function renderDetailsButton(serialNumber,publicKeyData) +{ + if (publicKeyData != null) { + return '<form method=post '+ + 'action="'+ + '/kra/agent/kra/displayBySerialForRecovery' +'">\n'+ + '<input type=hidden name="op" value="displayBySerialForRecovery">\n'+ + '<input type=hidden name="serialNumber" value="'+ + serialNumber + + '">\n'+ + '<input type=hidden name="publicKeyData" value="'+ + publicKeyData + + '">\n'+ + '<input type=submit value="Recover"></form>\n'; + } else { + return '<form method=post '+ + 'action="'+ + '/kra/agent/kra/displayBySerialForRecovery' +'">\n'+ + '<input type=hidden name="op" value="displayBySerialForRecovery">\n'+ + '<input type=hidden name="serialNumber" value="'+ + serialNumber + + '">\n'+ + '<input type=submit value="Recover"></form>\n'; + } +} + +function renderRecoverButton(serialNumber) +{ + return '<form method=post ' + + 'ACTION="'+ + '/kra/agent/kra/confirmRecoverBySerialForRecovery' + '">\n'+ + '<input type=hidden name="op" value="confirmRecoverBySerialForRecovery">\n'+ + '<input type=hidden name="serialNumber" VALUE="' + + serialNumber + + '">\n' + + '<input type=hidden name="commit" value="yes">' + + '<input type=hidden name="updateCRL" value="yes">' + + '<input type=submit value="Recover">' + + '</form>\n'; +} + +function displayKeyRecord(rec) +{ + document.write('<tr bgcolor=#e5e5e5>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Key identifier<font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">State</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Filed</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Updated</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Archiver</font></td>'); + document.write('</tr>'); + + document.write('<tr>'); + // document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><a href="' + '/kra/agent/kra/displayBySerialForRecovery?' + 'op=displayBySerialForRecovery&serialNumber=' + rec.serialNumber + '">' + renderHexNumber(rec.serialNumber,8) + '</a></font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderHexNumber(rec.serialNumber,8) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + rec.state + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(rec.archivedOn) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(rec.archivedOn) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + rec.archivedBy + '</font></td>'); + document.write('</tr>'); + + document.write('<tr bgcolor=#e5e5e5>'); + document.write('<td>'); + document.write('</td>'); + document.write('<td align=left colspan=2>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Algorithm</font></td>'); + document.write('<td align=left colspan=2>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Owner Name</font></td>'); + document.write('</tr>'); + + document.write('<tr>'); + document.write('<td>'); + document.write(renderDetailsButton(rec.serialNumber,result.header.publicKeyData)); + document.write('</td>'); + document.write('<td align=left colspan=2><font size="-1" face="PrimasSans BT, Verdana, sans-serif">' + + renderOidName(rec.keyAlgorithm) + (rec.keyLength != null ? + " with "+ rec.keyLength + "-bit key" : "")+ '</font></td>'); + document.write('<td align=left colspan=2><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + + rec.ownerName + '</font></td>'); + document.write('</tr>'); +} + +function renderHidden(name,value) +{ + return '<INPUT TYPE="hidden" NAME="' + name + '" VALUE="">\n'; +} + +function doNext(form) +{ + form.action = '/kra/agent/kra/'+result.header.op; + form.op.value = result.header.op; + form.queryFilter.value = result.header.queryFilter; + form.querySentinel.value = result.header.querySentinel; + form.totalRecordCount.value = result.header.totalRecordCount; + form.submit(); +} + +function displayNextForm() +{ + document.write( + '<div align=center> \n'+ + '<form name ="nextForm" method=POST ' + + 'onSubmit="doNext(nextForm);" '+ + 'action="">\n'+ + renderHidden("op")+ + renderHidden("queryFilter")+ + renderHidden("querySentinel")+ + renderHidden("totalRecordCount")); + document.write( + '<input type=submit value=" Next "> '+ + '<input type=text size=2 maxlength=99 name=maxCount value="'+ + result.fixed.maxCount+ + '"><font size="1" face="PrimasSans BT, Verdana, sans-serif"> record(s)</font>\n'+ + '</FORM></DIV>\n'); +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else if (result.header.totalRecordCount == 0) { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Search Results</font>\n'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + document.write('<div align=left><b><font face="PrimaSans BT, Verdana, sans-serif" size="+1">No Matching Key Found</font></b></div>\n'); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Search Results</font>\n'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>'); + document.write('Authority: ' + +(result.header.archiverName != null ? result.header.archiverName : "UNKNOWN")); + document.write('</font><br>\n'); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=-1>'); + document.write('Total Number of Records Found : ' + + result.header.totalRecordCount); + document.write('</font>\n'); + document.write('<p>'); + + document.write('<table cellpadding=6 cellspacing=4 border=0 width=100%>'); + + for(var i = 0; i < result.recordSet.length; ++i ) { + displayKeyRecord(result.recordSet[i]); + } + document.write('</table>'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + + if (result.header.querySentinel != null) { + displayNextForm(); + } +} + +//--> +</script> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/queryReq.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/queryReq.template new file mode 100644 index 000000000..47db884fa --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/queryReq.template @@ -0,0 +1,385 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <title>Request Queue</title> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<style type="text/css"> + +.floating { + position: absolute; + left: 300px; + top: 50px; + width: 400px; + padding: 3px; + border: solid; + border-width: 2px; + background: white; + display: none; + margin: 5px; +} + + +table#t td { + font-size: 0.8em; + padding: 0px; + margin: 0px; +} + +.h { + background-color: #eeeeee; + font-color: #606060; + font-weight: bold; +} + +</STYLE> +</head> + +<body bgcolor="#FFFFFF" link="#000000" vlink="#000000" alink="#000000"> +<font size=+1 face="PrimaSans BT, Verdana, sans-serif">Request Queue</font> +<br> + +<table BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif" > + <tr> + <td> </td> + </tr> +</table> + +<CMS_TEMPLATE> + +<SCRIPT LANGUAGE="JavaScript"> +//<!-- + +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +function renderDateFromSecs(secs) +{ + if (secs == null) return ""; + var dateTmp = new Date(); + dateTmp.setTime(secs * 1000); + var year = dateTmp.getYear(); + if (year < 100) { + year += 1900; + } else { + year %= 100; + year += 2000; + } + return (dateTmp.getMonth()+1)+"/"+dateTmp.getDate()+"/"+year+" ;"+ + (dateTmp.getHours()<10?" ;":"")+ + dateTmp.getHours()+":"+(dateTmp.getMinutes()<10?"0":"")+ + dateTmp.getMinutes()+":"+(dateTmp.getSeconds()<10?"0":"")+ + dateTmp.getSeconds(); +} + +function stateCodeToColor(code) +{ + if (code == "waiting") + return "darkgreen"; + else if (code == "cancelled" || code == "rejected") + return "red"; + else if (code == "complete") + return "black"; + else + return "magenta"; +} + +function addSpaces(str) +{ + var outStr = ""; + var i0 = 0; + var i1 = 0; + + while (i1 < str.length) { + i1 = str.indexOf(',', i0); + if (i1 > -1) { + i1++; + outStr += str.substring(i0, i1); + outStr += " "; + i0 = i1; + } else { + outStr += str.substring(i0, str.length); + i1 = str.length; + } + } + + return outStr; +} + +function renderDetailsButton(serialNumber) +{ + return '<form method=post '+ + 'action="'+ + '/kra/agent/kra/processReq' +'">\n'+ + '<input type=hidden name="seqNum" value="'+ + serialNumber + + '">\n'+ + '<input type=submit value="Details"></form>\n'; +} + +function setNode(table,desc,content,style) +{ + var row = table.insertRow(-1); + if (style) { + row.className = style; + } + var cell1 = row.insertCell(-1); + var desc_text = document.createTextNode(desc); + cell1.appendChild(desc_text); + var cell2 = row.insertCell(-1); + var content_text = document.createTextNode(content); + cell2.appendChild(content_text); +} + +function mouseover(element,event) +{ + var x = event.clientX; + var y = event.clientY; + + var index= element.getAttribute("index"); + if (index == null) { return false; } + var req = recordSet[index]; + + element.parentNode.parentNode.parentNode.style.backgroundColor = "#EEEEFF"; + + var v; + var e = document.getElementById("reqMetaDatadiv"); + + var t = document.getElementById("t"); + + // delete all the rows in the table + var i=0; + while (i < t.rows.length) { + t.deleteRow(0); + } + + setNode(t,"Request details for request #", req.seqNum,"h"); + setNode(t,"Request Type:",req.requestType); + setNode(t,"Submitted On:", renderDateFromSecs(req.createdOn)); + setNode(t,"Updated On:", renderDateFromSecs(req.updatedOn)); + setNode(t,"Updated By:", req.updatedBy); + assumedheight = 180; + e.style.left = x+30; // x-offset of floating div + + var offset = 20; // extra y-offset of floating div + var bottom = y + offset + assumedheight; + if (bottom > window.innerHeight) { + offset = 0 - (2*offset) - assumedheight; + } + + e.style.top = y+ offset +document.body.scrollTop; + + // unhide the window + e.style.display ="block"; + + +} + +function mouseout(element) +{ +// window.setTimeout("hide",1); + var index= element.getAttribute("index"); + element.parentNode.parentNode.parentNode.style.backgroundColor = "#FFFFFF"; + + hide(); +} + +function hide() +{ + document.getElementById("reqMetaDatadiv").style.display ="none"; +} + +function displayRequest(i, req) +{ + // request table items + + // request number + document.write("<tr><td align=right>"+ + "<font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">"+ + "<a index='"+i+"' href='/kra/agent/kra/processReq?seqNum=" + req.seqNum + + "' onmouseover='mouseover(this,event);' "+ + "onmouseout='mouseout(this);'>"+ + req.seqNum +"</a></font></td>\n"); + + //State + document.write("<td>"+ + "<font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\" color=\""+ + stateCodeToColor(req.status) +"\">"+req.status); + if (req.status == "complete" && req.Result != null && req.Result != "1") { + document.write("d with error"); + } + document.write("</font></td>\n"); + + // Assigned to + document.write("<td><font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\""+ + (req.assignedTo == null? " color=\"magenta\"": "")+ ">\n"+ + ((req.status != "pending")? "": + (req.assignedTo == null? "unassigned":req.assignedTo))+ + "</font></td>"); + + //Subject + if (req.subject != null) { + document.write("<TD colspan=2>\n"+ + "<font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">\n"+ + addSpaces(req.subject) + "</font></td></tr>\n"); + } else { + document.write("<TD></TD><TD></TD></tr>\n"); + } + +// document.write("</table>\n"); +} + +function displayRequestList() +{ + document.write("<font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">\n"); + if (result.header.error != null) { + document.write(result.header.error + "</font>\n"); + } else if (result.recordSet.length == 0) { + document.write("No Matching Request Records Found</font>\n"); + } else { + document.write("Total Number of Records Found : " + + result.header.totalRecordCount + "</font></br>\n"); +// result.header.totalRecordCount + "</font></br> \n"); + + document.write("<table BORDER=0 CELLSPACING=2 CELLPADDING=6 WIDTH='100%'>\n"+ + "<tr align=center><td>\n"); + displayNextForm(); + + document.write( + "<table border=\"0\" width=\"100%\" cellspacing=\"2\" cellpadding=\"2\">\n"+ + "<tr><td width=10%> </td>"+ + "<td width=10%> </td>"+ + "<td width=20%> </td>"+ + "<td width=60%> </td>"+ + "</tr>\n"); + + document.write( +// "<table border=\"0\" width=\"100%\" cellspacing=\"2\" cellpadding=\"2\">\n"+ +// "<tr><td width=5%> </td><td width=25%> </td><td width=25%> </td>\n"+ +// "<td width=25%> </td><td width=20%> </td></tr>\n"+ + "<TR BGCOLOR=\"#E5E5E5\">\n"+ + "<TD align=right width=10%>\n"+ + "<font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">\n"+ + "#</font></TD>\n"+ + "<TD width=10%>\n"+ + "<font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">\n"+ + "Status</font></TD>\n"+ + "<TD width=20%>\n"+ + "<font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">\n"+ + "Assigned to</font></TD>\n"+ + "<TD width=60%>\n"+ + "<font size=-1 face=\"PrimaSans BT, Verdana, sans-serif\">\n"+ + "Key Owner</font></TD></TR>\n" + ); + + for(var i = 0; i < result.recordSet.length; ++i ) { + displayRequest(i, result.recordSet[i]); + } + document.write("</table>"); + displayNextForm(); +} +} + + +function renderHidden(name,value) +{ + return "<INPUT TYPE='hidden' NAME='"+ name +"' VALUE=''>\n"; +} + + +function doNext(element) +{ + var form = element.form; + form.action = "queryReq"; + form.op.value = result.header.op; + + form.direction.value = element.name; + form.firstEntryOnPage.value = result.header.firstEntryOnPage; + form.lastEntryOnPage.value = result.header.lastEntryOnPage; + form.totalRecordCount.value = result.header.totalRecordCount; + + form.submit(); +} + + +function displayNextForm(seqNum) +{ +var seqNum=parseInt(result.recordSet[result.recordSet.length-1].seqNum) + 1; +//alert("in displayNextForm seqNum="+seqNum); + document.write( +//"<div align=center> \n"+ +"<FORM NAME='nextForm' METHOD='POST' ACTION=''>\n"+ renderHidden("op")); + +var disabledDown = ((result.fixed.maxCount > result.header.currentRecordCount) || + (result.header.currentRecordCount == result.header.totalRecordCount)) ? + "disabled='true'" : ""; +var disabledUp = (result.header.firstEntryOnPage != null && + result.header.firstEntryOnPage <= 1) ? "disabled='true'" : ""; + +document.write( +"<button NAME='begin' onClick='doNext(this)' VALUE='|<<' width='72'>|<<</button>\n"+ +"<button "+disabledUp+" NAME='previous' onClick='doNext(this)' VALUE='<' width='72'><</button>\n"+ +"<INPUT TYPE='hidden' NAME='totalRecordCount' VALUE='"+ +result.header.totalRecordCount+ "'>\n"+ +"<INPUT TYPE='hidden' NAME='op' VALUE='"+ "queryReq"+ "'>\n"+ +"<INPUT TYPE='hidden' NAME='querySentinelDown' VALUE='"+ + result.header.querySentinelDown+ "'>\n"+ +"<INPUT TYPE='hidden' NAME='querySentinelUp' VALUE='"+ + result.header.querySentinelUp+ "'>\n"+ + +"<INPUT TYPE='hidden' NAME='firstEntryOnPage' VALUE='"+ + result.header.querySentinelUp +"'>\n"+ +"<INPUT TYPE='hidden' NAME='lastEntryOnPage' VALUE='"+ + result.header.querySentinelDown +"'>\n"+ +"<INPUT TYPE='hidden' NAME='direction' VALUE='"+ + result.header.direction+ "'>\n"); + + if (result.fixed.reqType != null) + document.write("<INPUT TYPE='hidden' NAME='reqType' VALUE='" + result.fixed.reqType + "'>\n"); + + if (result.fixed.reqState != null) + document.write("<INPUT TYPE='hidden' NAME='reqState' VALUE='" + result.fixed.reqState + "'>\n"); + + document.write("<INPUT TYPE=\"hidden\" NAME=\"totalRecordCount\" VALUE=\"" + + result.header.totalRecordCount + "\">\n"); + + document.write("<INPUT style='padding-left: 2px;' TYPE=text SIZE=16 NAME=maxCount VALUE='"+ +result.fixed.maxCount+ "'>\n"+ +"<button "+disabledDown+" NAME='next' onClick='doNext(this)' VALUE='>' width='72'>></button>\n"+ +"<button NAME='end' onClick='doNext(this)' VALUE='>>|' width='72'>>>|</button>\n"+ +"</FORM>\n"); +} + + +displayRequestList(); + +//--> +</SCRIPT> +<div id="reqMetaDatadiv" class="floating"> +<table id="t" width="100%"> +<tr><td><td/></tr> +</table> +</div> + +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/recoverBySerial.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/recoverBySerial.template new file mode 100644 index 000000000..a1209f32b --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/recoverBySerial.template @@ -0,0 +1,76 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Key Recovery Result</title> +</head> +<body bgcolor="white"> + +<CMS_TEMPLATE> +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Key Recovery Status</font>'); + document.write('<center><hr width="100%"></center>'); + document.write("<p>"); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=-1>'); + document.write('Recovery request for Key with key identifier ' + + toHex(result.header.serialNumber) + + ' has been submitted.\n' + + 'Waiting for recovery agents\' approval...'); + + if (result.header.recoveryID == null) { + document.writeln('<p>'); + document.writeln(result.header.noOfRequiredAgents + + ' recovery agents are required for authorization.' ); + document.writeln('<p>'); + + document.writeln('This is an asynchronous key recovery request. You might want to notify authorized key recovery agents to grant this request by going to request' + + '<a href="/kra/agent/kra/processReq?op=processReq&seqNum=' + + result.header.requestID+'"> ' + result.header.requestID +'</a>.') + document.write('</font>'); + }else { + document.write('</font>'); + window.location = result.fixed.scheme + "://" + result.fixed.host + + ":" + result.fixed.port + "/kra/agent/kra/getApprovalStatus?recoveryID=" + + result.header.recoveryID; + + if (result.header.status == "complete") { + document.writeln( + '<font face="PrimaSans BT, Verdana, sans-serif"><font size=+1>'+ + 'Click ' + + '<a href="/kra/agent/kra/getPk12?recoveryID=' + + result.header.recoveryID + '"' + + 'onMouseOver=" return helpstatus(\'Click to get key in PKCS12 ' + + '\')" onMouseOut="return helpstatus(\'\')">' + + "here" + + '</a>' + ' to get the recovered key in PKCS12 format.</font></font>'); + } + } + +} + +//--> +</script> +</BODY> +</HTML> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/srchKey.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/srchKey.template new file mode 100644 index 000000000..a06999996 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/srchKey.template @@ -0,0 +1,213 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<CMS_TEMPLATE> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> + +<title>Key Query Result</title> +<body bgcolor="white"> + +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- + +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function recoverKey(serialNumber) +{ + return confirm("WARNING!! You are about to do an irreversible operation.\nDo you really want to recover key # "+ + renderHexNumber(serialNumber,8)+ " ?"); +} + +function renderOidName(oid) +{ + if (oid == "1.2.840.113549.1.1.1") + return "PKCS #1 RSA"; + else if (oid == "1.2.840.113549.1.1.4") + return "PKCS #1 MD5 With RSA"; + else + return "OID."+oid; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +function renderDateFromSecs(secs) +{ + if (secs == null) return ""; + var today = new Date(); + var dateTmp = new Date(); + dateTmp.setTime(secs * 1000); + var dateStr = dateTmp.toLocaleString(); + return dateStr; +} + +function renderDetailsButton(serialNumber) +{ + return '<form method=post '+ + 'action="'+ + '/kra/agent/kra/displayBySerial' +'">\n'+ + '<input type=hidden name="op" value="displayBySerial">\n'+ + '<input type=hidden name="serialNumber" value="'+ + serialNumber + + '">\n'+ + '<input type=submit value="Details"></form>\n'; +} + +function renderRecoverButton(serialNumber) +{ + return '<form method=post ' + + 'ACTION="'+ + '/kra/agent/kra/confirmRecoverSerial' + '">\n'+ + '<input type=hidden name="op" value="confirmRecoverBySerial">\n'+ + '<input type=hidden name="serialNumber" VALUE="' + + serialNumber + + '">\n' + + '<input type=hidden name="commit" value="yes">' + + '<input type=hidden name="updateCRL" value="yes">' + + '<input type=submit value="Recover">' + + '</form>\n'; +} + +function displayKeyRecord(rec) +{ + document.write('<tr bgcolor=#e5e5e5>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Key identifier</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">State</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Filed</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Updated</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Archiver</font></td>'); + document.write('</tr>'); + + document.write('<tr>'); + // document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><a href="' + '/kra/agent/kra/displayBySerial?' + 'op=displayBySerial&serialNumber=' + rec.serialNumber + '">' + renderHexNumber(rec.serialNumber,8) + '</a></font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderHexNumber(rec.serialNumber,8) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + rec.state + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(rec.archivedOn) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(rec.archivedOn) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + rec.archivedBy + '</font></td>'); + document.write('</tr>'); + + document.write('<tr bgcolor=#e5e5e5>'); + document.write('<td>'); + document.write('</td>'); + document.write('<td align=left colspan=2>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Algorithm</font></td>'); + document.write('<td align=left colspan=2>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Owner Name</font></td>'); + document.write('</tr>'); + + document.write('<tr>'); + document.write('<td>'); + document.write(renderDetailsButton(rec.serialNumber)); + document.write('</td>'); + document.write('<td align=left colspan=2><font size="-1" face="PrimasSans BT, Verdana, sans-serif">' + + renderOidName(rec.keyAlgorithm) + (rec.keyLength != null ? + " with "+ rec.keyLength + "-bit key" : "")+ '</font></td>'); + document.write('<td align=left colspan=2><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + + rec.ownerName + '</font></td>'); + document.write('</tr>'); +} + +function renderHidden(name,value) +{ + return '<INPUT TYPE="hidden" NAME="' + name + '" VALUE="">\n'; +} + +function doNext(form) +{ + form.action = '/kra/agent/kra/'+result.header.op; + form.op.value = result.header.op; + form.queryFilter.value = result.header.queryFilter; + form.querySentinel.value = result.header.querySentinel; + form.totalRecordCount.value = result.header.totalRecordCount; + form.submit(); +} + +function displayNextForm() +{ + document.write( + '<div align=center> \n'+ + '<form name ="nextForm" method=POST ' + + 'onSubmit="doNext(nextForm);" '+ + 'action="">\n'+ + renderHidden("op")+ + renderHidden("queryFilter")+ + renderHidden("querySentinel")+ + renderHidden("totalRecordCount")); + document.write( + '<input type=submit value=" Next "> '+ + '<input type=text size=2 maxlength=99 name=maxCount value="'+ + result.fixed.maxCount+ + '"><font size="1" face="PrimasSans BT, Verdana, sans-serif"> record(s)</font>\n'+ + '</FORM></DIV>\n'); +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else if (result.header.totalRecordCount == 0) { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Search Results</font>\n'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + document.write('<div align=left><b><font face="PrimaSans BT, Verdana, sans-serif" size="+1">No Matching Key Found</font></b></div>\n'); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Search Results</font>\n'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>'); + document.write('Authority: ' + +(result.header.archiverName != null ? result.header.archiverName : "UNKNOWN")); + document.write('</font><br>\n'); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=-1>'); + document.write('Total Number of Records Found : ' + + result.header.totalRecordCount); + document.write('</font>\n'); + + if (result.header.totalRecordCount == result.header.maxSize) { + document.write( +"<font face=\"PrimaSans BT, Verdana, sans-serif\" size=\"-1\">\n"+ +"(Maximum size reached)"+ +"</font>\n" + ); + } + document.write('<p>'); + + document.write('<table cellpadding=6 cellspacing=4 border=0 width=100%>'); + + for(var i = 0; i < result.recordSet.length; ++i ) { + displayKeyRecord(result.recordSet[i]); + } + document.write('</table>'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + +} + +//--> +</script> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/srchKeyForRecovery.template b/dogtag/kra-ui/shared/webapps/kra/agent/kra/srchKeyForRecovery.template new file mode 100644 index 000000000..4c5387c32 --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/srchKeyForRecovery.template @@ -0,0 +1,227 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<CMS_TEMPLATE> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +</head> + +<title>Key Query Result</title> +<body bgcolor="white"> +<SCRIPT LANGUAGE="JavaScript"></SCRIPT> +<script language="JavaScript" src="../funcs.js"></script> +<script language="JavaScript" src="../helpfun.js"></script> +<script language="JavaScript"> +//<!-- + +function toHex(number) +{ + var absValue = "", sign = ""; + var digits = "0123456789abcdef"; + if (number < 0) { + sign = "-"; + number = -number; + } + + for(; number >= 16 ; number = Math.floor(number/16)) { + absValue = digits.charAt(number % 16) + absValue; + } + absValue = digits.charAt(number % 16) + absValue; + return sign + absValue; +} + +function recoverKey(serialNumber) +{ + return confirm("WARNING!! You are about to do an irreversible operation.\nDo you really want to recover key # "+ + renderHexNumber(serialNumber,8)+ " ?"); +} + +function renderOidName(oid) +{ + if (oid == "1.2.840.113549.1.1.1") + return "PKCS #1 RSA"; + else if (oid == "1.2.840.113549.1.1.4") + return "PKCS #1 MD5 With RSA"; + else + return "OID."+oid; +} + +function renderHexNumber(number,width) +{ + var num = toHex(number); + while (num.length < width) + num = "0"+num; + return "0x"+num; +} + +function renderDateFromSecs(secs) +{ + if (secs == null) return ""; + var today = new Date(); + var dateTmp = new Date(); + dateTmp.setTime(secs * 1000); + var dateStr = dateTmp.toLocaleString(); + return dateStr; +} + +function renderDetailsButton(serialNumber,publicKeyData) +{ + if (publicKeyData != null) { + return '<form method=post '+ + 'action="'+ + '/kra/agent/kra/displayBySerialForRecovery' +'">\n'+ + '<input type=hidden name="op" value="displayBySerialForRecovery">\n'+ + '<input type=hidden name="serialNumber" value="'+ + serialNumber + + '">\n'+ + '<input type=hidden name="publicKeyData" value="'+ + publicKeyData + + '">\n'+ + '<input type=submit value="Recover"></form>\n'; + } else { + return '<form method=post '+ + 'action="'+ + '/kra/agent/kra/displayBySerialForRecovery' +'">\n'+ + '<input type=hidden name="op" value="displayBySerialForRecovery">\n'+ + '<input type=hidden name="serialNumber" value="'+ + serialNumber + + '">\n'+ + '<input type=submit value="Recover"></form>\n'; + } +} + +function renderRecoverButton(serialNumber) +{ + return '<form method=post ' + + 'ACTION="'+ + '/kra/agent/kra/confirmRecoverBySerialForRecovery' + '">\n'+ + '<input type=hidden name="op" value="confirmRecoverBySerialForRecovery">\n'+ + '<input type=hidden name="serialNumber" VALUE="' + + serialNumber + + '">\n' + + '<input type=hidden name="commit" value="yes">' + + '<input type=hidden name="updateCRL" value="yes">' + + '<input type=submit value="Recover">' + + '</form>\n'; +} + +function displayKeyRecord(rec) +{ + document.write('<tr bgcolor=#e5e5e5>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Key identifier<font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">State</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Filed</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Updated</font></td>'); + document.write('<td align=left>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Archiver</font></td>'); + document.write('</tr>'); + + document.write('<tr>'); + // document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><a href="' + '/kra/agent/kra/displayBySerialForRecovery?' + 'op=displayBySerialForRecovery&serialNumber=' + rec.serialNumber + '">' + renderHexNumber(rec.serialNumber,8) + '</a></font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderHexNumber(rec.serialNumber,8) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + rec.state + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(rec.archivedOn) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + renderDateFromSecs(rec.archivedOn) + '</font></td>'); + document.write('<td align=left><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + rec.archivedBy + '</font></td>'); + document.write('</tr>'); + + document.write('<tr bgcolor=#e5e5e5>'); + document.write('<td>'); + document.write('</td>'); + document.write('<td align=left colspan=2>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Algorithm</font></td>'); + document.write('<td align=left colspan=2>' + + '<font size=-1 face="PrimaSans BT, Verdana, sans-serif">Owner Name</font></td>'); + document.write('</tr>'); + + document.write('<tr>'); + document.write('<td>'); + document.write(renderDetailsButton(rec.serialNumber,result.header.publicKeyData)); + document.write('</td>'); + document.write('<td align=left colspan=2><font size="-1" face="PrimasSans BT, Verdana, sans-serif">' + + renderOidName(rec.keyAlgorithm) + (rec.keyLength != null ? + " with "+ rec.keyLength + "-bit key" : "")+ '</font></td>'); + document.write('<td align=left colspan=2><font size="-1" face="PrimaSans BT, Verdana, sans-serif">' + + rec.ownerName + '</font></td>'); + document.write('</tr>'); +} + +function renderHidden(name,value) +{ + return '<INPUT TYPE="hidden" NAME="' + name + '" VALUE="">\n'; +} + +function doNext(form) +{ + form.action = '/kra/agent/kra/'+result.header.op; + form.op.value = result.header.op; + form.queryFilter.value = result.header.queryFilter; + form.querySentinel.value = result.header.querySentinel; + form.totalRecordCount.value = result.header.totalRecordCount; + form.submit(); +} + +function displayNextForm() +{ + document.write( + '<div align=center> \n'+ + '<form name ="nextForm" method=POST ' + + 'onSubmit="doNext(nextForm);" '+ + 'action="">\n'+ + renderHidden("op")+ + renderHidden("queryFilter")+ + renderHidden("querySentinel")+ + renderHidden("totalRecordCount")); + document.write( + '<input type=submit value=" Next "> '+ + '<input type=text size=2 maxlength=99 name=maxCount value="'+ + result.fixed.maxCount+ + '"><font size="1" face="PrimasSans BT, Verdana, sans-serif"> record(s)</font>\n'+ + '</FORM></DIV>\n'); +} + +if (result.header.errorDetails != null) { + writeError(result.header.errorDetails); +} else if (result.header.totalRecordCount == 0) { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Search Results</font>\n'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + document.write('<div align=left><b><font face="PrimaSans BT, Verdana, sans-serif" size="+1">No Matching Key Found</font></b></div>\n'); +} else { + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>Search Results</font>\n'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=+1>'); + document.write('Authority: ' + +(result.header.archiverName != null ? result.header.archiverName : "UNKNOWN")); + document.write('</font><br>\n'); + document.write('<font face="PrimaSans BT, Verdana, sans-serif" size=-1>'); + document.write('Total Number of Records Found : ' + + result.header.totalRecordCount); + document.write('</font>\n'); + + if (result.header.totalRecordCount == result.header.maxSize) { + document.write( +"<font face=\"PrimaSans BT, Verdana, sans-serif\" size=\"-1\">\n"+ +"(Maximum size reached)"+ +"</font>\n" + ); + } + + document.write('<p>'); + + document.write('<table cellpadding=6 cellspacing=4 border=0 width=100%>'); + + for(var i = 0; i < result.recordSet.length; ++i ) { + displayKeyRecord(result.recordSet[i]); + } + document.write('</table>'); + document.write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="100%" BACKGROUND="/graphics/hr.gif"><TR><TD> </TD></TR></TABLE>'); + +} + +//--> +</script> +</body> +</html> diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/kra/top.html b/dogtag/kra-ui/shared/webapps/kra/agent/kra/top.html new file mode 100644 index 000000000..5e7a2a40e --- /dev/null +++ b/dogtag/kra-ui/shared/webapps/kra/agent/kra/top.html @@ -0,0 +1,48 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Untitled Document</title> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +</head> + +<body bgcolor="#CCCCCC" link="#FFFFFF" vlink="#FFFFFF" alink="#CCCCFF"> +<table border="0" width="100%" cellspacing="0" cellpadding="0" bgcolor="#666699"> + <tr> + <td> + <table border="0" cellspacing="0" cellpadding="0"> + <tr> + <td> + <table border="0" cellspacing="12" cellpadding="0" width="100%"> + <tr> + <td><font size="-1" face="PrimaSans BT, Verdana, sans-serif" color="white">Dogtag<font color="#999999" size="-2">®</font><b><br> + Certificate System</b></font><font size="+1" face="PrimaSans BT, Verdana, sans-serif" color="white"><b></b></font></td> + <td></td> + <td><font size="+1" face="PrimaSans BT, Verdana, sans-serif" color="white">Privileged User Services</font> </td> + </tr> + </table> + </td> + </tr> + </table> + <table border="0" cellspacing="0" cellpadding="0"> + <tr> + <td><img src="/graphics/spacer.gif" width="12" height="21"></td> + <td><img src="/graphics/dgLeftTab.gif" width="13" height="21"></td> + <td bgcolor="#999999" nowrap><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><a href="../kra/index.html" target="_top">Certificate + Service</a><b></b></font></td> + <td><img src="/graphics/dgRightTab.gif" width="16" height="21"></td> + <td><img src="/graphics/dgLeftTab.gif" width="13" height="21"></td> + <td bgcolor="#999999" nowrap><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><a href="../kra/index.html" target="_top">Registration + Service </a></font></td> + <td><img src="/graphics/dgRightTab.gif" width="16" height="21"></td> + <td><img src="/graphics/lgLeftTab.gif" width="13" height="21"></td> + <td bgcolor="#cccccc" nowrap><font size="-1" face="PrimaSans BT, Verdana, sans-serif"><b>Key + Service </b></font></td> + <td><img src="/graphics/lgRightTab.gif" width="16" height="21"></td> + </tr> + </table> + </td> + </tr> +</table> +</body> +</html> + |