mirror of https://github.com/ViaVersion/VIAaaS.git
400 lines
21 KiB
HTML
400 lines
21 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta content="width=device-width, initial-scale=1, maximum-scale=1" name="viewport">
|
|
<title>VIAaaS</title>
|
|
<meta content="VIAaaS" name="application-name">
|
|
<meta content="VIAaaS" property="og:site_name">
|
|
<meta content="VIAaaS - ViaVersion as a Service - Standalone ViaVersion Proxy" name="description">
|
|
<meta content="VIAaaS" property="og:title">
|
|
<meta content="VIAaaS - ViaVersion as a Service - Standalone ViaVersion Proxy" property="og:description">
|
|
<meta content="game" property="og:type">
|
|
<meta content="img/logo.webp" property="og:image">
|
|
<link href="img/logo.webp" rel="icon">
|
|
<link rel="manifest" href="manifest.json">
|
|
<meta content="default-src 'self';
|
|
style-src 'self' https://cdnjs.cloudflare.com/;
|
|
img-src 'self' data: https://crafthead.net/ https://crafatar.com/;
|
|
connect-src 'self' http://localhost:*/ https: wss:;
|
|
script-src 'self' https://*.cloudflare.com/ https://alcdn.msauth.net/ https://*.cloudflareinsights.com/;
|
|
frame-src 'self' https://login.microsoftonline.com/ https://login.live.com/"
|
|
http-equiv="Content-Security-Policy">
|
|
<meta content="no-referrer" name="referrer">
|
|
<meta content="noindex" name="robots">
|
|
<meta content="#0468a1" name="theme-color">
|
|
|
|
<!-- https://www.srihash.org/ -->
|
|
<link class="async-css" rel="preload" as="style"
|
|
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.0/css/bootstrap.min.css"
|
|
integrity="sha512-XWTTruHZEYJsxV3W/lSXG1n3Q39YIWOstqvmFsdNEEQfHoZ6vm6E9GK2OrF6DSJSpIbRbi+Nn0WDPID9O7xB2Q=="
|
|
crossorigin="anonymous" referrerpolicy="no-referrer"/>
|
|
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.0/js/bootstrap.bundle.min.js"
|
|
integrity="sha512-9GacT4119eY3AcosfWtHMsT5JyZudrexyEVzTBWV3viP/YfB9e2pEy3N7WXL3SV6ASXpTU0vzzSxsbfsuUH4sQ=="
|
|
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
<!-- Safari workaround -->
|
|
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/HTML5Notification/3.0.0/Notification.min.js"
|
|
integrity="sha512-gx0m7Qoum1Bb0KrP6AEZSt0e+o2xMEyStAz2TNGXGqR4HSVgPveWFQdtE06FRvJmmp8HdkJklOLYiV3aZN6tQg=="
|
|
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js"
|
|
integrity="sha512-aVKKRRi/Q/YV+4mjoKBsE4x3H+BkegoM/em46NNlCqNTmUYADjBbeNefNxYV7giUp0VxICtqdrbqU7iVaeZNXA=="
|
|
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
<script defer crossorigin="anonymous"
|
|
integrity="sha512-UNM1njAgOFUa74Z0bADwAq8gbTcqZC8Ej4xPSzpnh0l6KMevwvkBvbldF9uR++qKeJ+MOZHRjV1HZjoRvjDfNQ=="
|
|
src="https://cdnjs.cloudflare.com/ajax/libs/uuid/8.3.2/uuid.min.js"></script>
|
|
<script defer src="https://alcdn.msauth.net/browser/2.28.1/js/msal-browser.min.js"
|
|
integrity="sha384-ei8xVSyFPTuRnbO1sdYy5qJT6Kd9neBfVG8AjZySEwdMG1GhCThbceSqxJnx0Ci3"
|
|
crossorigin="anonymous"></script>
|
|
<script defer src="js/config.js"></script>
|
|
<script defer src="js/page.js"></script>
|
|
</head>
|
|
<body>
|
|
<nav class="navbar navbar-expand-md navbar-dark bg-dark mb-2">
|
|
<div class="container">
|
|
<a class="navbar-brand" href="javascript:">VIAaaS</a>
|
|
<button aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"
|
|
class="navbar-toggler"
|
|
data-bs-target="#navbarSupportedContent" data-bs-toggle="collapse" type="button">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
|
<ul class="navbar-nav nav" role="tablist">
|
|
<li class="nav-item" role="presentation">
|
|
<a aria-controls="home" aria-selected="true" class="nav-link active" data-bs-toggle="tab"
|
|
href="#home"
|
|
id="home-tab" role="tab">Status</a>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<a aria-controls="accounts" aria-selected="false" class="nav-link" data-bs-toggle="tab"
|
|
href="#accounts"
|
|
id="accounts-tab" role="tab">Accounts</a>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<a aria-controls="settings" aria-selected="false" class="nav-link" data-bs-toggle="tab"
|
|
href="#settings"
|
|
id="settings-tab" role="tab">Settings</a>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a aria-expanded="false" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#"
|
|
id="aboutDropdown" role="button">About</a>
|
|
<ul aria-labelledby="aboutDropdown" class="dropdown-menu dropdown-menu-dark">
|
|
<li><a class="dropdown-item" data-bs-toggle="modal" href="#aboutModal" role="tab">About
|
|
VIAaaS</a></li>
|
|
<li><a class="dropdown-item" data-bs-toggle="modal" href="#privacyModal" role="tab">Privacy</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
<div class="container tab-content" id="content">
|
|
<div aria-labelledby="home-tab" class="tab-pane fade show active" id="home">
|
|
<p>WebSocket connection status: <span class="text-white bg-dark" id="connection_status">?</span></p>
|
|
<hr>
|
|
<div class="mb-3">
|
|
<p>Listening to front-end logins from:</p>
|
|
<ul class="list-group" id="listening"></ul>
|
|
</div>
|
|
<div id="actions">
|
|
<button type="button" class="btn btn-primary" id="listen_continue">Listen to <span
|
|
id="mcIdUsername"></span>
|
|
</button>
|
|
<button type="button" class="btn btn-primary" data-bs-toggle="modal"
|
|
data-bs-target="#listenModal"
|
|
id="listen_open">Listen to logins
|
|
</button>
|
|
<button type="button" class="btn btn-primary" data-bs-toggle="modal"
|
|
data-bs-target="#sendTokenModal"
|
|
id="send_token_open">Send Access Token
|
|
</button>
|
|
</div>
|
|
<hr>
|
|
<p>Connecting to server:</p>
|
|
<div id="connect">
|
|
<form class="input-group mb-3 row g-3 justify-content-md-center" id="address_info_form">
|
|
<div class="col-md-3">
|
|
<input id="connect_address" type="text" class="form-control" placeholder="Address:Port"
|
|
aria-label="Address and Port">
|
|
</div>
|
|
<div class="col-md-2">
|
|
<div class="input-group">
|
|
<span class="input-group-text"><abbr title="Version">v</abbr></span>
|
|
<input id="connect_version" type="text" class="form-control col-auto" placeholder="Version"
|
|
aria-label="Version" list="backend_version_list">
|
|
</div>
|
|
<datalist id="backend_version_list">
|
|
<option>AUTO</option>
|
|
<option value="1.19.2">1.19.1/2</option>
|
|
<option>1.19</option>
|
|
<option>1.18.2</option>
|
|
<option value="1.18.1">1.18(.1)</option>
|
|
<option>1.17.1</option>
|
|
<option>1.17</option>
|
|
<option value="1.16.5">1.16.4/5</option>
|
|
<option>1.16.3</option>
|
|
<option>1.16.2</option>
|
|
<option>1.16.1</option>
|
|
<option>1.16</option>
|
|
<option>1.15.2</option>
|
|
<option>1.15.1</option>
|
|
<option>1.15</option>
|
|
<option>1.14.4</option>
|
|
<option>1.14.3</option>
|
|
<option>1.14.2</option>
|
|
<option>1.14.1</option>
|
|
<option>1.14</option>
|
|
<option>1.13.2</option>
|
|
<option>1.13.1</option>
|
|
<option>1.13</option>
|
|
<option>1.12.2</option>
|
|
<option>1.12.1</option>
|
|
<option>1.12</option>
|
|
<option value="1.11.2">1.11.1/2</option>
|
|
<option>1.11</option>
|
|
<option value="1.10">1.10.x</option>
|
|
<option value="1.9.4">1.9.3/4</option>
|
|
<option>1.9.2</option>
|
|
<option>1.9.1</option>
|
|
<option>1.9</option>
|
|
<option>1.8.x</option>
|
|
<option value="1.7.10">1.7.6-10</option>
|
|
<option value="1.7.5">1.7.2-5</option>
|
|
</datalist>
|
|
</div>
|
|
<div class="col-md-2">
|
|
<div class="input-group">
|
|
<span class="input-group-text"><abbr title="Username">u</abbr></span>
|
|
<input id="connect_user" type="text" class="form-control" placeholder="Back Username"
|
|
aria-label="Backend Username" list="backend_user_list" maxlength="16">
|
|
</div>
|
|
<datalist id="backend_user_list"></datalist>
|
|
</div>
|
|
<div class="col-md-2">
|
|
<div class="input-group">
|
|
<span class="input-group-text"><abbr title="Online Mode">o</abbr></span>
|
|
<select class="form-select" id="connect_online" aria-label="Online Mode">
|
|
<option value="" selected>Front Auth...</option>
|
|
<option>AUTO</option>
|
|
<option value="true">Online</option>
|
|
<option value="false">Offline (recommended for Geyser)</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-2">
|
|
<div class="input-group">
|
|
<span class="input-group-text">.</span>
|
|
<input id="instance_suffix" type="text" class="form-control"
|
|
placeholder="Instance Suffix" aria-label="Instance Suffix" readonly>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
<p>You can also use this address to specify the server:
|
|
<span class="font-monospace" id="generated_address" data-bs-toggle="tooltip" data-bs-placement="top"
|
|
title="Click to copy"></span></p>
|
|
</div>
|
|
</div>
|
|
|
|
<div aria-labelledby="settings-tab" class="tab-pane fade" id="settings">
|
|
<div class="mb-3">
|
|
<button id="en_notifications" type="button" class="btn btn-primary">Enable browser notifications</button>
|
|
</div>
|
|
<div class="mb-3">
|
|
<button class="btn btn-secondary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseAdvConf"
|
|
aria-expanded="false" aria-controls="collapseAdvConfig">Advanced
|
|
</button>
|
|
</div>
|
|
<div class="collapse" id="collapseAdvConf">
|
|
<div class="mb-3">
|
|
<p>CORS Proxy status: <span class="text-white bg-dark" id="cors_status">?</span></p>
|
|
<form class="input-group" id="form_cors_proxy">
|
|
<label class="input-group-text" for="cors-proxy">CORS Proxy</label>
|
|
<input class="form-control" id="cors-proxy" placeholder="http://localhost:8080/" type="url">
|
|
<button class="btn btn-primary" type="submit">Save</button>
|
|
</form>
|
|
</div>
|
|
<div class="mb-3">
|
|
<form class="input-group" id="form_ws_url">
|
|
<label class="input-group-text" for="ws-url">WebSocket</label>
|
|
<input class="form-control" id="ws-url" placeholder="wss://viaaas.example.com/ws" type="url">
|
|
<button class="btn btn-primary" type="submit">Save</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div aria-labelledby="accounts-tab" class="tab-pane fade" id="accounts">
|
|
<div class="mb-3">
|
|
<p class="form-label">Accounts stored in the browser</p>
|
|
<ul class="list-group" id="accounts-list"></ul>
|
|
</div>
|
|
<div id="add-account">
|
|
<div class="mb-3">
|
|
<label class="form-label" for="form_add_ms">Add Microsoft account</label>
|
|
<form class="row justify-content-md-center" id="form_add_ms">
|
|
<div class="col-md-auto">
|
|
<button class="btn btn-primary" id="login_submit_ms" type="submit">Login with Microsoft</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div aria-hidden="true" aria-labelledby="aboutModalLabel" class="modal fade" id="aboutModal" tabindex="-1">
|
|
<div class="modal-dialog modal-dialog-scrollable">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="aboutModalLabel">About</h5>
|
|
<button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<!-- Design somewhat stolen/inspired from Gnome -->
|
|
<img loading="lazy" src="img/logo.webp"
|
|
class="mx-auto d-block" alt="VIAaaS logo" width="150">
|
|
<div class="text-center mb-3">
|
|
<h5>ViaVersion as a Service</h5>
|
|
<h6>Standalone ViaVersion Proxy</h6>
|
|
</div>
|
|
<div class="text-center mb-3">
|
|
<p class="mb-1">Copyright © 2020-2022 <a
|
|
href="https://github.com/creeper123123321">creeper123123321</a></p>
|
|
<p class="mb-1">Copyright © 2021-2022 <a
|
|
href="https://github.com/ViaVersion/VIAaaS/graphs/contributors">contributors</a>
|
|
</p>
|
|
</div>
|
|
<div>
|
|
<p>VIAaaS is free software: you can redistribute it and/or modify it under the terms of the GNU
|
|
Affero General Public License as published by the Free Software Foundation, either version 3 of
|
|
the License, or (at your option) any later version.</p>
|
|
<p>VIAaaS 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
|
|
Affero General Public License for more details.</p>
|
|
<p>You should have received a copy of the GNU Affero General Public License along with this program.
|
|
If not, see <a href="https://gnu.org/licenses">https://gnu.org/licenses/</a>.</p>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<a class="btn btn-secondary" href="https://github.com/ViaVersion/VIAaaS/" role="button">Source Code</a>
|
|
<button class="btn btn-primary" data-bs-dismiss="modal" type="button">Close</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div aria-hidden="true" aria-labelledby="privacyModalLabel" class="modal fade" id="privacyModal" tabindex="-1">
|
|
<div class="modal-dialog modal-dialog-scrollable">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="privacyModalLabel">Privacy</h5>
|
|
<button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div>
|
|
<p>Data collected by instance:</p>
|
|
<ul>
|
|
<li>access date and time</li>
|
|
<li>backend Minecraft server IP</li>
|
|
<li>client IP address, port, protocol version, approximate geolocation,
|
|
ASN and reverse DNS lookup
|
|
</li>
|
|
<li>disconnection reason</li>
|
|
<li>HTTP query string</li>
|
|
<li>Minecraft usernames</li>
|
|
</ul>
|
|
<p>Why are these data collected?</p>
|
|
<ul>
|
|
<li>analytics</li>
|
|
<li>improving our services</li>
|
|
<li>troubleshooting</li>
|
|
</ul>
|
|
<p>When are data collected?</p>
|
|
<ul>
|
|
<li>accessing web service</li>
|
|
<li>connecting to Minecraft proxy service</li>
|
|
</ul>
|
|
<p>Third parties</p>
|
|
<ul>
|
|
<li><a href="https://cloudflare.com">Cloudflare</a>: CDN and libraries</li>
|
|
<li><a href="https://github.com/creeper123123321/cors-anywhere/">creeper123123321's CORS
|
|
Anywhere</a>: proxy for Mojang API
|
|
</li>
|
|
<li><a href="https://ipinfo.io">IPInfo.io</a>: provides info about IP address</li>
|
|
<li><a href="https://microsoft.com">Microsoft</a>: login service</li>
|
|
<li><a href="https://mojang.com">Mojang</a>: login service</li>
|
|
<li><a href="https://minecraft.id">MinecraftID</a>: authenticates usernames</li>
|
|
<li><a href="https://major.io/icanhazip-com-faq/">icanhazip.com</a>: returns IP address and Unix
|
|
time
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div aria-hidden="true" aria-labelledby="listenModalLabel" class="modal fade" id="listenModal" tabindex="-1">
|
|
<div class="modal-dialog modal-dialog-scrollable">
|
|
<form id="form_listen">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="listenModalLabel">Listen to logins</h5>
|
|
<button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p>The instance will send impersonation requests to this page. Please note
|
|
that they're verified by UUID, so offline and online accounts
|
|
are considered different.</p>
|
|
<p>VIAaaS will also request the address parameters when they're not specified.
|
|
They're verified by username. Online-mode listeners have priority.</p>
|
|
<div class="mb-3">
|
|
<label for="listen_username" class="form-label">Username</label>
|
|
<input type="text" class="form-control" id="listen_username">
|
|
</div>
|
|
<div class="mb-3 form-check">
|
|
<input type="checkbox" class="form-check-input" id="listen_online" checked>
|
|
<label for="listen_online" class="form-check-label">Online Mode</label>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="submit" class="btn btn-primary" data-bs-dismiss="modal">Listen</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div aria-hidden="true" aria-labelledby="listenModalLabel" class="modal fade" id="sendTokenModal" tabindex="-1">
|
|
<div class="modal-dialog modal-dialog-scrollable">
|
|
<form id="form_send_token">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="sendTokenModalLabel">Save Access Token in Instance</h5>
|
|
<button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p>The instance will cache your Minecraft access token for some minutes, allowing you to connect
|
|
without keeping this page open.</p>
|
|
<p>Note that the access token are valid for ~1 day and a compromised instance may be used to access
|
|
your account.</p>
|
|
<p>You'll need to connect as online-mode in the front-end. It's not possible to use the cached
|
|
token when changing the backend username</p>
|
|
<div class="input-group mb-3">
|
|
<label class="input-group-text" for="send_token_user">Account</label>
|
|
<select class="form-select" id="send_token_user">
|
|
<option selected>Choose...</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="submit" class="btn btn-primary" data-bs-dismiss="modal">Send</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="toast-container position-absolute top-0 end-0 p-3" id="toasts"></div>
|
|
</body>
|
|
</html>
|