Git Product home page Git Product logo

viaversion / viaaas Goto Github PK

View Code? Open in Web Editor NEW
158.0 9.0 11.0 1.55 MB

ViaVersion as a Service - standalone ViaVersion proxy

Home Page: https://viaversion.github.io/VIAaaS

License: GNU Affero General Public License v3.0

Kotlin 48.66% HTML 7.84% JavaScript 11.12% Java 22.51% TypeScript 9.87%
minecraft minecraft-proxy viaversion minecraft-server-proxy proxy-server saas minecraft-server-software proxy html5 js

viaaas's Introduction

VIAaaS

ViaVersion Discord powered by ViaVersion

VIAaaS - ViaVersion as a Service - Standalone ViaVersion proxy

VIAaaS Logo (VIA logo with structural formula of aspirin)

Address generator: https://jo0001.github.io/ViaSetup/aspirin

Public instances: https://github.com/ViaVersion/VIAaaS/wiki/List-of-Public-Instances

Videos

Offline mode tutorial: https://youtu.be/lPdELnrxmp0

How does it work?

  • ViaVersion, ViaBackwards and ViaRewind translates the connections to backend server.
  • VIAaaS auth page stores account credentials in the player's browser local storage.
  • It uses a CORS Proxy for calling Mojang APIs.
  • Account credentials aren't sent to VIAaaS instance by default.
  • The web page receives and validates the join game request from VIAaaS instance.

Setting up server instance

Download: GitHub Actions (needs to be logged into GitHub) or JitPack

How to download and start VIAaaS server:

curl -Lf --output VIAaaS-all.jar "https://jitpack.io/com/github/ViaVersion/VIAaaS/master-SNAPSHOT/VIAaaS-master-SNAPSHOT-all.jar"
java -jar VIAaaS-all.jar
  • Requires Java 17
  • Default Minecraft: via.localhost with port 25565
  • Default HTTPS: https://localhost:25543/

How to create a public server

  • You need a DNS wildcard pointing to VIAaaS instance, like *.example.com -> 192.168.123.123.
  • Configure the hostname in the config
  • Open the Minecraft port (25565)
  • The HTTPS page needs a valid SSL certificate, you can use a reverse proxy like Apache (with a Let's Encrypt certificate).

Usage for players

You'll need to specify which server you want to connect through address parameters added as prefix in via.localhost or via web page (default https://localhost:25543/).

Offline mode:

  • Connect to mc.example.net.via.localhost

Online mode:

Web login:

  • Go to VIAaaS auth webpage (default is https://localhost:25543/)
  • Listen to the username A (you'll use it to connect to the VIAaaS instance).
  • Add the account B (you'll use it in backend server).
  • Keep the page open
  • Connect with your account A to mc.example.com._u(account B).via.localhost
  • Approve the login in the webpage

Web login via token caching:

  • Open the web page and save your account in your browser
  • Send your access token to the instance. After that you can close the page.
  • Connect to mc.example.com.via.localhost with the account you sent the token.

Fabric/Forge client:

  • Install OpenAuthMod in your client.
  • Join the server: mc.example.net.via.localhost
  • Approve the login

Address options

Example address:

  • server.example.net._p25565._v1_12_2._of._uBACKUSERNAME.via.example.com
  • server.example.net.v_1_8.via.example.com

Address parts:

  • You can use (option)_(value) too, like p_25565.
  • server.example.net: backend server address
  • _p: backend port
  • _v: backend version (protocol id or name, replace . with _) . AUTO is default (with 1.8 as fallback).
  • _o: true to force online mode in frontend, false to force offline mode in frontend. If not set, it will be based on backend online mode.
  • _u: username to use in backend connection (default is front-end username)
  • via.example.com: instance address (defined in config)

WARNING

  • VIAaaS may trigger anti-cheats, due to block, item, movement and other differences between versions. USE AT OWN RISK.
  • Take care of browser local storage. Check for XSS vulnerabilities on your domain.
  • Check the security of CORS proxy, it will be used for calling to Mojang API.

FAQ

Accounts

Why to use an online webpage for online mode?:

  • It's easier to maintain in that way, because providing login via chat requires encoding and decoding more packets, which reduces maintainability.
  • It allows your account password and token to be kept with you.

How to use Microsoft Account?:

  • If you're an administrator of the instance, edit config/web/js/config.js (default is in the jar) and configure your Azure Client ID and your domain whitelist.

Connection

How to use IPv6?:

  • The hostname parser currently doesn't support direct IPv6, but you can use a DNS name with https://sslip.io/

I'm getting a DNS error/"Unknown host" while connecting to via.localhost

  • Try configuring via.localho.st as hostname suffix instead

How to use with Geyser?

  • Set the parameters in Geyser's address field:
    remote:
      # The IP address of the remote (Java Edition) server
      address: 2b2t.org._v1_12_2.via.localhost
  • If you are using GeyserConnect: connect to a publicly available VIAaaS instance, like mc.example.com._v1_8.via.example.net as a Java Edition server.

Can you support more versions / Is there some alternative?

Can I customize the files of HTTP server?

  • Add files to config/web/ directory

viaaas's People

Contributors

creeper123123321 avatar florianmichael avatar hsgamer avatar jamestheawesomedude avatar kennytv avatar kichura avatar noahvdaa avatar raphimc avatar roblkyogre avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

viaaas's Issues

Online mode

Idea: using a https connection for logging in, so we can just keep the code without PLAY state listening

alternative authenticators

  • Idea 1: Limbo server which the player connects to manage the Minecraft accounts, like auth.viaaas.localhost
  • Idea 2: Login plugin messages viaaas:request_auth
  • Idea 3: Chat? Insecure?
  • Idea 4: Command-line JAR?

online mode login via chat

I personally wouldn't trust it, but...

  • add multiversion packet decoding

  • refactor connection to connect when frontend state is PLAY

  • basic PLAY packets (chat, join game, empty chunks...)

  • warn about remote login and mojang blocking accounts

  • todo: what does happen if server responds with different UUID or username???

add auto confirm login

when VIAaaS instance sends a login request from a premium player the page will approve automatically

No usage documentation

Currently the README.md doesn't list any information on how to test this out.

I've run ./gradlew and can create releases just fine.

However, when it comes to testing VIaaS currently when connecting it just floods open a bunch of UDP ports between the minecraft client and VIAaaS.

I'm aware this is probably incomplete, but I'm interested and code comments aren't helping much.

netty best practices

  • only add handlers when needed, making pipeline shorter
  • merge crypto, framing, compression and cross version translation encoders + decoders into codec handlers?
  • do not use replayingdecoder

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.