https://sji.sra.claroty.com/sra/

ID de exploración:
5c59d787-9647-4c1c-ba39-abd82833f861Finalizado
URL enviada:
https://sji.sra.claroty.com/Redireccionado
Informe finalizado:

Enlaces: 0 encontrados

Los enlaces salientes identificados en la página

Variables JavaScript: 142 encontradas

Las variables JavaScript globales cargadas en el objeto de ventana de una página son variables declaradas fuera de las funciones y a las que se puede acceder desde cualquier lugar del código en el ámbito actual

NombreTipo

Mensajes de registro de la consola: 3 encontrados

Mensajes registrados en la consola web

TipoCategoríaRegistro

HTML

El cuerpo HTML sin procesar de la página

<!DOCTYPE html><html class="ng-scope"><head><style type="text/css">[uib-typeahead-popup].dropdown-menu{display:block;}</style><style type="text/css">.uib-time input{width:50px;}</style><style type="text/css">[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-html-popup].tooltip.right-bottom > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.top-left > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.top-right > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.bottom-left > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.bottom-right > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.left-top > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.left-bottom > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.right-top > .tooltip-arrow,[uib-tooltip-template-popup].tooltip.right-bottom > .tooltip-arrow,[uib-popover-popup].popover.top-left > .arrow,[uib-popover-popup].popover.top-right > .arrow,[uib-popover-popup].popover.bottom-left > .arrow,[uib-popover-popup].popover.bottom-right > .arrow,[uib-popover-popup].popover.left-top > .arrow,[uib-popover-popup].popover.left-bottom > .arrow,[uib-popover-popup].popover.right-top > .arrow,[uib-popover-popup].popover.right-bottom > .arrow,[uib-popover-html-popup].popover.top-left > .arrow,[uib-popover-html-popup].popover.top-right > .arrow,[uib-popover-html-popup].popover.bottom-left > .arrow,[uib-popover-html-popup].popover.bottom-right > .arrow,[uib-popover-html-popup].popover.left-top > .arrow,[uib-popover-html-popup].popover.left-bottom > .arrow,[uib-popover-html-popup].popover.right-top > .arrow,[uib-popover-html-popup].popover.right-bottom > .arrow,[uib-popover-template-popup].popover.top-left > .arrow,[uib-popover-template-popup].popover.top-right > .arrow,[uib-popover-template-popup].popover.bottom-left > .arrow,[uib-popover-template-popup].popover.bottom-right > .arrow,[uib-popover-template-popup].popover.left-top > .arrow,[uib-popover-template-popup].popover.left-bottom > .arrow,[uib-popover-template-popup].popover.right-top > .arrow,[uib-popover-template-popup].popover.right-bottom > .arrow{top:auto;bottom:auto;left:auto;right:auto;margin:0;}[uib-popover-popup].popover,[uib-popover-html-popup].popover,[uib-popover-template-popup].popover{display:block !important;}</style><style type="text/css">.uib-datepicker-popup.dropdown-menu{display:block;float:none;margin:0;}.uib-button-bar{padding:10px 9px 2px;}</style><style type="text/css">.uib-position-measure{display:block !important;visibility:hidden !important;position:absolute !important;top:-9999px !important;left:-9999px !important;}.uib-position-scrollbar-measure{position:absolute !important;top:-9999px !important;width:50px !important;height:50px !important;overflow:scroll !important;}.uib-position-body-scrollbar-measure{overflow:scroll !important;}</style><style type="text/css">.uib-datepicker .uib-title{width:100%;}.uib-day button,.uib-month button,.uib-year button{min-width:100%;}.uib-left,.uib-right{width:100%}</style><style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style><style>@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style><link id="favicon" rel="shortcut icon" href="/sra/brand_static/favicon.ico" type="image/x-icon"><link rel="stylesheet" href="/static/css/bootstrap.min.css"><link rel="stylesheet" href="/static/css/font-awesome.min.css"><link rel="stylesheet" href="/static/css/v4-shims.css"><link rel="stylesheet" href="/static/css/angular-toastr.css"><link rel="stylesheet" href="/static/css/angular-toggle-switch-bootstrap-3.css"><link rel="stylesheet" href="/static/css/primeicons.css"><link rel="stylesheet" href="/static/css/theme.css"><link rel="stylesheet" href="/static/css/primeng.min.css"><link rel="stylesheet" href="/static/css/easymde.min.css"><link rel="stylesheet" href="/static/css/app.css"><meta name="robots" content="noindex, nofollow"><meta content="IjZjNDUzOWI1MDgzNWUxNjAwOWNiMmFkNzA2MTE2ZGJmZGViYTYyZWQi.Z03qig.huFuHoaUNfS1wteEc4PNmgGMWBs"><meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Expires" content="0"><script defer="defer" src="../static/runtime.97a9fa11b1de0e6584d3.bundle.js"></script><script defer="defer" src="../static/vendor.b71ca967a32571cde5bb.bundle.js"></script><script defer="defer" src="../static/polyfills.887091254e0b87cc5389.bundle.js"></script><script defer="defer" src="../static/main.6cd67a080b805c54e8a8.bundle.js"></script><title>Secure Remote Access</title><style>[_nghost-c0]     button.heading.editor {
            position: relative;
        }

        [_nghost-c0]     button.heading.editor:before {
            position: absolute;
            left: 4px;
            top: 5px;
        }

        [_nghost-c0]     button.heading.editor.h1:before { 
            content: "H1";
            font-size: 18px;
        }

        [_nghost-c0]     button.heading.editor.h2:before { 
            content: "H2";
            font-size: 17px;
        }

        [_nghost-c0]     button.heading.editor.h3:before { 
            content: "H3";
            font-size: 16px;
        }

        [_nghost-c0]     button.heading.editor.h4:before { 
            content: "H4";
            font-size: 15px;
        }

        [_nghost-c0]     button.heading.editor.h5:before { 
            content: "H5";
            font-size: 14px;
        }

        [_nghost-c0]     button.heading.editor.h6:before { 
            content: "H6";
            font-size: 13px;
        }

        .previewonly[_nghost-c0]     .EasyMDEContainer .CodeMirror {
            border: unset !important;
        }

        .previewonly[_nghost-c0]     .editor-preview {
            background: white !important;
        }

        .previewonly[_nghost-c0]     .editor-preview   pre {
            background-color: unset !important;
            border: unset !important;
        }

        .previewonly[_nghost-c0]     .editor-preview   code {
            background-color: unset !important;
            border: unset !important;
        }

        [_nghost-c0]     .editor-preview:empty:not(:focus):before { 
            content: "No message configured."; 
        }</style><style>.d-flex[_ngcontent-c1] {
            flex-direction: row;
            justify-content: space-between;
        }

        button[_ngcontent-c1] {
            outline: none;
            border: none;
            background: none;
        }</style></head><body style="background-color: #e6e9f2;"><!-- ngIf: !isUnsupportedBrowserMessageDismissed && user_info.is_browser_supported==false --><!-- ngIf: is_emc --><licensebanner ng-if="is_emc" class="ng-scope" _nghost-c1="" ng-version="7.2.3" style=""><!--bindings={
  "ng-reflect-ng-for-of": ""
}--></licensebanner><!-- end ngIf: is_emc --><!-- ngIf: !is_installation_setup() --><div style="background-color: #367BB5;" class="container-fluid ng-scope" ng-if="!is_installation_setup()"><div class="col-md-12"><!-- ngInclude: '/static/top.html' --><div id="top_html_div" ng-include="'/static/top.html'" class="col-md-12 ng-scope" style=""><div class="row top-row ng-scope">
    <div class="col-md-4 white mt-m mb-m" style="padding: unset;">
		<div class="di-f">
			<img src="/sra/brand_static/logo.png" height="35px">
			<span class="pl-s" style="font-size: 14px;">Secure Remote Access</span>
		</div>
	</div>
	<div class="col-md-4 white ta-c di fs-s">
		<!-- ngIf: is_community_inited && is_emc && local_site --><span ng-if="is_community_inited &amp;&amp; is_emc &amp;&amp; local_site" class="ng-binding ng-scope">Secure Access Center: SRA-SAC-SJI</span><!-- end ngIf: is_community_inited && is_emc && local_site -->
		<!-- ngIf: is_community_inited && is_full_site && local_site -->
	</div>
	<div class="col-md-4">
		<!-- ngIf: user_info.logged_in -->
		<!-- ngIf: user_info.logged_in && user_info.is_operator && filer_status.disk_free_warning -->
        <!-- ngIf: user_info.logged_in && user_info.is_admin && ['expiring', 'expired'].includes(monitoring_status.app_tunnel_expiration_state) -->
		<br>
		<br>
		<div>
			<!-- ngIf: user_info.logged_in -->
			<!-- ngIf: user_info.logged_in && user_info.is_operator && site_info.length > 1 -->
			<!-- ngIf: ha_status.enabled && user_info.logged_in && user_info.is_operator -->
		</div>
	</div>
