summaryrefslogtreecommitdiffstats
path: root/dogtag/kra-ui
diff options
context:
space:
mode:
authorEndi Sukma Dewata <edewata@redhat.com>2012-03-24 02:27:47 -0500
committerEndi Sukma Dewata <edewata@redhat.com>2012-03-26 11:43:54 -0500
commit621d9e5c413e561293d7484b93882d985b3fe15f (patch)
tree638f3d75761c121d9a8fb50b52a12a6686c5ac5c /dogtag/kra-ui
parent40d3643b8d91886bf210aa27f711731c81a11e49 (diff)
downloadpki-621d9e5c413e561293d7484b93882d985b3fe15f.tar.gz
pki-621d9e5c413e561293d7484b93882d985b3fe15f.tar.xz
pki-621d9e5c413e561293d7484b93882d985b3fe15f.zip
Removed unnecessary pki folder.
Previously the source code was located inside a pki folder. This folder was created during svn migration and is no longer needed. This folder has now been removed and the contents have been moved up one level. Ticket #131
Diffstat (limited to 'dogtag/kra-ui')
-rw-r--r--dogtag/kra-ui/CMakeLists.txt8
-rw-r--r--dogtag/kra-ui/LICENSE291
-rw-r--r--dogtag/kra-ui/build.xml273
-rwxr-xr-xdogtag/kra-ui/build_dogtag82
-rw-r--r--dogtag/kra-ui/dogtag-pki-kra-ui.spec61
-rwxr-xr-xdogtag/kra-ui/shared/webapps/kra/404.html146
-rwxr-xr-xdogtag/kra-ui/shared/webapps/kra/500.html139
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/GenUnexpectedError.template68
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/GenError.template78
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/GenPending.template61
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/GenRejected.template82
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/GenSuccess.template44
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/GenSvcPending.template61
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/GenUnauthorized.template42
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/GenUnexpectedError.template68
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/cms-funcs.js538
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/funcs.js686
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgLeftTab.gifbin0 -> 89 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgRightTab.gifbin0 -> 102 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/favicon.icobin0 -> 601 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/goto-tall.gifbin0 -> 86 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/gray90.gifbin0 -> 66 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/hr.gifbin0 -> 60 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgLeftTab.gifbin0 -> 89 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgRightTab.gifbin0 -> 102 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/logo_header.gifbin0 -> 5833 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/graphics/spacer.gifbin0 -> 43 bytes
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/header.template82
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/helpfun.js35
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/index.html23
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/index.template140
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/GrantRecovery.html46
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/ListRequests.html96
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/SrchKey.html323
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/SrchRecoverKey.html328
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/blank.html10
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/confirmRecover.html6
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/confirmRecoverBySerial.template70
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerial.template114
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerial2.template132
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/displayBySerialForRecovery.template232
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/examineRecovery.template109
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/finishAsyncRecovery.template101
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/finishRecovery.template101
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/frameGrant.html18
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/frameRecover.html18
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/frameRequest.html18
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/frameSearch.html18
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/frameStats.html18
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/getApprovalStatus.template102
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/getStats.template124
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/grantAsyncRecovery.template45
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/grantRecovery.template44
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/index.html18
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/menuCheck.html33
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/menuGrant.html33
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/menuRecover.html33
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/menuRequest.html33
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/menuSearch.html33
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/menuStats.html37
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/monitor.template184
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/processReq.template281
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/queryKey.template208
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/queryKeyForRecovery.template220
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/queryReq.template385
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/recoverBySerial.template76
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/srchKey.template213
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/srchKeyForRecovery.template227
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/agent/kra/top.html48
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/index.html23
-rw-r--r--dogtag/kra-ui/shared/webapps/kra/services.template106
71 files changed, 7272 insertions, 0 deletions
diff --git a/dogtag/kra-ui/CMakeLists.txt b/dogtag/kra-ui/CMakeLists.txt
new file mode 100644
index 000000000..0079e5286
--- /dev/null
+++ b/dogtag/kra-ui/CMakeLists.txt
@@ -0,0 +1,8 @@
+project(kra-ui)
+
+install(
+ DIRECTORY
+ shared/
+ DESTINATION
+ ${SHARE_INSTALL_PREFIX}/${APPLICATION_NAME}/${PROJECT_NAME}
+)
diff --git a/dogtag/kra-ui/LICENSE b/dogtag/kra-ui/LICENSE
new file mode 100644
index 000000000..e281f4362
--- /dev/null
+++ b/dogtag/kra-ui/LICENSE
@@ -0,0 +1,291 @@
+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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/dogtag/kra-ui/build.xml b/dogtag/kra-ui/build.xml
new file mode 100644
index 000000000..7826cc485
--- /dev/null
+++ b/dogtag/kra-ui/build.xml
@@ -0,0 +1,273 @@
+<!-- ### 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 ### -->
+<project name="kra-ui" default="main" basedir=".">
+
+ <import file="config/product.xml"/>
+ <import file="config/product-ext.xml" optional="true"/>
+
+
+ <target name="clean"
+ depends=""
+ description="--> remove component directories">
+ <echo message="${begin.clean.log.message}"/>
+ <delete dir="${dist.base}"/>
+ <delete dir="${build.dir}"/>
+ <echo message="${end.clean.log.message}"/>
+ </target>
+
+
+ <target name="download"
+ depends=""
+ description="--> download dependent components">
+ <echo message="${begin.download.log.message}"/>
+ <echo message="${empty.download.log.message}"/>
+ <echo message="${end.download.log.message}"/>
+ </target>
+
+
+ <target name="compile_java"
+ depends=""
+ description="--> compile java source code into classes">
+ <echo message="${begin.compile.java.log.message}"/>
+ <echo message="${empty.compile.java.log.message}"/>
+ <echo message="${end.compile.java.log.message}"/>
+ </target>
+
+
+ <target name="build_jars"
+ depends="compile_java"
+ description="--> generate jar files">
+ <echo message="${begin.build.jars.log.message}"/>
+ <echo message="${empty.build.jars.log.message}"/>
+ <echo message="${end.build.jars.log.message}"/>
+ </target>
+
+
+ <target name="build_jni_headers"
+ depends="compile_java"
+ description="--> generate jni header files">
+ <echo message="${begin.build.jni.headers.log.message}"/>
+ <echo message="${empty.build.jni.headers.log.message}"/>
+ <echo message="${end.build.jni.headers.log.message}"/>
+ </target>
+
+
+ <target name="build"
+ depends="build_jars,build_jni_headers"
+ description="--> build classes, jars, and jni headers">
+ <echo message="${notify.build.log.message}"/>
+ </target>
+
+
+ <target name="compile_junit_tests"
+ depends="build"
+ description="--> compile junit test source code">
+ <echo message="${begin.compile.junit.tests.log.message}"/>
+ <echo message="${empty.compile.junit.tests.log.message}"/>
+ <echo message="${end.compile.junit.tests.log.message}"/>
+ </target>
+
+
+ <target name="run_junit_tests"
+ depends="compile_junit_tests"
+ description="--> execute junit tests">
+ <echo message="${begin.run.junit.tests.log.message}"/>
+ <echo message="${empty.run.junit.tests.log.message}"/>
+ <echo message="${end.run.junit.tests.log.message}"/>
+ </target>
+
+
+ <target name="verify"
+ depends="run_junit_tests"
+ description="--> build and execute junit tests">
+ <echo message="${notify.verify.log.message}"/>
+ </target>
+
+
+ <target name="clean_javadocs"
+ depends=""
+ description="--> remove javadocs directory">
+ <echo message="${begin.clean.javadocs.log.message}"/>
+ <echo message="${empty.clean.javadocs.log.message}"/>
+ <echo message="${end.clean.javadocs.log.message}"/>
+ </target>
+
+
+ <target name="compose_javadocs"
+ depends="build"
+ description="--> generate javadocs">
+ <echo message="${begin.compose.javadocs.log.message}"/>
+ <echo message="${empty.compose.javadocs.log.message}"/>
+ <echo message="${end.compose.javadocs.log.message}"/>
+ </target>
+
+
+ <target name="document"
+ depends="clean_javadocs,compose_javadocs"
+ description="--> remove old javadocs and compose new javadocs">
+ <echo message="${notify.document.log.message}"/>
+ </target>
+
+
+ <target name="distribute_binaries"
+ depends="build,document"
+ description="--> create the zip and gzipped tar binary distributions">
+ <echo message="${begin.distribute.binaries.log.message}"/>
+ <mkdir dir="${dist.base.binaries}"/>
+
+ <echo message="${begin.binary.wrappers.log.message}"/>
+ <echo message="${empty.binary.wrappers.log.message}"/>
+ <echo message="${end.binary.wrappers.log.message}"/>
+
+ <echo message="${begin.binary.zip.log.message}"/>
+ <zip destfile="${dist.base.binaries}/${dist.name}.zip">
+ <zipfileset dir="./shared"
+ filemode="644"
+ prefix="usr/share/${product.prefix}/${product}">
+ <include name="**"/>
+ </zipfileset>
+ <zipfileset dir="."
+ filemode="644"
+ prefix="usr/share/doc/${dist.name}">
+ <include name="LICENSE"/>
+ </zipfileset>
+ </zip>
+ <echo message="${end.binary.zip.log.message}"/>
+
+ <echo message="${begin.binary.tar.log.message}"/>
+ <tar longfile="gnu"
+ destfile="${dist.base.binaries}/${dist.name}.tar">
+ <tarfileset dir="./shared"
+ mode="644"
+ prefix="${dist.name}/usr/share/${product.prefix}/${product}">
+ <include name="**"/>
+ </tarfileset>
+ <tarfileset dir="."
+ mode="644"
+ prefix="${dist.name}/usr/share/doc/${dist.name}">
+ <include name="LICENSE"/>
+ </tarfileset>
+ </tar>
+ <echo message="${end.binary.tar.log.message}"/>
+
+ <echo message="${begin.binary.gtar.log.message}"/>
+ <gzip destfile="${dist.base.binaries}/${dist.name}.tar.gz"
+ src="${dist.base.binaries}/${dist.name}.tar"/>
+ <delete file="${dist.base.binaries}/${dist.name}.tar"/>
+ <delete dir="${dist.name}"/>
+ <checksum fileext=".md5">
+ <fileset dir="${dist.base.binaries}/">
+ <include name="**/*"/>
+ <exclude name="**/*.asc"/>
+ <exclude name="**/*.md5"/>
+ </fileset>
+ </checksum>
+ <checksum fileext=".sha1"
+ algorithm="SHA">
+ <fileset dir="${dist.base.binaries}/">
+ <include name="**/*"/>
+ <exclude name="**/*.asc"/>
+ <exclude name="**/*.md5"/>
+ </fileset>
+ </checksum>
+ <echo message="${end.binary.gtar.log.message}"/>
+
+ <echo message="${end.distribute.binaries.log.message}"/>
+ </target>
+
+
+ <target name="distribute_source"
+ depends=""
+ description="--> create the zip and gzipped tar source distributions">
+ <echo message="${begin.distribute.source.log.message}"/>
+ <mkdir dir="${dist.base.source}"/>
+
+ <echo message="${begin.source.zip.log.message}"/>
+ <zip destfile="${dist.base.source}/${src.dist.name}.zip">
+ <zipfileset dir="."
+ filemode="644"
+ prefix="${src.dist.name}">
+ <include name="${specfile}"/>
+ <include name="LICENSE"/>
+ <include name="build.xml"/>
+ <include name="config/product*.xml"/>
+ <include name="config/release*.xml"/>
+ <include name="release"/>
+ <include name="shared/**"/>
+ </zipfileset>
+ </zip>
+ <echo message="${end.source.zip.log.message}"/>
+
+ <echo message="${begin.source.tar.log.message}"/>
+ <tar longfile="gnu"
+ destfile="${dist.base.source}/${src.dist.name}.tar">
+ <tarfileset dir="."
+ mode="644"
+ prefix="${src.dist.name}">
+ <include name="${specfile}"/>
+ <include name="LICENSE"/>
+ <include name="build.xml"/>
+ <include name="config/product*.xml"/>
+ <include name="config/release*.xml"/>
+ <include name="release"/>
+ <include name="shared/**"/>
+ </tarfileset>
+ </tar>
+ <echo message="${end.source.tar.log.message}"/>
+
+ <echo message="${begin.source.gtar.log.message}"/>
+ <gzip destfile="${dist.base.source}/${src.dist.name}.tar.gz"
+ src="${dist.base.source}/${src.dist.name}.tar"/>
+ <delete file="${dist.base.source}/${src.dist.name}.tar"/>
+ <delete dir="${dist.name}"/>
+ <checksum fileext=".md5">
+ <fileset dir="${dist.base.source}/">
+ <include name="**/*"/>
+ <exclude name="**/*.asc"/>
+ <exclude name="**/*.md5"/>
+ </fileset>
+ </checksum>
+ <checksum fileext=".sha1"
+ algorithm="SHA">
+ <fileset dir="${dist.base.source}/">
+ <include name="**/*"/>
+ <exclude name="**/*.asc"/>
+ <exclude name="**/*.md5"/>
+ </fileset>
+ </checksum>
+ <echo message="${end.source.gtar.log.message}"/>
+
+ <echo message="${end.distribute.source.log.message}"/>
+ </target>
+
+
+ <target name="distribute"
+ depends="distribute_binaries,distribute_source"
+ description="--> create binary and source component distributions">
+ <echo message="${notify.distribute.log.message}"/>
+ </target>
+
+
+ <target name="main"
+ depends="clean,distribute"
+ description="--> clean, build, verify, document, distribute [default]">
+ <echo message="${notify.main.log.message}"/>
+ </target>
+
+</project>
+
diff --git a/dogtag/kra-ui/build_dogtag b/dogtag/kra-ui/build_dogtag
new file mode 100755
index 000000000..74e9bc860
--- /dev/null
+++ b/dogtag/kra-ui/build_dogtag
@@ -0,0 +1,82 @@
+#!/bin/bash
+# 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.
+#
+# (C) 2007 Red Hat, Inc.
+# All rights reserved.
+# END COPYRIGHT BLOCK
+
+# Always switch into the base directory of this
+# shell script prior to executing it so that all
+# of its output is written to this directory
+cd `dirname $0`
+
+# Retrieve the directory name housing this component
+PWD=`pwd`
+
+# Set Dogtag component-specific environment variables
+DOGTAG_BUILD_SCRIPT=`basename $0`
+export DOGTAG_BUILD_SCRIPT
+DOGTAG_COMPONENT=`basename ${PWD}`
+export DOGTAG_COMPONENT
+DOGTAG_SPECFILE="dogtag-pki-kra-ui.spec"
+export DOGTAG_SPECFILE
+
+# Set PKI 'ant' environment variables (originally obtained from specfile)
+PKI_PRODUCT_UI_FLAVOR_PREFIX="dogtag"
+export PKI_PRODUCT_UI_FLAVOR_PREFIX
+PKI_PRODUCT_PREFIX="pki"
+export PKI_PRODUCT_PREFIX
+PKI_PRODUCT="kra-ui"
+export PKI_PRODUCT
+PKI_VERSION="9.0.0"
+export PKI_VERSION
+
+# Set Dogtag helper variables
+DOGTAG_COMPONENT_NAME=${PKI_PRODUCT}
+export DOGTAG_COMPONENT_NAME
+DOGTAG_WGET_URL=http://cvs.fedora.redhat.com/viewvc
+export DOGTAG_WGET_URL
+
+# Obtain '${DOGTAG_SPECFILE}' as necessary
+if [ "$1" = "refresh" ]; then
+ if [ -f "${DOGTAG_SPECFILE}" ]; then
+ printf "Removing '${DOGTAG_SPECFILE}' . . . "
+ rm -rf ${DOGTAG_SPECFILE}
+ printf "done.\n"
+ fi
+ shift
+fi
+if [ ! -f "${DOGTAG_SPECFILE}" ]; then
+ # Check for Fedora Operating System
+ if [ ! -f /etc/fedora-release ]; then
+ printf "'${DOGTAG_COMPONENT_NAME}' ONLY builds on Fedora!\n"
+ exit 255
+ fi
+ # Obtain Fedora Operating System Version
+ FEDORA_VERSION="F-`cat /etc/fedora-release | awk '{print $3}'`"
+ export FEDORA_VERSION
+ # Retrieve '${DOGTAG_SPECFILE}' from Koji
+ printf "Fetching '${DOGTAG_SPECFILE}' for '${FEDORA_VERSION}' . . .\n"
+ wget -O ${DOGTAG_SPECFILE} ${DOGTAG_WGET_URL}/${FEDORA_VERSION}/${DOGTAG_COMPONENT_NAME}/${DOGTAG_SPECFILE}?view=co
+ if [ ! -s "${DOGTAG_SPECFILE}" ]; then
+ printf "Failed to fetch '${DOGTAG_SPECFILE}' for '${FEDORA_VERSION}'!\n"
+ rm -rf ${DOGTAG_SPECFILE}
+ exit 255
+ fi
+fi
+
+# Invoke the shared Dogtag PKI build script
+config-ext/build_dogtag_pki $@
+
diff --git a/dogtag/kra-ui/dogtag-pki-kra-ui.spec b/dogtag/kra-ui/dogtag-pki-kra-ui.spec
new file mode 100644
index 000000000..274d1ec76
--- /dev/null
+++ b/dogtag/kra-ui/dogtag-pki-kra-ui.spec
@@ -0,0 +1,61 @@
+Name: dogtag-pki-kra-ui
+Version: 9.0.0
+Release: 1%{?dist}
+Summary: Dogtag Certificate System - Data Recovery Authority User Interface
+URL: http://pki.fedoraproject.org/
+License: GPLv2
+Group: System Environment/Base
+
+BuildArch: noarch
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+BuildRequires: ant
+
+Source0: http://pki.fedoraproject.org/pki/sources/%{name}/%{name}-%{version}.tar.gz
+
+# NOTE: Several PKI packages require a "virtual" UI component. These
+# "virtual" UI components are "Provided" by various UI "flavors"
+# including "dogtag", "redhat", and "null". Consequently,
+# all "dogtag", "redhat", and "null" UI components MUST be
+# mutually exclusive!
+Provides: pki-kra-ui = %{version}-%{release}
+
+Obsoletes: pki-kra-ui < %{version}-%{release}
+
+Conflicts: redhat-pki-kra-ui
+
+%description
+Dogtag Certificate System is an enterprise software system designed
+to manage enterprise Public Key Infrastructure (PKI) deployments.
+
+The Dogtag Data Recovery Authority User Interface contains the graphical
+user interface for the Dogtag Data Recovery Manager.
+
+%prep
+
+%setup -q
+
+%build
+ant \
+ -Dproduct.ui.flavor.prefix="dogtag" \
+ -Dproduct.prefix="pki" \
+ -Dproduct="kra-ui" \
+ -Dversion="%{version}"
+
+%install
+rm -rf %{buildroot}
+cd dist/binary
+unzip %{name}-%{version}.zip -d %{buildroot}
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root,-)
+%doc LICENSE
+%{_datadir}/pki/
+
+%changelog
+* Fri Nov 19 2010 Matthew Harmsen <mharmsen@redhat.com> 9.0.0-1
+- Updated Dogtag 1.3.x --> Dogtag 2.0.0 --> Dogtag 9.0.0.
diff --git a/dogtag/kra-ui/shared/webapps/kra/404.html b/dogtag/kra-ui/shared/webapps/kra/404.html
new file mode 100755
index 000000000..2e7e59cdd
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/404.html
@@ -0,0 +1,146 @@
+<!-- --- 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) 2009 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>
+<script language=javascript>
+var url = document.URL;
+var protocol = location.protocol;
+var hostname = location.hostname;
+var port = location.port;
+</script>
+
+<head>
+<title>DRM 404 Error!</title>
+<!-- always expand ALL relative paths -->
+<script language=javascript>
+document.write('<link rel="shortcut icon" href="');
+document.write(protocol);
+document.write('//');
+document.write(hostname);
+document.write(':');
+document.write(port);
+document.write('/kra/img/favicon.ico');
+document.write('" />');
+document.write('<link rel="stylesheet" href="');
+document.write(protocol);
+document.write('//');
+document.write(hostname);
+document.write(':');
+document.write(port);
+document.write('/kra/css/pki-base.css');
+document.write('" type="text/css" />');
+document.write('<META http-equiv=Content-Type content="text/html; charset=UTF-8">');
+</script>
+</head>
+<body bgcolor="#FFFFFF" link="#666699" vlink="#666699" alink="#333366">
+<div id="header">
+<!-- always expand ALL relative paths -->
+<script language=javascript>
+document.write('<a href="http://pki.fedoraproject.org/" title="Visit pki.fedoraproject.org for more information about Dogtag products and services"><img src="');
+document.write(protocol);
+document.write('//');
+document.write(hostname);
+document.write(':');
+document.write(port);
+document.write('/kra/img/logo_header.gif');
+document.write('" alt="Dogtag" id="myLogo" /></a>');
+</script>
+ <div id="headertitle">
+ <a href="/" title="Dogtag Network homepage">Dogtag<sup><font size="-2">&reg;</font></sup> Certificate System</a>
+ </div>
+ <div id="account">
+ <dl><dt><span></span></dt><dd></dd></dl>
+ </div>
+</div>
+
+<div id="mainNavOuter">
+<div id="mainNav">
+<div id="mainNavInner">
+
+</div><!-- end mainNavInner -->
+</div><!-- end mainNav -->
+</div><!-- end mainNavOuter -->
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+<div>
+ -
+</div>
+
+
+</div>
+</div>
+
+</div>
+<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">
+Certificate System DRM Error Page
+</font><br>
+<p>
+</font>
+<p>
+<script language=javascript>
+document.write('<center>');
+document.write('<table border="1" cellspacing="0" cellpadding="0">');
+document.write('<tr valign="TOP">');
+document.write('<td bgcolor="grey" align="center"><b><font color="BLACK">HTTP STATUS</font></b></td>');
+document.write('<td bgcolor="grey" align="center"><b><font color="BLACK">DESCRIPTION</font></b></td>');
+document.write('</tr>');
+document.write('<tr valign="TOP">');
+document.write('<td align="center"><b><font size="+3" color="red">');
+document.write('404');
+document.write('</font></b></td>');
+document.write('<td><b><font size="+1" color="RED">');
+document.write('The requested resource could not be found but may be available again in the future.');
+document.write('</font></b><br><b><font size="+1" color="RED">');
+document.write('Please check the validity of the URL listed below:');
+document.write('</font></b><br><br>');
+document.write('<center><b><font size="+1"><a href="');
+document.write(url);
+document.write('">');
+document.write(url);
+document.write('</a>');
+document.write('</font></b></center><br></td>');
+document.write('</tr>');
+document.write('</table>');
+document.write('</center>');
+</script>
+<div id="footer">
+</div>
+<!--
+To prevent Internet Explorer from overriding the display of this custom error
+page by displaying it's own "Friendly HTTP Error Message", always include the
+following 'padding' to ensure that the text size exceeds 512 bytes:
+
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+-->
+</body>
+</html>
+
diff --git a/dogtag/kra-ui/shared/webapps/kra/500.html b/dogtag/kra-ui/shared/webapps/kra/500.html
new file mode 100755
index 000000000..224cec1c8
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/500.html
@@ -0,0 +1,139 @@
+<!-- --- 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) 2009 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>
+<script language=javascript>
+var url = document.URL;
+var protocol = location.protocol;
+var hostname = location.hostname;
+var port = location.port;
+</script>
+
+<head>
+<title>DRM 500 Error!</title>
+<!-- always expand ALL relative paths -->
+<script language=javascript>
+document.write('<link rel="shortcut icon" href="');
+document.write(protocol);
+document.write('//');
+document.write(hostname);
+document.write(':');
+document.write(port);
+document.write('/kra/img/favicon.ico');
+document.write('" />');
+document.write('<link rel="stylesheet" href="');
+document.write(protocol);
+document.write('//');
+document.write(hostname);
+document.write(':');
+document.write(port);
+document.write('/kra/css/pki-base.css');
+document.write('" type="text/css" />');
+document.write('<META http-equiv=Content-Type content="text/html; charset=UTF-8">');
+</script>
+</head>
+<body bgcolor="#FFFFFF" link="#666699" vlink="#666699" alink="#333366">
+<div id="header">
+<!-- always expand ALL relative paths -->
+<script language=javascript>
+document.write('<a href="http://pki.fedoraproject.org/" title="Visit pki.fedoraproject.org for more information about Dogtag products and services"><img src="');
+document.write(protocol);
+document.write('//');
+document.write(hostname);
+document.write(':');
+document.write(port);
+document.write('/kra/img/logo_header.gif');
+document.write('" alt="Dogtag" id="myLogo" /></a>');
+</script>
+ <div id="headertitle">
+ <a href="/" title="Dogtag Network homepage">Dogtag<sup><font size="-2">&reg;</font></sup> Certificate System</a>
+ </div>
+ <div id="account">
+ <dl><dt><span></span></dt><dd></dd></dl>
+ </div>
+</div>
+
+<div id="mainNavOuter">
+<div id="mainNav">
+<div id="mainNavInner">
+
+</div><!-- end mainNavInner -->
+</div><!-- end mainNav -->
+</div><!-- end mainNavOuter -->
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+<div>
+ -
+</div>
+
+
+</div>
+</div>
+
+</div>
+<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">
+Certificate System DRM Error Page
+</font><br>
+<p>
+</font>
+<p>
+<script language=javascript>
+document.write('<center>');
+document.write('<table border="1" cellspacing="0" cellpadding="0">');
+document.write('<tr valign="TOP">');
+document.write('<td bgcolor="grey" align="center"><b><font color="BLACK">HTTP STATUS</font></b></td>');
+document.write('<td bgcolor="grey" align="center"><b><font color="BLACK">DESCRIPTION</font></b></td>');
+document.write('</tr>');
+document.write('<tr valign="TOP">');
+document.write('<td align="center"><b><font size="+3" color="red">');
+document.write('500');
+document.write('</font></b></td>');
+document.write('<td><b><font size="+1" color="RED">');
+document.write('The server encountered an unexpected condition which prevented it from fulfilling the request.<br>');
+document.write('Please consult your local administrator for further assistance. The Certificate System logs may provide further information.');
+document.write('</font></b><br></td>');
+document.write('</tr>');
+document.write('</table>');
+document.write('</center>');
+</script>
+<div id="footer">
+</div>
+<!--
+To prevent Internet Explorer from overriding the display of this custom error
+page by displaying it's own "Friendly HTTP Error Message", always include the
+following 'padding' to ensure that the text size exceeds 512 bytes:
+
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+[IE padding][IE padding][IE padding][IE padding][IE padding][IE padding]
+-->
+</body>
+</html>
+
diff --git a/dogtag/kra-ui/shared/webapps/kra/GenUnexpectedError.template b/dogtag/kra-ui/shared/webapps/kra/GenUnexpectedError.template
new file mode 100644
index 000000000..a6ec193bc
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/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 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>&nbsp;</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/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>&nbsp;</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>&nbsp;</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
new file mode 100644
index 000000000..35a76c859
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgLeftTab.gif
Binary files differ
diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgRightTab.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgRightTab.gif
new file mode 100644
index 000000000..a519bc759
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/dgRightTab.gif
Binary files differ
diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/favicon.ico b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/favicon.ico
new file mode 100644
index 000000000..efc1d33f4
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/favicon.ico
Binary files differ
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
new file mode 100644
index 000000000..6eea3ef5c
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/goto-tall.gif
Binary files differ
diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/gray90.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/gray90.gif
new file mode 100644
index 000000000..c6f811102
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/gray90.gif
Binary files differ
diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/hr.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/hr.gif
new file mode 100644
index 000000000..14f8acf92
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/hr.gif
Binary files differ
diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgLeftTab.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgLeftTab.gif
new file mode 100644
index 000000000..a78fbc89d
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgLeftTab.gif
Binary files differ
diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgRightTab.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgRightTab.gif
new file mode 100644
index 000000000..71852402d
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/lgRightTab.gif
Binary files differ
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
new file mode 100644
index 000000000..573482227
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/logo_header.gif
Binary files differ
diff --git a/dogtag/kra-ui/shared/webapps/kra/agent/graphics/spacer.gif b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/spacer.gif
new file mode 100644
index 000000000..13acffe53
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/agent/graphics/spacer.gif
Binary files differ
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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td><font size="+1" face="PrimaSans BT, Verdana, sans-serif" color="white"><b>Dogtag<sup><font color="#999999" size="-2">&reg;</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+ <td><font size="+1" face="PrimaSans BT, Verdana, sans-serif" color="white"><b>Dogtag<sup><font color="#999999" size="-2">&reg;</font></sup> Agent Services</b></font></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr valign="TOP">
+ <td>&nbsp;</td>
+ <td>
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr valign="TOP">
+ <td>&nbsp;</td>
+ <td>&nbsp;</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">&nbsp;</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>&nbsp;</td>');
+document.write('<td>&nbsp;</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>&nbsp;</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>&nbsp;</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">&nbsp;
+ <!-- <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>&nbsp;</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);">&nbsp;&nbsp;
+ <font size=-1 face="PrimaSans BT, Verdana, sans-serif">first</font>&nbsp;
+ <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>&nbsp;&nbsp;&nbsp;
+ <!-- <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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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">&nbsp;&nbsp;&nbsp;&nbsp;
+ 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">&nbsp;&nbsp;&nbsp;&nbsp;
+ 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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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">&nbsp;&nbsp;&nbsp;&nbsp;
+ 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">&nbsp;&nbsp;&nbsp;&nbsp;
+ 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>&nbsp;</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>&nbsp;</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('&nbsp;' + '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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;');
+ 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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;\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%>&nbsp;</td>"+
+ "<td width=10%>&nbsp;</td>"+
+ "<td width=20%>&nbsp;</td>"+
+ "<td width=60%>&nbsp;</td>"+
+ "</tr>\n");
+
+ document.write(
+// "<table border=\"0\" width=\"100%\" cellspacing=\"2\" cellpadding=\"2\">\n"+
+// "<tr><td width=5%>&nbsp;</td><td width=25%>&nbsp;</td><td width=25%>&nbsp;</td>\n"+
+// "<td width=25%>&nbsp;</td><td width=20%>&nbsp;</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'>|&lt;&lt;</button>\n"+
+"<button "+disabledUp+" NAME='previous' onClick='doNext(this)' VALUE='<' width='72'>&lt;</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'>&gt;</button>\n"+
+"<button NAME='end' onClick='doNext(this)' VALUE='>>|' width='72'>&gt;&gt;|</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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">&reg;</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>
+
diff --git a/dogtag/kra-ui/shared/webapps/kra/index.html b/dogtag/kra-ui/shared/webapps/kra/index.html
new file mode 100644
index 000000000..30662d47a
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/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/services.template b/dogtag/kra-ui/shared/webapps/kra/services.template
new file mode 100644
index 000000000..e28887b70
--- /dev/null
+++ b/dogtag/kra-ui/shared/webapps/kra/services.template
@@ -0,0 +1,106 @@
+<!-- --- 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 Services</title>
+ <link rel="shortcut icon" href="img/favicon.ico" />
+ <link rel="stylesheet" href="css/pki-base.css" type="text/css" />
+ <META http-equiv=Content-Type content="text/html; charset=UTF-8">
+
+</head>
+<body bgcolor="#FFFFFF" link="#666699" vlink="#666699" alink="#333366">
+
+<div id="header">
+ <a href="http://pki.fedoraproject.org/" title="Visit pki.fedoraproject.org for more information about Dogtag products and services"><img src="img/logo_header.gif" alt="Dogtag" id="myLogo" /></a>
+ <div id="headertitle">
+ <a href="/" title="Dogtag Network homepage">Dogtag<sup><font size="-2">&reg;</font></sup> Certificate System</a>
+ </div>
+ <div id="account">
+ <dl><dt><span></span></dt><dd></dd></dl>
+ </div>
+</div>
+
+<div id="mainNavOuter">
+<div id="mainNav">
+<div id="mainNavInner">
+
+</div><!-- end mainNavInner -->
+</div><!-- end mainNav -->
+</div><!-- end mainNavOuter -->
+
+
+<div id="bar">
+
+<div id="systembar">
+<div id="systembarinner">
+
+<div>
+ -
+</div>
+
+
+</div>
+</div>
+
+</div>
+
+
+<font size="+1" face="PrimaSans BT, Verdana, Arial, Helvetica, sans-serif">
+Certificate System DRM Services Page
+</font><br>
+<p>
+</font>
+<p>
+<center>
+<table border="0" cellspacing="0" cellpadding="0">
+<tr valign="TOP">
+<td>&nbsp;</td>
+<td>&nbsp;</td>
+</tr>
+<script language=javascript>
+for (var i=0; i<result.recordSet.length; ++i) {
+ document.write('<tr valign="TOP">');
+ document.write('<td>');
+ document.write('<td>');
+ document.write('<font size=4 face="PrimaSans BT, Verdana, sans-serif">');
+ document.write('<li><a href="');
+ document.write(result.recordSet[i].prefix + "://" +
+ result.recordSet[i].host + ":" + result.recordSet[i].port + "/"+
+ result.recordSet[i].uri);
+ if (result.recordSet[i].type == "admin") {
+ document.write('">Admin Services</a></font>');
+ } else if (result.recordSet[i].type == "agent") {
+ document.write('">Agent Services</a></font>');
+ } else if (result.recordSet[i].type == "ee") {
+ document.write('">SSL End Users Services</a></font>');
+ }
+
+ document.write('</font></td></tr>');
+}
+</script>
+<tr valign="TOP">
+<td>&nbsp;</td>
+<td>&nbsp;</td>
+</tr>
+</table>
+</center>
+<div id="footer">
+</div>
+</body>
+</html>