<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<div class="clear">
    <div class="clear">

        <div id="addStore.exposedAsMessageSourceLabel" class="formLabel-labelCell tableContainer-labelCell">Exposed As Message Source:</div>
        <div class="formLabel-controlCell tableContainer-valueCell">
            <input type="text" id="addStore.exposedAsMessageSource"
                   data-dojo-type="dijit/form/CheckBox"
                   data-dojo-props="name: 'exposedAsMessageSource'" />
            <div data-dojo-type="dijit/Tooltip"
                 data-dojo-props="connectId: ['addStore.exposedAsMessageSource'],
                                      label: 'Expose trust store as message source'">
            </div>
    </div>
    <div class="clear">
        <div id="addStore.trustAnchorValidityEnforcedLabel" class="formLabel-labelCell tableContainer-labelCell">Trust Anchor Validity Enforced:</div>
        <div class="formLabel-controlCell tableContainer-valueCell">
            <input type="text" id="addStore.trustAnchorValidityEnforced"
                   data-dojo-type="dijit/form/CheckBox"
                   data-dojo-props="name: 'trustAnchorValidityEnforced'" />
            <div data-dojo-type="dijit/Tooltip"
                 data-dojo-props="connectId: ['addStore.trustAnchorValidityEnforced'],
                                      label: 'If true, trust anchor validity dates will be enforced'">
            </div>
        </div>
    </div>
    <div class="clear formBox">
        <fieldset>
            <legend>Revocation</legend>
            <div class="clear">
                <div id="addStore.certificateRevocationCheckEnabledLabel"
                     class="formLabel-labelCell tableContainer-labelCell">Enabled:</div>
                <div class="formLabel-controlCell tableContainer-valueCell">
                    <input type="text" id="addStore.certificateRevocationCheckEnabled"
                           data-dojo-type="dijit/form/CheckBox"
                           data-dojo-props="name: 'certificateRevocationCheckEnabled'" />
                    <div data-dojo-type="dijit/Tooltip"
                         data-dojo-props="connectId: ['addStore.certificateRevocationCheckEnabled'],
                                      label: 'If enabled, enable certificates revocation check'">
                    </div>
                </div>
            </div>
            <div class="clear">
                <div id="addStore.certificateRevocationCheckOfOnlyEndEntityCertificatesLabel"
                     class="formLabel-labelCell tableContainer-labelCell">Only End Entity:</div>
                <div class="formLabel-controlCell tableContainer-valueCell">
                    <input type="text" id="addStore.certificateRevocationCheckOfOnlyEndEntityCertificates"
                           data-dojo-type="dijit/form/CheckBox"
                           data-dojo-props="name: 'certificateRevocationCheckOfOnlyEndEntityCertificates'" />
                    <div data-dojo-type="dijit/Tooltip"
                         data-dojo-props="connectId: ['addStore.certificateRevocationCheckOfOnlyEndEntityCertificates'],
                                      label: 'If enabled, only check the revocation status of end-entity certificates'">
                    </div>
                </div>
            </div>
            <div class="clear">
                <div id="addStore.certificateRevocationCheckWithPreferringCertificateRevocationListLabel"
                     class="formLabel-labelCell tableContainer-labelCell">Prefer CRLs:</div>
                <div class="formLabel-controlCell tableContainer-valueCell">
                    <input type="text" id="addStore.certificateRevocationCheckWithPreferringCertificateRevocationList"
                           data-dojo-type="dijit/form/CheckBox"
                           data-dojo-props="name: 'certificateRevocationCheckWithPreferringCertificateRevocationList'" />
                    <div data-dojo-type="dijit/Tooltip"
                         data-dojo-props="connectId: ['addStore.certificateRevocationCheckWithPreferringCertificateRevocationList'],
                                      label: 'If enabled, prefer CRL (specified in certificate distribution points) to OCSP, if false prefer OCSP to CRL'">
                    </div>
                </div>
            </div>
            <div class="clear">
                <div id="addStore.certificateRevocationCheckWithNoFallbackLabel"
                     class="formLabel-labelCell tableContainer-labelCell">No Fallback:</div>
                <div class="formLabel-controlCell tableContainer-valueCell">
                    <input type="text" id="addStore.certificateRevocationCheckWithNoFallback"
                           data-dojo-type="dijit/form/CheckBox"
                           data-dojo-props="name: 'certificateRevocationCheckWithNoFallback'" />
                    <div data-dojo-type="dijit/Tooltip"
                         data-dojo-props="connectId: ['addStore.certificateRevocationCheckWithNoFallback'],
                                      label: 'If enabled, disable fallback to CRL/OCSP (if 'Prefer CRLs' set to true, disable fallback to OCSP, otherwise disable fallback to CRL in certificate distribution points)'">
                    </div>
                </div>
            </div>
            <div class="clear">
                <div id="addStore.certificateRevocationCheckWithIgnoringSoftFailuresLabel"
                     class="formLabel-labelCell tableContainer-labelCell">Ignore Soft Failures:</div>
                <div class="formLabel-controlCell tableContainer-valueCell">
                    <input type="text" id="addStore.certificateRevocationCheckWithIgnoringSoftFailures"
                           data-dojo-type="dijit/form/CheckBox"
                           data-dojo-props="name: 'certificateRevocationCheckWithIgnoringSoftFailures'" />
                    <div data-dojo-type="dijit/Tooltip"
                         data-dojo-props="connectId: ['addStore.certificateRevocationCheckWithIgnoringSoftFailures'],
                                      label: 'If enabled, revocation check will succeed if CRL/OCSP response cannot be obtained because of network error or OCSP responder returns internalError or tryLater'">
                    </div>
                </div>
            </div>
            <div class="clear">
                <div id="addStore.certificateRevocationListUrlLabel"
                     class="formLabel-labelCell tableContainer-labelCell">Server CRL Path Or Upload:</div>
                <div class="formLabel-controlCell tableContainer-valueCell">
                    <input type="text" id="addStore.certificateRevocationListUrl"
                           data-dojo-type="qpid/common/ResourceWidget"
                           data-dojo-props="
                          name: 'certificateRevocationListUrl',
                          placeHolder: 'certificate revocation list file server path',
                          promptMessage: 'Location of the certificate revocation list file on the server (overrides revocation done by CRL distribution points and OCSP)',
                          title: 'Enter the certificate revocation list file path'" />
                </div>
            </div>
        </fieldset>
        <div class="clear"></div>
    </div>
</div>