</div>
</div></div></div><!-- end ngIf: !is_installation_setup() --><div ng-controller="EventsCtrl" class="ng-scope"></div><div id="sso" style="display: none;"></div><div id="saml" style="display: none;"></div><div id="vpn_saml" style="display: none;"></div><div id="saml_login_text" style="display: none;">SAML</div><div id="saml_enabled" style="display: none;">0</div><div id="vpn_otp_login" style="display: none;">False</div><div id="oidc_enabled" style="display: none;">False</div><div id="oidc_data" style="display: none;"></div><div id="oidc_clue" style="display: none;"></div><div id="oidc_error" style="display: none;"></div><div id="community_info" style="display: none;">{"role": "emc", "inited": true, "name": "SRA-SAC-SJI", "is_primary": true}</div><div id="token_login_enabled" style="display: none;">False</div><div id="instance_uuid" style="display: none;">b11e5a2b-f0a1-b5bd-6fb2-8e1cb7884d37</div><div class="row page-content" style="background-color: #e6e9f2; padding-right: 15px; margin: 0;"><!-- ngIf: show_side_bar --><div ng-class="{'col-md-10': show_side_bar,
							'col-md-12': !show_side_bar}" class="col-md-12"><!-- ngView: --><div ng-view="" class="ng-scope" style=""><div id="login_form" style="width: 100%; text-align: center;" class="ng-scope">
    <div ng-show="state=='login'" class="panel">
        <div class="panel-body" style="min-width: 550px">
            <div class="form_container panel-body">
                <form class="login_form_container ng-pristine ng-valid ng-valid-minlength ng-valid-maxlength">
                    <div ng-show="is_community_inited &amp;&amp; is_primary">
                        <p class="login-title">Welcome Back</p>
                        <div style="width: 100%; display: inline-flex; justify-content: center; flex-direction: row; align-items: center;">
                            <!-- ngIf: !loginWithCreds && !loginWithToken -->
                            <!-- ngIf: loginWithCreds && !loginWithToken --><div ng-if="loginWithCreds &amp;&amp; !loginWithToken" style="width: 100%;" class="ng-scope">
                                <div ng-show="vpn_otp_login &amp;&amp; state==='login'" class="ng-hide">
                                    <div style="padding-right: 15px; text-align: center;">
                                        You are required to perform OTP authentication.<br>
                                        Please retype your credentials
                                    </div>
                                </div>
                                <!-- ngInclude: 'credentials.html' --><div ng-include="'credentials.html'" ng-show="!otp" class="ng-scope">
    <div class="field ng-scope">
        <div class="field_label">Username</div>
    </div>
    <div class="field ng-scope">
        <input type="text" id="username" ng-model="$parent.$parent.username" ng-change="fadeErrorMessage()" ng-init="$parent.$parent.username = '' " style="width: 100%;" autocomplete="off" class="ng-pristine ng-untouched ng-valid ng-empty">
    </div>
    <div class="field ng-scope">
        <div class="field_label">Password</div>
    </div>
    <div class="field ng-scope">
        <input type="password" id="password" ng-model="$parent.$parent.password" ng-change="fadeErrorMessage()" ng-init="$parent.$parent.password = ''" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-empty">
    </div>
