From ce34096c4d3ff0d8c93fd2d7c121fe76db9b7375 Mon Sep 17 00:00:00 2001 From: Telesphoreo Date: Fri, 1 Apr 2022 23:14:12 -0500 Subject: [PATCH] Update Gradle etc --- build.gradle.kts | 15 +- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 269 +++++++++++------- gradlew.bat | 178 ++++++------ settings.gradle.kts | 2 +- src/main/java/dev/plex/HTTPDModule.java | 45 ++- .../dev/plex/request/AbstractServlet.java | 46 +-- .../java/dev/plex/request/GetMapping.java | 5 +- .../java/dev/plex/request/MappingHeaders.java | 5 +- .../dev/plex/request/impl/GetEndpoints.java | 58 ++-- src/main/resources/module.yml | 2 +- 11 files changed, 359 insertions(+), 268 deletions(-) mode change 100644 => 100755 gradlew diff --git a/build.gradle.kts b/build.gradle.kts index 13ca65a..1cc81e5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,24 +5,23 @@ plugins { // id("com.github.johnrengelman.shadow") version "7.1.2" } - - -group "dev.plex" -version "0.1" +group = "dev.plex" +version = "1.0" +description = "Module-HTTPD" repositories { - mavenLocal() mavenCentral() + maven { url = uri("https://papermc.io/repo/repository/maven-public/") } maven { - url = uri("https://nexus.telesphoreo.me/repository/plex") + url = uri("https://nexus.telesphoreo.me/repository/plex/") } maven { - url = uri("https://nexus.telesphoreo.me/repository/totalfreedom") + url = uri("https://nexus.telesphoreo.me/repository/totalfreedom/") } maven { url = uri("https://jitpack.io") @@ -34,7 +33,7 @@ dependencies { annotationProcessor("org.projectlombok:lombok:1.18.22") implementation("io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT") implementation("dev.plex:Plex:0.10-SNAPSHOT") - implementation("org.json:json:20211205") + implementation("org.json:json:20220320") implementation("org.reflections:reflections:0.10.2") implementation("org.eclipse.jetty:jetty-server:11.0.8") implementation("org.eclipse.jetty:jetty-servlet:11.0.8") diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e6e589..aa991fc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 index 744e882..1b6c787 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MSYS* | MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 107acd3..ac1b06f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,89 +1,89 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle.kts b/settings.gradle.kts index 426b5bf..231a2bf 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,2 +1,2 @@ -rootProject.name = "plex-httpd" +rootProject.name = "Module-HTTPD" diff --git a/src/main/java/dev/plex/HTTPDModule.java b/src/main/java/dev/plex/HTTPDModule.java index 102835b..3ff9831 100644 --- a/src/main/java/dev/plex/HTTPDModule.java +++ b/src/main/java/dev/plex/HTTPDModule.java @@ -1,21 +1,25 @@ package dev.plex; -import dev.plex.config.Config; import dev.plex.config.ModuleConfig; import dev.plex.module.PlexModule; import dev.plex.request.impl.GetEndpoints; import dev.plex.util.PlexLog; +import java.util.concurrent.atomic.AtomicReference; import lombok.Getter; import net.milkbowl.vault.permission.Permission; import org.bukkit.Bukkit; import org.bukkit.plugin.RegisteredServiceProvider; -import org.eclipse.jetty.server.*; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.ForwardedRequestCustomizer; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHandler; -import java.util.concurrent.atomic.AtomicReference; - -public class HTTPDModule extends PlexModule { +public class HTTPDModule extends PlexModule +{ public static ServletContextHandler context; private Thread serverThread; @@ -27,14 +31,17 @@ public class HTTPDModule extends PlexModule { private ModuleConfig config; @Override - public void enable() { - config = new ModuleConfig(this, "settings.yml"); + public void enable() + { + config = new ModuleConfig(this, "settings.yml"); config.load(); PlexLog.debug("HTTPD Module Port: {0}", config.getInt("server.port")); - if (!setupPermissions() && getPlex().getSystem().equalsIgnoreCase("permissions") && !Bukkit.getPluginManager().isPluginEnabled("Vault")) { + if (!setupPermissions() && getPlex().getSystem().equalsIgnoreCase("permissions") && !Bukkit.getPluginManager().isPluginEnabled("Vault")) + { throw new RuntimeException("Plex-HTTPD requires the 'Vault' plugin as well as a Permissions plugin that hooks into 'Vault.' We recommend LuckPerms!"); } - serverThread = new Thread(() -> { + serverThread = new Thread(() -> + { Server server = new Server(); ServletHandler servletHandler = new ServletHandler(); @@ -53,10 +60,13 @@ public class HTTPDModule extends PlexModule { atomicServer.set(server); PlexLog.debug("Set atomicServer value? {0}", atomicServer.get() != null); - try { + try + { server.start(); server.join(); - } catch (Exception e) { + } + catch (Exception e) + { e.printStackTrace(); } }, "jetty-server"); @@ -64,17 +74,22 @@ public class HTTPDModule extends PlexModule { } @Override - public void disable() { + public void disable() + { PlexLog.debug("Stopping jetty server"); - try { + try + { atomicServer.get().stop(); atomicServer.get().destroy(); - } catch (Exception e) { + } + catch (Exception e) + { e.printStackTrace(); } } - private boolean setupPermissions() { + private boolean setupPermissions() + { RegisteredServiceProvider rsp = Bukkit.getServicesManager().getRegistration(Permission.class); permissions = rsp.getProvider(); return permissions != null; diff --git a/src/main/java/dev/plex/request/AbstractServlet.java b/src/main/java/dev/plex/request/AbstractServlet.java index a30fadc..4db509e 100644 --- a/src/main/java/dev/plex/request/AbstractServlet.java +++ b/src/main/java/dev/plex/request/AbstractServlet.java @@ -7,26 +7,29 @@ import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import lombok.Data; -import org.eclipse.jetty.servlet.ServletHolder; - import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Enumeration; import java.util.List; +import lombok.Data; +import org.eclipse.jetty.servlet.ServletHolder; -public class AbstractServlet extends HttpServlet { +public class AbstractServlet extends HttpServlet +{ private final List GET_MAPPINGS = Lists.newArrayList(); - public AbstractServlet() { - for (Method declaredMethod : this.getClass().getDeclaredMethods()) { + public AbstractServlet() + { + for (Method declaredMethod : this.getClass().getDeclaredMethods()) + { declaredMethod.setAccessible(true); - if (declaredMethod.isAnnotationPresent(GetMapping.class)) { + if (declaredMethod.isAnnotationPresent(GetMapping.class)) + { GetMapping getMapping = declaredMethod.getAnnotation(GetMapping.class); Mapping mapping = new Mapping(declaredMethod, getMapping); - if (declaredMethod.isAnnotationPresent(MappingHeaders.class)) { + if (declaredMethod.isAnnotationPresent(MappingHeaders.class)) + { mapping.setHeaders(declaredMethod.getAnnotation(MappingHeaders.class)); } GET_MAPPINGS.add(mapping); @@ -37,12 +40,14 @@ public class AbstractServlet extends HttpServlet { } @Override - public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException + { PlexLog.debug("Context Path: " + req.getHttpServletMapping().getMatchValue()); String ipAddress = req.getHeader("X-FORWARDED-FOR"); - if (ipAddress == null) { + if (ipAddress == null) + { ipAddress = req.getRemoteAddr(); } PlexLog.debug("HTTP Remote IP: " + ipAddress); @@ -55,19 +60,25 @@ public class AbstractServlet extends HttpServlet { }*/ PlexLog.debug("-------------------------"); - GET_MAPPINGS.stream().filter(mapping -> mapping.getMapping().endpoint().substring(1, mapping.getMapping().endpoint().length() - 1).equalsIgnoreCase(req.getHttpServletMapping().getMatchValue())).forEach(mapping -> { - if (mapping.headers != null) { - for (String headers : mapping.headers.headers()) { + GET_MAPPINGS.stream().filter(mapping -> mapping.getMapping().endpoint().substring(1, mapping.getMapping().endpoint().length() - 1).equalsIgnoreCase(req.getHttpServletMapping().getMatchValue())).forEach(mapping -> + { + if (mapping.headers != null) + { + for (String headers : mapping.headers.headers()) + { String header = headers.split(";")[0]; String value = headers.split(";")[1]; resp.addHeader(header, value); } } resp.setStatus(HttpServletResponse.SC_OK); - try { + try + { Object object = mapping.method.invoke(this, req); resp.getWriter().println(object.toString()); - } catch (IOException | IllegalAccessException | InvocationTargetException e) { + } + catch (IOException | IllegalAccessException | InvocationTargetException e) + { e.printStackTrace(); } }); @@ -75,7 +86,8 @@ public class AbstractServlet extends HttpServlet { @Data - public class Mapping { + public class Mapping + { private final Method method; private final GetMapping mapping; private MappingHeaders headers; diff --git a/src/main/java/dev/plex/request/GetMapping.java b/src/main/java/dev/plex/request/GetMapping.java index 14826f5..0facf7e 100644 --- a/src/main/java/dev/plex/request/GetMapping.java +++ b/src/main/java/dev/plex/request/GetMapping.java @@ -6,8 +6,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) -public @interface GetMapping { - +public @interface GetMapping +{ String endpoint(); - } diff --git a/src/main/java/dev/plex/request/MappingHeaders.java b/src/main/java/dev/plex/request/MappingHeaders.java index 1b9229c..b15a467 100644 --- a/src/main/java/dev/plex/request/MappingHeaders.java +++ b/src/main/java/dev/plex/request/MappingHeaders.java @@ -4,8 +4,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) -public @interface MappingHeaders { - +public @interface MappingHeaders +{ String[] headers(); - } diff --git a/src/main/java/dev/plex/request/impl/GetEndpoints.java b/src/main/java/dev/plex/request/impl/GetEndpoints.java index 271ff2a..1dce053 100644 --- a/src/main/java/dev/plex/request/impl/GetEndpoints.java +++ b/src/main/java/dev/plex/request/impl/GetEndpoints.java @@ -6,40 +6,48 @@ import dev.plex.HTTPDModule; import dev.plex.Plex; import dev.plex.cache.DataUtils; import dev.plex.player.PlexPlayer; -import dev.plex.punishment.PunishmentManager; import dev.plex.rank.enums.Rank; import dev.plex.request.AbstractServlet; import dev.plex.request.GetMapping; import dev.plex.util.PlexLog; import jakarta.servlet.http.HttpServletRequest; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; - import java.util.ArrayList; import java.util.UUID; import java.util.stream.Collectors; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; //@RestController //@RequestMapping("/api/admins") -public class GetEndpoints extends AbstractServlet { - +public class GetEndpoints extends AbstractServlet +{ @GetMapping(endpoint = "/api/admins/") - public String getAdmins(HttpServletRequest request) { + public String getAdmins(HttpServletRequest request) + { String ipAddress = request.getHeader("X-FORWARDED-FOR"); - if (ipAddress == null) { + if (ipAddress == null) + { ipAddress = request.getRemoteAddr(); } final PlexPlayer player = DataUtils.getPlayerByIP(ipAddress); - if (player == null) return "Couldn't load your IP Address: " + ipAddress + ". Check if your SSL settings are setup correctly."; - if (Plex.get().getSystem().equalsIgnoreCase("ranks")) { + if (player == null) + { + return "Couldn't load your IP Address: " + ipAddress + ". Check if your SSL settings are setup correctly."; + } + if (Plex.get().getSystem().equalsIgnoreCase("ranks")) + { PlexLog.debug("Plex-HTTPD using ranks check"); - if (!player.getRankFromString().isAtLeast(Rank.ADMIN)) { + if (!player.getRankFromString().isAtLeast(Rank.ADMIN)) + { return new GsonBuilder().setPrettyPrinting().create().toJson(Plex.get().getAdminList().getAllAdminPlayers().stream().peek(plexPlayer -> plexPlayer.setIps(Lists.newArrayList())).collect(Collectors.toList())); } - } else if (Plex.get().getSystem().equalsIgnoreCase("permissions")) { + } + else if (Plex.get().getSystem().equalsIgnoreCase("permissions")) + { PlexLog.debug("Plex-HTTPD using permissions check"); final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(UUID.fromString(player.getUuid())); - if (!HTTPDModule.getPermissions().playerHas(null, offlinePlayer, "plex.httpd.indefbans.access")) { + if (!HTTPDModule.getPermissions().playerHas(null, offlinePlayer, "plex.httpd.indefbans.access")) + { return new GsonBuilder().setPrettyPrinting().create().toJson(Plex.get().getAdminList().getAllAdminPlayers().stream().peek(plexPlayer -> plexPlayer.setIps(Lists.newArrayList())).collect(Collectors.toList())); } } @@ -47,22 +55,32 @@ public class GetEndpoints extends AbstractServlet { } @GetMapping(endpoint = "/api/indefbans/") - public String getBans(HttpServletRequest request) { + public String getBans(HttpServletRequest request) + { String ipAddress = request.getHeader("X-FORWARDED-FOR"); - if (ipAddress == null) { + if (ipAddress == null) + { ipAddress = request.getRemoteAddr(); } final PlexPlayer player = DataUtils.getPlayerByIP(ipAddress); - if (player == null) return "Couldn't load your IP Address: " + ipAddress + ". Check if your SSL settings are setup correctly."; - if (Plex.get().getSystem().equalsIgnoreCase("ranks")) { + if (player == null) + { + return "Couldn't load your IP Address: " + ipAddress + ". Check if your SSL settings are setup correctly."; + } + if (Plex.get().getSystem().equalsIgnoreCase("ranks")) + { PlexLog.debug("Plex-HTTPD using ranks check"); - if (!player.getRankFromString().isAtLeast(Rank.ADMIN)) { + if (!player.getRankFromString().isAtLeast(Rank.ADMIN)) + { return "Not a high enough rank to view this page."; } - } else if (Plex.get().getSystem().equalsIgnoreCase("permissions")) { + } + else if (Plex.get().getSystem().equalsIgnoreCase("permissions")) + { PlexLog.debug("Plex-HTTPD using permissions check"); final OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(UUID.fromString(player.getUuid())); - if (!HTTPDModule.getPermissions().playerHas(null, offlinePlayer, "plex.httpd.indefbans.access")) { + if (!HTTPDModule.getPermissions().playerHas(null, offlinePlayer, "plex.httpd.indefbans.access")) + { return "Not enough permissions to view this page."; } } diff --git a/src/main/resources/module.yml b/src/main/resources/module.yml index fa55410..d1fd7d4 100644 --- a/src/main/resources/module.yml +++ b/src/main/resources/module.yml @@ -1,4 +1,4 @@ name: Plex-HTTPD -version: 0.1 +version: 1.0 description: HTTPD server for Plex main: dev.plex.HTTPDModule \ No newline at end of file