hide some advanced settings in page, parse json on some packets, update deps

This commit is contained in:
creeper123123321 2022-08-18 19:40:40 -03:00
parent c4d12ae085
commit 2db33465a0
11 changed files with 73 additions and 61 deletions

View File

@ -84,7 +84,7 @@ dependencies {
implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("org.jline:jline-terminal-jansi:3.21.0")
implementation("org.slf4j:slf4j-api:$slf4jVer") implementation("org.slf4j:slf4j-api:$slf4jVer")
val ktorVersion = "2.0.3" val ktorVersion = "2.1.0"
implementation("io.ktor:ktor-network-tls-certificates-jvm:$ktorVersion") implementation("io.ktor:ktor-network-tls-certificates-jvm:$ktorVersion")
implementation("io.ktor:ktor-server-websockets:$ktorVersion") implementation("io.ktor:ktor-server-websockets:$ktorVersion")
implementation("io.ktor:ktor-server-netty-jvm:$ktorVersion") implementation("io.ktor:ktor-server-netty-jvm:$ktorVersion")

View File

@ -1,28 +1,30 @@
package com.viaversion.aas.codec.packet.common; package com.viaversion.aas.codec.packet.common;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.viaversion.aas.codec.packet.Packet; import com.viaversion.aas.codec.packet.Packet;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class AbstractSingleMessage implements Packet { public class AbstractSingleJson implements Packet {
private String msg; private JsonElement msg;
public String getMsg() { public JsonElement getMsg() {
return msg; return msg;
} }
public void setMsg(String msg) { public void setMsg(JsonElement msg) {
this.msg = msg; this.msg = msg;
} }
@Override @Override
public void decode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception { public void decode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
msg = Type.STRING.read(byteBuf); msg = JsonParser.parseString(Type.STRING.read(byteBuf));
} }
@Override @Override
public void encode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception { public void encode(@NotNull ByteBuf byteBuf, int protocolVersion) throws Exception {
Type.STRING.write(byteBuf, msg); Type.STRING.write(byteBuf, msg.toString());
} }
} }

View File

@ -1,6 +1,6 @@
package com.viaversion.aas.codec.packet.login; package com.viaversion.aas.codec.packet.login;
import com.viaversion.aas.codec.packet.common.AbstractSingleMessage; import com.viaversion.aas.codec.packet.common.AbstractSingleJson;
public class LoginDisconnect extends AbstractSingleMessage { public class LoginDisconnect extends AbstractSingleJson {
} }

View File

@ -1,6 +1,6 @@
package com.viaversion.aas.codec.packet.play; package com.viaversion.aas.codec.packet.play;
import com.viaversion.aas.codec.packet.common.AbstractSingleMessage; import com.viaversion.aas.codec.packet.common.AbstractSingleJson;
public class Kick extends AbstractSingleMessage { public class Kick extends AbstractSingleJson {
} }

View File

@ -1,6 +1,6 @@
package com.viaversion.aas.codec.packet.status; package com.viaversion.aas.codec.packet.status;
import com.viaversion.aas.codec.packet.common.AbstractSingleMessage; import com.viaversion.aas.codec.packet.common.AbstractSingleJson;
public class StatusResponse extends AbstractSingleMessage { public class StatusResponse extends AbstractSingleJson {
} }

View File

@ -1,6 +1,5 @@
package com.viaversion.aas.handler.autoprotocol package com.viaversion.aas.handler.autoprotocol
import com.google.gson.JsonParser
import com.viaversion.aas.codec.packet.Packet import com.viaversion.aas.codec.packet.Packet
import com.viaversion.aas.codec.packet.status.StatusResponse import com.viaversion.aas.codec.packet.status.StatusResponse
import com.viaversion.aas.handler.MinecraftHandler import com.viaversion.aas.handler.MinecraftHandler
@ -20,7 +19,7 @@ class ProtocolDetectionState(val future: CompletableFuture<ProtocolVersion>) : C
override fun handlePacket(handler: MinecraftHandler, ctx: ChannelHandlerContext, packet: Packet) { override fun handlePacket(handler: MinecraftHandler, ctx: ChannelHandlerContext, packet: Packet) {
handler.data.frontChannel.close() handler.data.frontChannel.close()
if (packet !is StatusResponse) throw StacklessException("Unexpected packet") if (packet !is StatusResponse) throw StacklessException("Unexpected packet")
val ver = JsonParser.parseString(packet.msg).asJsonObject val ver = packet.msg.asJsonObject
.getAsJsonObject("version")["protocol"].asInt.parseProtocol() .getAsJsonObject("version")["protocol"].asInt.parseProtocol()
future.complete(ver) future.complete(ver)
mcLogger.info("A.D.: {} {}", handler.endRemoteAddress, ver) mcLogger.info("A.D.: {} {}", handler.endRemoteAddress, ver)

View File

@ -299,7 +299,7 @@ class LoginState : ConnectionState {
super.disconnect(handler, msg) super.disconnect(handler, msg)
val packet = LoginDisconnect() val packet = LoginDisconnect()
packet.msg = JsonPrimitive("[VIAaaS] §c$msg").toString() packet.msg = JsonPrimitive("[VIAaaS] §c$msg")
writeFlushClose(handler.data.frontChannel, packet) writeFlushClose(handler.data.frontChannel, packet)
} }
} }

