One-KVM/web/login/index.html
mofeng-git 2c056ca3e3 feat: merge upstream master - version 4.94
Merge upstream PiKVM master branch updates:

- Bump version from 4.93 to 4.94
- HID: improved jiggler pattern for better compatibility
- Streamer: major refactoring for improved performance and maintainability
- Prometheus: tidying GPIO channel name formatting
- Web: added __gpio-label class for custom styling
- HID: customizable /api/hid/print delay configuration
- ATX: independent power/reset regions for better control
- OLED: added --fill option for display testing
- Web: improved keyboard handling in modal dialogs
- Web: enhanced login error messages
- Switch: added heartbeat functionality
- Web: mouse touch code simplification and refactoring
- Configs: use systemd-networkd-wait-online --any by default
- PKGBUILD: use cp -r to install systemd units properly
- Various bug fixes and performance improvements
2025-08-21 11:26:59 +08:00

134 lines
5.9 KiB
HTML

<!DOCTYPE html>
<!--
==============================================================================
# #
# KVMD - The main PiKVM daemon. #
# #
# Copyright (C) 2018-2024 Maxim Devaev <mdevaev@gmail.com> #
# Copyright (C) 2023-2025 SilentWind <mofeng654321@hotmail.com> #
# #
# 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, either version 3 of the License, or #
# (at your option) any later version. #
# #
# 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, see <https://www.gnu.org/licenses/>. #
# #
==============================================================================
-->
<html lang="en">
<head>
<meta charset="utf-8">
<title>One-KVM Login</title>
<link rel="apple-touch-icon" sizes="180x180" href="../share/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="../share/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="../share/favicon-16x16.png">
<link rel="manifest" href="../share/site.webmanifest">
<link rel="mask-icon" href="../share/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#2b5797">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="../share/css/vars.css">
<link rel="stylesheet" href="../share/css/main.css">
<link rel="stylesheet" href="../share/css/window.css">
<link rel="stylesheet" href="../share/css/modal.css">
<link rel="stylesheet" href="../share/css/radio.css">
<link rel="stylesheet" href="../share/css/login/login.css">
<link rel="stylesheet" href="../share/css/user.css">
<script src="../share/js/i18n/jquery-3.7.1.min.js"></script>
<script src="../share/js/i18n/jquery.i18n.min.js"></script>
<script src="../share/js/i18n/i18n.js"></script>
<script type="module">import {setRootPrefix} from "../share/js/vars.js";
setRootPrefix("../");
import {main} from "../share/js/login/main.js";
main();
</script>
</head>
<body>
<form action="javascript:void(0)">
<div id="login-box">
<div id="login">
<table>
<tr>
<td><img class="svg-gray" id="login-logo" src="../share/svg/logo.svg" alt="&amp;pi;-kvm"></td>
<td></td>
</tr>
<tr>
<td colspan="2">
<hr>
</td>
</tr>
<tr>
<td i18n="username">Username:&nbsp;</td>
<td>
<input id="user-input" type="text" autocapitalize="off">
</td>
</tr>
<tr>
<td i18n="password">Password:&nbsp;</td>
<td>
<input id="passwd-input" type="password" autocapitalize="off">
</td>
</tr>
<tr>
<td i18n="2fa_code">2FA code:&nbsp;</td>
<td>
<input id="code-input" type="text" placeholder="if enabled" autocomplete="off" i18n="if_enabled">
</td>
</tr>
<tr>
<td colspan="2">
<hr>
</td>
</tr>
<tr>
<td><a target="_blank" href="https://docs.pikvm.org/auth/#session-expiration">Remember me</a>:&nbsp;</td>
<td>
<div class="radio-box">
<input type="radio" id="expire-radio-3600" name="expire-radio" value="3600"/>
<label for="expire-radio-3600">1h</label>
<input type="radio" id="expire-radio-43200" name="expire-radio" value="43200"/>
<label for="expire-radio-43200">12h</label>
<input type="radio" id="expire-radio-0" name="expire-radio" value="0" checked="checked"/>
<label for="expire-radio-0">Forever</label>
</div>
</td>
</tr>
<tr>
<td colspan="2">
<hr>
</td>
</tr>
<tr>
<td i18n="select_language">Select language:&nbsp;</td>
<td>
<select id="selectLanguage" style="width:100%">
<option id="zh" selected="selected" i18n="chinese">Simplified Chinese</option>
<option id="en" i18n="english">English</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td>
<button class="key" id="login-button" style="width:100%" i18n="login">Login</button>
</td>
</tr>
</table>
</div>
</div>
</form>
<ul class="footer">
<li class="left" i18n="footer-left">This site is actively using JavaScript.<br>
It doesn't contain ads, but is blocked by some ad filters.<br>
Please turn it off to continue and reload the page.
</li>
</ul>
</body>
</html>