</div>
                                <!-- ngInclude: 'otp.html' --><div ng-include="'otp.html'" ng-show="otp" class="ng-scope ng-hide">
    <div class="field ng-scope">
        <div class="field_label">One time password</div>
    </div>
    <div class="field ng-scope">
        <input type="text" ng-model="$parent.$parent.otp_val" minlength="6" maxlength="6" id="otp_val" ng-change="fadeErrorMessage()" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-empty ng-valid-minlength ng-valid-maxlength">
    </div>
</div>
                                <input type="submit" class="btn btn-primary login_btn" ng-click="do_login()" href="" ng-disabled="username == '' || password == ''" value="Login" disabled="disabled">
                                <div class="divider ng-hide" ng-show="!is_emc &amp;&amp; token_login_enabled"><span>OR</span></div>
                                <a class="link_login ng-hide" ng-show="!is_emc &amp;&amp; token_login_enabled" ng-click="toggleLoginWithToken()">Login with One-Time Token</a>
                                <div class="divider ng-hide" ng-show="saml_enabled || oidc_enabled"><span>OR</span></div>
                                <!-- ngRepeat: inverted in [true] --><!-- ngInclude: 'idpLogin.html' --><div ng-include="'idpLogin.html'" ng-repeat="inverted in [true]" class="ng-scope">
    <div class="flex-col ng-scope">
        <input type="button" class="btn btn-primary login_btn ng-hide inverted" ng-show="saml_enabled" ng-click="start_saml_login()" value="Login with [object Object]" ng-class="{'inverted': inverted}">
        <input type="button" class="btn btn-primary login_btn ng-hide inverted" ng-show="oidc_enabled" ng-click="start_oidc_login()" value="Login with " ng-class="{'inverted': inverted}">
    </div>