View File

@ -88,7 +88,7 @@ class PlayState : ConnectionState {
super.disconnect(handler, msg) super.disconnect(handler, msg)
writeFlushClose( writeFlushClose(
handler.data.frontChannel, handler.data.frontChannel,
Kick().also { it.msg = JsonPrimitive("[VIAaaS] §c$msg").toString() }, Kick().also { it.msg = JsonPrimitive("[VIAaaS] §c$msg") },
delay = is17(handler) delay = is17(handler)
) )
} }

View File

@ -3,7 +3,6 @@ package com.viaversion.aas.handler.state
import com.google.common.net.HostAndPort import com.google.common.net.HostAndPort
import com.google.gson.JsonArray import com.google.gson.JsonArray
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.google.gson.JsonParser
import com.viaversion.aas.* import com.viaversion.aas.*
import com.viaversion.aas.codec.packet.Packet import com.viaversion.aas.codec.packet.Packet
import com.viaversion.aas.codec.packet.UnknownPacket import com.viaversion.aas.codec.packet.UnknownPacket
@ -33,20 +32,16 @@ class StatusState : ConnectionState {
private fun modifyResponse(handler: MinecraftHandler, packet: StatusResponse) { private fun modifyResponse(handler: MinecraftHandler, packet: StatusResponse) {
if (VIAaaSConfig.showVersionPing) { if (VIAaaSConfig.showVersionPing) {
val parsed = JsonParser.parseString(packet.msg).asJsonObject val parsed = packet.msg.asJsonObject
val players = parsed.getAsJsonObject("players") ?: JsonObject().also { parsed.add("players", it) } val players = parsed.getAsJsonObject("players") ?: JsonObject().also { parsed.add("players", it) }
val sample = players.getAsJsonArray("sample") ?: JsonArray().also { players.add("sample", it) } val sample = players.getAsJsonArray("sample") ?: JsonArray().also { players.add("sample", it) }
sample.add(JsonObject().also { sample.add(JsonObject().also {
it.addProperty("id", UUID.nameUUIDFromBytes("VIAaaS".toByteArray(Charsets.UTF_8)).toString()) it.addProperty("id", UUID.nameUUIDFromBytes("VIAaaS".toByteArray(Charsets.UTF_8)).toString())
it.addProperty( it.addProperty(
"name", "name", "§9VIAaaS§r C: §7%s§'r S: §7%s"
"§9VIAaaS§r C: §7${handler.data.frontVer?.parseProtocol()}§r S: §7${ .format(handler.data.frontVer?.parseProtocol(), handler.data.backServerVer?.parseProtocol())
handler.data.backServerVer?.parseProtocol()
}"
) )
}) })
packet.msg = parsed.toString()
} }
} }
@ -70,7 +65,7 @@ class StatusState : ConnectionState {
VIAaaSConfig.faviconUrl?.let { favicon -> VIAaaSConfig.faviconUrl?.let { favicon ->
it.addProperty("favicon", favicon) it.addProperty("favicon", favicon)
} }
}.toString() }
send(handler.data.frontChannel, packet, flush = true) send(handler.data.frontChannel, packet, flush = true)
handler.data.state = StatusKicked() handler.data.state = StatusKicked()
handler.data.state.start(handler) handler.data.state.start(handler)

View File

