|
|
@@ -4,67 +4,227 @@
|
|
|
<meta charset="utf-8" />
|
|
|
<meta name='viewport' content='width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no' />
|
|
|
<title>${realm.displayName}</title>
|
|
|
- <link rel="stylesheet" href="${url.resourcesPath}/css/totp.css" />
|
|
|
+ <style>
|
|
|
+ * {
|
|
|
+ margin: 0;
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ html,
|
|
|
+ body {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ body {
|
|
|
+ box-sizing: border-box;
|
|
|
+ -moz-osx-font-smoothing: grayscale;
|
|
|
+ -webkit-font-smoothing: antialiased;
|
|
|
+ text-rendering: optimizeLegibility;
|
|
|
+ font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
|
|
|
+ background-color: #F4F7FB;
|
|
|
+ }
|
|
|
+
|
|
|
+ *,
|
|
|
+ *::before,
|
|
|
+ *::after {
|
|
|
+ box-sizing: inherit;
|
|
|
+ }
|
|
|
+
|
|
|
+ a {
|
|
|
+ border: none;
|
|
|
+ outline: none;
|
|
|
+ text-decoration: none;
|
|
|
+ -webkit-touch-callout: none;
|
|
|
+ -webkit-tap-highlight-color: transparent;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login {
|
|
|
+ display: flex;
|
|
|
+ min-height: 100%;
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login__img {
|
|
|
+ flex: 1 0 400px;
|
|
|
+ display: inline-block;
|
|
|
+ max-width: 800px;
|
|
|
+ background: url("${url.resourcesPath}/img/illustration.png") 50% 50% / 757px 613px no-repeat;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login__main {
|
|
|
+ flex: 1 0 auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form {
|
|
|
+ display: inline-flex;
|
|
|
+ flex-direction: column;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ padding: 40px 0 80px;
|
|
|
+ background-color: #FFFFFF;
|
|
|
+ overflow: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__header {
|
|
|
+ display: inline-flex;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__logo {
|
|
|
+ flex: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__name {
|
|
|
+ margin-left: 16px;
|
|
|
+ color: #1C5CB0;
|
|
|
+ font-size: 28px;
|
|
|
+ font-weight: bold;
|
|
|
+ line-height: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__title {
|
|
|
+ padding: 36px 0 24px;
|
|
|
+ color: #1C5CB0;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__info {
|
|
|
+ width: 400px;
|
|
|
+ color: #333333;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__info ol {
|
|
|
+ line-height: 24px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__qr {
|
|
|
+ width: 144px;
|
|
|
+ height: 144px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__retry {
|
|
|
+ color: #1C5CB0;
|
|
|
+ font-size: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__required {
|
|
|
+ color: #EF1D1D;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__required ::before {
|
|
|
+ content: "*";
|
|
|
+ color: #FF0000;
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__input {
|
|
|
+ padding: 0 10px;
|
|
|
+ margin-top: 6px;
|
|
|
+ width: 240px;
|
|
|
+ height: 30px;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 30px;
|
|
|
+ border: 1px solid #C4C4C4;
|
|
|
+ outline: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__error {
|
|
|
+ height: 30px;
|
|
|
+ color: #F56C6C;
|
|
|
+ font-size: 12px;
|
|
|
+ line-height: 24px;
|
|
|
+ white-space: nowrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__submit {
|
|
|
+ display: inline-flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ height: 40px;
|
|
|
+ padding: 0 40px;
|
|
|
+ color: #ffffff;
|
|
|
+ font-size: 18px;
|
|
|
+ border: none;
|
|
|
+ background-color: #1C5CB0;
|
|
|
+ border-radius: 8px;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__submit[disabled] {
|
|
|
+ background-color: #C4C4C4;
|
|
|
+ }
|
|
|
+
|
|
|
+ .l-flex {
|
|
|
+ display: flex;
|
|
|
+ align-items: flex-start;
|
|
|
+ gap: 16px;
|
|
|
+ }
|
|
|
+
|
|
|
+ @media screen and (max-width: 900px) {
|
|
|
+ .c-login__img {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @media screen and (max-height: 800px) {
|
|
|
+ .c-login-form {
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .c-login-form__title {
|
|
|
+ padding: 24px 0 16px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ </style>
|
|
|
</head>
|
|
|
<body>
|
|
|
<div class="c-login">
|
|
|
<div class="c-login__img"></div>
|
|
|
- <form
|
|
|
- class="c-login__main c-login-form"
|
|
|
- action="${url.loginAction}"
|
|
|
- method="post"
|
|
|
- onsubmit="login.disabled = true; return true;"
|
|
|
- >
|
|
|
- <input id="totpSecret" type="hidden" name="totpSecret" value="${totp.totpSecret}" />
|
|
|
+ <form class="c-login__main c-login-form" action="${url.loginAction}" method="post"
|
|
|
+ onsubmit="login.disabled = true; return true;">
|
|
|
+ <input id="totpSecret" type="hidden" name="totpSecret" value="${totp.totpSecret}" />
|
|
|
<#if mode??>
|
|
|
<input id="mode" type="hidden" name="mode" value="${mode}" />
|
|
|
</#if>
|
|
|
<div class="c-login-form__header">
|
|
|
- <img class="c-login-form__logo" src="${url.resourcesPath}/img/logo/${realm.displayNameHtml}">
|
|
|
+ <img class="c-login-form__logo" src="${url.resourcesPath}/img/logo/${realm.displayNameHtml!'inspur.png'}" />
|
|
|
<div class="c-login-form__name">${realm.displayName}</div>
|
|
|
- </img>
|
|
|
+ </div>
|
|
|
<div class="c-login-form__title">手机验证</div>
|
|
|
<div class="c-login-form__info">
|
|
|
- <p>1、请先使用微信搜索小程序“数盾OTP”,或下载安装 “FreeOTP” 、“Goole Authenticator” 应用。</p>
|
|
|
- <br />
|
|
|
- <p>2、打开应用扫描二维码</p>
|
|
|
- <br />
|
|
|
- <img
|
|
|
- class="c-login-form__qr"
|
|
|
- src="data:image/png;base64, ${totp.totpSecretQrCode}"
|
|
|
- />
|
|
|
+ <ol>
|
|
|
+ <li>请先使用微信搜索小程序“浪潮安播云”进入“我的-OTP”,或扫描下面右侧小程序码。</li>
|
|
|
+ <li>打开应用后扫描下面左侧二维码。</li>
|
|
|
+ <li>输入应用提供的一次性码,点击提交完成验证。</li>
|
|
|
+ </ol>
|
|
|
<br />
|
|
|
- <p>
|
|
|
- <a
|
|
|
- class="c-login-form__retry"
|
|
|
- href="${totp.manualUrl}"
|
|
|
- >
|
|
|
- 无法扫码
|
|
|
- </a>
|
|
|
- </p>
|
|
|
- <br />
|
|
|
- <p>3、输入应用提供的一次性码,点击提交完成验证。</p>
|
|
|
+ <div class="l-flex">
|
|
|
+ <div>
|
|
|
+ <img class="c-login-form__qr" src="data:image/png;base64,${totp.totpSecretQrCode}" />
|
|
|
+ <p>
|
|
|
+ <a class="c-login-form__retry" href="${totp.manualUrl}">
|
|
|
+ 无法扫码
|
|
|
+ </a>
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ <img class="c-login-form__qr" src="${url.resourcesPath}/img/applet.png" />
|
|
|
+ </div>
|
|
|
<br />
|
|
|
<p class="c-login-form__required">一次性验证码</p>
|
|
|
- <input
|
|
|
- type="text"
|
|
|
- name="totp"
|
|
|
- class="c-login-form__input"
|
|
|
- autocomplete="off"
|
|
|
- />
|
|
|
+ <input type="text" name="totp" class="c-login-form__input" autocomplete="off" />
|
|
|
<div class="c-login-form__error">
|
|
|
<#if messagesPerField.existsError('totp')>
|
|
|
${kcSanitize(messagesPerField.get('totp'))?no_esc}
|
|
|
</#if>
|
|
|
</div>
|
|
|
- <input
|
|
|
- type="submit"
|
|
|
- name="login"
|
|
|
- class="c-login-form__submit"
|
|
|
- value="提交"
|
|
|
- >
|
|
|
+ <input type="submit" name="login" class="c-login-form__submit" value="提交">
|
|
|
</div>
|
|
|
</form>
|
|
|
</div>
|
|
|
</body>
|
|
|
+
|
|
|
</html>
|