</div><!-- end ngRepeat: inverted in [true] -->
                            </div><!-- end ngIf: loginWithCreds && !loginWithToken -->
                            <!-- ngIf: !loginWithCreds && token_login_enabled && loginWithToken -->
                        </div>

                    </div>
                    <!-- site join -->
                    <div ng-show="!is_community_inited &amp;&amp; is_full_site &amp;&amp; is_primary" class="ng-hide">
                        <p class="login-title">Connect Site to SAC</p>
                        <div class="field">
                            <div class="field_label">
                                Site Name
                                <i class="fa fa-info-circle" tooltip-placement="bottom" uib-tooltip-html="'<div>This name will always appear at the top of every page.</div> <div>Use only: A-Z, a-z, 0-9, _, -</div>'"></i>
                            </div>
                        </div>
                        <div class="field">
                            <input type="text" ng-model="community_name" minlength="1" ng-change="fadeErrorMessage()" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-minlength">
                        </div>
                          <div class="field">
                            <div class="field_label">
                                 SAC Address
                                 <i class="fa fa-info-circle" tooltip-placement="bottom" uib-tooltip="Hostname or Physical IP"></i>
                            </div>
                        </div>
                        <div class="field">
                            <input type="text" ng-model="sac_address" minlength="1" ng-change="fadeErrorMessage()" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-empty ng-valid-minlength">
                        </div>
                        <div class="field">
                            <div class="field_label">
                               SAC Access Key
                            </div>
                        </div>
                        <div class="field">
                            <input type="text" ng-model="access_key" minlength="1" ng-change="fadeErrorMessage()" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-empty ng-valid-minlength">
                        </div>

                        <input type="button" class="btn btn-primary login_btn" ng-click="join_community()" value="Connect" ng-disabled="!community_name || !access_key || !sac_address || working" disabled="disabled">
                        <div style="font-size: 12px; color: gray">
                            After connecting the Site to SAC, you will continue to the Site’s login
                        </div>
                    </div>

                    <!-- sac init -->
                    <div ng-show="!is_community_inited &amp;&amp; is_emc &amp;&amp; is_primary" class="ng-hide">
                        <p class="login-title ng-binding">Initialize SAC</p>
                        <div class="field">
                            <div class="field_label ng-binding">
                                SAC Name
                                <i class="fa fa-info-circle" tooltip-placement="bottom" uib-tooltip-html="'<div>This name will always appear at the top of every page.</div> <div>Use only: A-Z, a-z, 0-9, _, -</div>'"></i>
                            </div>
                        </div>
                        <div class="field">
                            <input type="text" ng-model="community_name" minlength="1" ng-change="fadeErrorMessage()" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-minlength">
                        </div>
                        <div class="field">
                            <div class="field_label ng-binding">
                                SAC Access Key
                            </div>
                        </div>
                        <div class="field">
                            <input type="text" ng-model="access_key" minlength="1" ng-change="fadeErrorMessage()" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-empty ng-valid-minlength">
                        </div>
                        <input type="submit" class="btn btn-primary login_btn" ng-click="initialize_community()" value="Initialize" ng-disabled="!community_name || !access_key || working" disabled="disabled">
                        <div style="font-size: 12px; color: gray" class="ng-binding">
                            After initializing SAC you will<br>continue to the login page
                        </div>
                    </div>

                    <!-- join primary site or sac -->
                    <div ng-show="!is_primary" class="ng-hide">
                        <p class="login-title ng-binding"></p>
                        <div ng-show="!is_community_inited" class="ng-hide">
                            <div class="field">
                                <div class="field_label ng-binding">
                                    
                                    <i class="fa fa-info-circle" tooltip-placement="bottom" uib-tooltip-html="'<div>This is an internal unique name used for the Secondary SAC.</div> <div>Use only: A-Z, a-z, 0-9, _, -</div>'"></i>
                                </div>
                            </div>
                            <div class="field">
                                <input type="text" ng-model="community_name" minlength="1" ng-change="fadeErrorMessage()" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-minlength">
                            </div>
                            <div class="field">
                                <div class="field_label ng-binding">
                                    
                                </div>
                            </div>
                            <div class="field">
                                <input type="text" ng-model="address" minlength="1" ng-change="fadeErrorMessage()" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-empty ng-valid-minlength">
                            </div>

                            <div class="field">
                                <div class="field_label">
                                    SAC Access Key
                                </div>
                            </div>
                            <div class="field">
                                <input type="text" ng-model="access_key" minlength="1" ng-change="fadeErrorMessage()" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-empty ng-valid-minlength">
                            </div>
                        </div>
                        <div ng-show="is_emc &amp;&amp; is_community_inited">
                            The secondary SAC is already connected to the primary SAC.<br>
                            Click "Connect" to join the remaining sites.
                        </div>
                        <input type="submit" class="btn btn-primary login_btn" ng-click="join_primary()" value="Connect" ng-disabled="working || ((!community_name || !access_key || !address) &amp;&amp; !(is_community_inited &amp;&amp; is_emc))">
                    </div>

                    <i id="login_loading" class="glyphicon glyphicon-refresh rotate" hidden="true" style="margin-top: 20px; display: none;"></i>
                    <div id="db_syncing" style="font-size: 12px; color: gray; display: none;">
                            Please wait as this may take a few minutes...
                    </div>
                    <div style="margin-top: 15px">
                        <!-- ngIf: !working && !is_community_inited -->
                    </div>
                </form>
                <br>

                <div ng-show="success_message" class="success_message_container ng-hide">
                    <div class="alert alert-success" id="success_message">
                        <a href="" class="close" ng-click="success_message=''" aria-label="close">×</a>
                        <span style="white-space: pre-line" class="ng-binding"></span>
                    </div>
                </div>
                <div ng-show="error_message" class="error_message_container ng-hide">
                    <div class="alert alert-danger" id="error_message">
                        <a href="" class="close" ng-click="error_message=''" aria-label="close">×</a>
                        <span style="white-space: pre-line" class="ng-binding"></span>
                    </div>
                </div>

                <div class="eula" ng-show="is_community_inited">
                    <span>By logging in, you agree to our</span>
                    <a href="/static/files/eula.pdf" download="Claroty User Agreement.pdf">User Agreement</a>
                </div>
                <div class="eula-divider" ng-style="has_motd ? {width: '80%'} : {}"></div>
            
                <div class="motd-wrapper" ng-style="has_motd ? {maxWidth: '900px'} : {}">
                    <motdeditor preview-only="true" (motd-changed)="motd_changed($event)" _nghost-c0="" ng-version="7.2.3" class="previewonly"><textarea _ngcontent-c0="" hidden=""></textarea></motdeditor>
                </div>
            </div>
        </div>
    </div>

    <div ng-show="state=='change_password'" style="display: inline-block; min-width: 15%;" class="panel ng-hide" ng-keyup="$event.keyCode === 13 &amp;&amp; do_login()">
        <div class="panel">
            <div class="panel-body ng-binding" style="width: 500px">
                <h3>You are required to change your password</h3>
                
                <h3 ng-hide="is_emc" class="ng-hide">Please logon to the secure center to change your password</h3>
                <!-- ngIf: is_emc --><table ng-if="is_emc" style="width: 100%;" class="ng-scope">
                    <tbody><tr>
                        <td style="padding-right: 15px; text-align: left;">Password</td>
                    </tr>
                    <tr>
                        <td>
                            <input type="password" ng-model="$parent.new_password" ng-change="fadeErrorMessage()" ng-init="new_password=''" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-empty">
                        </td>
                    </tr>
                    <tr>
                        <td style="padding-right: 15px; padding-top: 15px; text-align: left;">Confirm Password</td>
                    </tr>
                    <tr>
                        <td>
                            <input type="password" ng-model="$parent.new_password_confirm" ng-change="fadeErrorMessage()" ng-init="new_password_confirm=''" style="width: 100%;" class="ng-pristine ng-untouched ng-valid ng-empty">
                        </td>
                    </tr>
                    <tr>
                        <td style="text-align: center; padding-top: 15px;">
                            <div style="float: right;">
                                <input type="submit" class="btn btn-primary" ng-click="do_login()" href="" ng-disabled="username == ''" value="Login" disabled="disabled">
                            </div>
                        </td>
                    </tr>
                </tbody></table><!-- end ngIf: is_emc -->
                <div ng-show="error_message" class="error_message_container ng-hide">
                    <div class="alert alert-danger" id="error_message">
                        <a href="" class="close" data-dismiss="alert" aria-label="close">×</a>
                        <span style="white-space: pre-line" class="ng-binding"></span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div ng-show="state=='otp_initial'" class="ng-hide">
        <div class="col-sm-8 col-sm-offset-2 barcode_container panel">
            <div class="panel-body" style="min-width: 550px">
                <h3>The site administrator has enabled a policy to enforce two factor authentication.</h3> <br>
                <div class="col-sm-6 align-left">
                    <p>
                        Please scan this code using a TOTP compliant client:
                    </p><li><a href="" ng-click="open_app_link('android')">Android</a></li>
                    <li><a href="" ng-click="open_app_link('iphone')">iPhone</a></li>
                    <li><a href="" ng-click="open_app_link('windows')">Windows phone</a></li>
                            <br>
                    <strong>This will not be shown again without administrator intervention.</strong><br>
                    <strong>Download the application to your phone before revealing the barcode.</strong><br><br>
                    <p></p>
                    <a href="" type="submit" ng-click="open_explanation_video()">What is TOTP? (video)</a><br>
                    <a href="" type="submit" ng-click="open_explanation_article()">What is TOTP? (article)</a>
                </div>
                <div class="col-sm-6">
                    <img ng-show="show_image" style="width: 300px; height: 300px;" class="ng-hide"><br>
                    <div ng-show="!show_image" style="width: 300px; height: 300px; border: 1px solid black; text-align: center; line-height: 150px;">
                        <input type="submit" class="btn btn-primary" ng-click="show_barcode()" value="Show me the barcode">
                    </div>
                    <div style="text-align: left;">
                        <label>After scanning the barcode in the application, Enter the displayed one time
                            password</label>
                        <form class="ng-pristine ng-valid ng-valid-minlength ng-valid-maxlength">
                            <input type="text" name="otp_val" ng-model="otp_val" minlength="6" maxlength="6" placeholder="One time password" class="ng-pristine ng-untouched ng-valid ng-empty ng-valid-minlength ng-valid-maxlength">
                            <input type="submit" class="btn btn-primary" ng-click="do_login()" value="Login">
                        </form>
                        <div ng-show="error_message" class="ng-hide">
                            <div class="alert alert-danger" id="error_message">
                                <a href="" class="close" data-dismiss="alert" aria-label="close">×</a>
                                <span style="white-space: pre-line" class="ng-binding"></span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div ng-show="state=='vpn_saml'" style="display: inline-block; min-width: 15%;" class="panel ng-hide">
        <div class="panel-body">
            <h3>SAML login is completed. You can close this window now.</h3> <br>
        </div>
    </div>

    <div ng-show="state=='vpn_otp_login_success'" style="display: inline-block; min-width: 15%;" class="panel ng-hide">
        <div class="panel-body">
            <h3>OTP authentication is completed. You can close this window now.</h3> <br>
        </div>
    </div>