@ -91,7 +91,6 @@ frame-src 'self' https://login.microsoftonline.com/ https://login.live.com/"
<div class="container tab-content" id="content"> <div class="container tab-content" id="content">
<div aria-labelledby="home-tab" class="tab-pane fade show active" id="home"> <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> <p>WebSocket connection status: <span class="text-white bg-dark" id="connection_status">?</span></p>
<p>CORS Proxy status: <span class="text-white bg-dark" id="cors_status">?</span></p>
<hr> <hr>
<div class="mb-3"> <div class="mb-3">
<p>Listening to front-end logins from:</p> <p>Listening to front-end logins from:</p>
@ -114,27 +113,27 @@ frame-src 'self' https://login.microsoftonline.com/ https://login.live.com/"
<p>Connecting to backend server:</p> <p>Connecting to backend server:</p>
<div id="connect"> <div id="connect">
<form class="input-group mb-3 row g-3 justify-content-md-center"> <form class="input-group mb-3 row g-3 justify-content-md-center">
<div class="col-md-auto"> <div class="col-md-4">
<input id="connect_address" type="text" class="form-control" placeholder="Address:Port" <input id="connect_address" type="text" class="form-control" placeholder="Address:Port"
aria-label="Address and Port" size="20"> aria-label="Address and Port">
</div> </div>
<div class="col-md-auto"> <div class="col-md-2">
<input id="connect_version" type="text" class="form-control col-auto" placeholder="Version" <input id="connect_version" type="text" class="form-control col-auto" placeholder="Version"
aria-label="Version" size="6"> aria-label="Version">
</div> </div>
<div class="col-md-auto"> <div class="col-md-2">
<select class="form-select" id="connect_online" aria-label="Online Mode" size="1">
<option value="null" selected>Front Online Mode...</option>
<option>AUTO</option>
<option value="true">Force online</option>
<option value="false">Force offline (recommended for Geyser)</option>
</select>
</div>
<div class="col-md-auto">
<input id="connect_user" type="text" class="form-control" placeholder="Back Username" <input id="connect_user" type="text" class="form-control" placeholder="Back Username"
aria-label="Backend Username" list="backend_user_list" size="16" maxlength="16"> aria-label="Backend Username" list="backend_user_list" maxlength="16">
<datalist id="backend_user_list"></datalist> <datalist id="backend_user_list"></datalist>
</div> </div>
<div class="col-md-2">
<select class="form-select" id="connect_online" aria-label="Online Mode">
<option value="null" selected>Front Auth...</option>
<option>AUTO</option>
<option value="true">Online</option>
<option value="false">Offline (recommended for Geyser)</option>
</select>
</div>
</form> </form>
<p>You can also use <a href="https://jo0001.github.io/ViaSetup/aspirin" id="viasetup_address">the address <p>You can also use <a href="https://jo0001.github.io/ViaSetup/aspirin" id="viasetup_address">the address
generator</a> to specify the server</p> generator</a> to specify the server</p>
@ -142,24 +141,31 @@ frame-src 'self' https://login.microsoftonline.com/ https://login.live.com/"
</div> </div>
<div aria-labelledby="settings-tab" class="tab-pane fade" id="settings"> <div aria-labelledby="settings-tab" class="tab-pane fade" id="settings">
<div class="mb-3">
<p>See <a href="https://github.com/ViaVersion/VIAaaS/">README</a> for more details.</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 class="mb-3"> <div class="mb-3">
<button id="en_notifications" type="button" class="btn btn-primary">Enable browser notifications</button> <button id="en_notifications" type="button" class="btn btn-primary">Enable browser notifications</button>
</div> </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>
<div aria-labelledby="accounts-tab" class="tab-pane fade" id="accounts"> <div aria-labelledby="accounts-tab" class="tab-pane fade" id="accounts">
@ -234,13 +240,17 @@ frame-src 'self' https://login.microsoftonline.com/ https://login.live.com/"
<ul> <ul>
<li>access date and time</li> <li>access date and time</li>
<li>backend Minecraft server IP</li> <li>backend Minecraft server IP</li>
<li>IP address, port, approximate geolocation, ASN and reverse DNS lookup</li> <li>client IP address, port, protocol version, approximate geolocation,
<li>query string</li> ASN and reverse DNS lookup
<li>usernames</li> </li>
<li>disconnection reason</li>
<li>HTTP query string</li>
<li>Minecraft usernames</li>
</ul> </ul>
<p>Why are these data collected?</p> <p>Why are these data collected?</p>
<ul> <ul>
<li>analytics</li> <li>analytics</li>
<li>improving our services</li>
<li>troubleshooting</li> <li>troubleshooting</li>
</ul> </ul>
<p>When are data collected?</p> <p>When are data collected?</p>

View File

@ -310,7 +310,7 @@ $(() => {
}) })
function handleSWMsg(event: MessageEvent) { function handleSWMsg(event: MessageEvent) {
console.log("sw msg: " + event); console.log("sw msg: ", event);
let data = event.data; let data = event.data;
let callback = notificationCallbacks.get(data.tag as string); let callback = notificationCallbacks.get(data.tag as string);
notificationCallbacks.delete(data.tag as string); notificationCallbacks.delete(data.tag as string);
@ -704,7 +704,12 @@ function onWsMsg(event: MessageEvent) {
} }
function handleParametersRequest(parsed: any) { function handleParametersRequest(parsed: any) {
let url = new URL("https://" + $("#connect_address").val()); let url: URL = new URL("https://0.0.0.0");
try {
url = new URL("https://" + $("#connect_address").val());
} catch (e) {
console.log(e);
}
socket.send(JSON.stringify({ socket.send(JSON.stringify({
action: "parameters_response", action: "parameters_response",
callback: parsed["callback"], callback: parsed["callback"],
@ -733,6 +738,7 @@ function onWsError(e: any) {
} }
function onWsClose(evt: CloseEvent) { function onWsClose(evt: CloseEvent) {
console.log(evt);
setWsStatus("disconnected with close code " + evt.code + " and reason: " + evt.reason); setWsStatus("disconnected with close code " + evt.code + " and reason: " + evt.reason);
resetHtml(); resetHtml();
setTimeout(connect, 5000); setTimeout(connect, 5000);