</div>


<script type="text/ng-template" id="credentials.html" class="ng-scope">
    <div class="field">
        <div class="field_label">Username</div>
    </div>
    <div class="field">
        <input type="text" id="username" ng-model="$parent.$parent.username" ng-change="fadeErrorMessage()"
                ng-init="$parent.$parent.username = '' "
                style="width: 100%;" autocomplete="off">
    </div>
    <div class="field">
        <div class="field_label">Password</div>
    </div>
    <div class="field">
        <input type="password" id="password" ng-model="$parent.$parent.password" ng-change="fadeErrorMessage()"
                ng-init="$parent.$parent.password = ''"
                style="width: 100%;">
    </div>
</script>

<script type="text/ng-template" id="idpLogin.html" class="ng-scope">
    <div class="flex-col">
        <input type="button" 
            class="btn btn-primary login_btn" 
            ng-show="saml_enabled"
            ng-click="start_saml_login()" 
            value="Login with {{ saml_login_text }}"
            ng-class="{'inverted': inverted}"/>
        <input type="button" 
            class="btn btn-primary login_btn" 
            ng-show="oidc_enabled"
            ng-click="start_oidc_login()" 
            value="Login with {{ oidcData.login_button_text }}"
            ng-class="{'inverted': inverted}"/>
    </div>
</script>

<script type="text/ng-template" id="otp.html" class="ng-scope">
    <div class="field">
        <div class="field_label">One time password</div>
    </div>
    <div class="field">
        <input type="text" 
                ng-model="$parent.$parent.otp_val"
                minlength="6" 
                maxlength="6" 
                id="otp_val"
                ng-change="fadeErrorMessage()" 
                style="width: 100%;">
    </div>
</script>

<script type="text/ng-template" id="token.html" class="ng-scope">
    <div class="field">
        <div class="field_label">One-Time Token</div>
    </div>
    <div class="field">
        <input type="password" id="token" ng-model="$parent.$parent.token" ng-change="fadeErrorMessage()"
                ng-init="$parent.$parent.token = ''"
                style="width: 100%;">
    </div>
</script>
</div></div></div></body></html>