mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-23 00:51:01 +03:00
Merge branch 'release/v5.2.7'
This commit is contained in:
commit
3a77a59eac
13 changed files with 312 additions and 95 deletions
70
.github/workflows/codeql-analysis.yml
vendored
70
.github/workflows/codeql-analysis.yml
vendored
|
@ -1,70 +0,0 @@
|
|||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master, dev ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master, dev ]
|
||||
schedule:
|
||||
- cron: '28 4 * * 0'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'java' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
# Learn more:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 11
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
|
@ -5,6 +5,7 @@
|
|||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.launchserver.auth.core.AuthCoreProvider;
|
||||
import pro.gravit.launchserver.auth.core.MySQLCoreProvider;
|
||||
import pro.gravit.launchserver.auth.core.PostgresSQLCoreProvider;
|
||||
import pro.gravit.launchserver.auth.texture.TextureProvider;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -39,7 +40,7 @@ public static Set<String> getFeatures(Class<?> clazz) {
|
|||
|
||||
public void internalShowOAuthWarnMessage() {
|
||||
if(!warnOAuthShow) {
|
||||
if(!(core instanceof MySQLCoreProvider)) { // MySQL upgraded later
|
||||
if(!(core instanceof MySQLCoreProvider) && !(core instanceof PostgresSQLCoreProvider)) { // MySQL and PostgreSQL upgraded later
|
||||
logger.warn("AuthCoreProvider {} ({}) not supported OAuth. Legacy session system may be removed in next release", name, core.getClass().getName());
|
||||
}
|
||||
warnOAuthShow = true;
|
||||
|
|
|
@ -43,6 +43,7 @@ public static void registerProviders() {
|
|||
if (!registredProviders) {
|
||||
providers.register("reject", RejectAuthCoreProvider.class);
|
||||
providers.register("mysql", MySQLCoreProvider.class);
|
||||
providers.register("postgresql", PostgresSQLCoreProvider.class);
|
||||
providers.register("memory", MemoryAuthCoreProvider.class);
|
||||
providers.register("http", HttpAuthCoreProvider.class);
|
||||
registredProviders = true;
|
||||
|
|
|
@ -0,0 +1,260 @@
|
|||
package pro.gravit.launchserver.auth.core;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import pro.gravit.launcher.ClientPermissions;
|
||||
import pro.gravit.launcher.request.auth.AuthRequest;
|
||||
import pro.gravit.launcher.request.auth.password.AuthPlainPassword;
|
||||
import pro.gravit.launchserver.LaunchServer;
|
||||
import pro.gravit.launchserver.auth.AuthException;
|
||||
import pro.gravit.launchserver.auth.MySQLSourceConfig;
|
||||
import pro.gravit.launchserver.auth.PostgreSQLSourceConfig;
|
||||
import pro.gravit.launchserver.auth.password.PasswordVerifier;
|
||||
import pro.gravit.launchserver.manangers.AuthManager;
|
||||
import pro.gravit.launchserver.socket.response.auth.AuthResponse;
|
||||
import pro.gravit.utils.helper.SecurityHelper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.*;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PostgresSQLCoreProvider extends AuthCoreProvider {
|
||||
private transient final Logger logger = LogManager.getLogger();
|
||||
public PostgreSQLSourceConfig postgresSQLHolder;
|
||||
|
||||
public String uuidColumn;
|
||||
public String usernameColumn;
|
||||
public String accessTokenColumn;
|
||||
public String passwordColumn;
|
||||
public String serverIDColumn;
|
||||
public String table;
|
||||
|
||||
public PasswordVerifier passwordVerifier;
|
||||
public String customQueryByUUIDSQL;
|
||||
public String customQueryByUsernameSQL;
|
||||
public String customQueryByLoginSQL;
|
||||
public String customUpdateAuthSQL;
|
||||
public String customUpdateServerIdSQL;
|
||||
// Prepared SQL queries
|
||||
private transient String queryByUUIDSQL;
|
||||
private transient String queryByUsernameSQL;
|
||||
private transient String queryByLoginSQL;
|
||||
private transient String updateAuthSQL;
|
||||
private transient String updateServerIDSQL;
|
||||
|
||||
@Override
|
||||
public User getUserByUsername(String username) {
|
||||
try {
|
||||
return query(queryByUsernameSQL, username);
|
||||
} catch (IOException e) {
|
||||
logger.error("SQL error", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public User getUserByUUID(UUID uuid) {
|
||||
try {
|
||||
return query(queryByUUIDSQL, uuid.toString());
|
||||
} catch (IOException e) {
|
||||
logger.error("SQL error", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public User getUserByLogin(String login) {
|
||||
try {
|
||||
return query(queryByLoginSQL, login);
|
||||
} catch (IOException e) {
|
||||
logger.error("SQL error", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserSession getUserSessionByOAuthAccessToken(String accessToken) throws OAuthAccessTokenExpired {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthManager.AuthReport refreshAccessToken(String refreshToken, AuthResponse.AuthContext context) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthManager.AuthReport authorize(String login, AuthResponse.AuthContext context, AuthRequest.AuthPasswordInterface password, boolean minecraftAccess) throws IOException {
|
||||
PostgresSQLUser postgresSQLUser = (PostgresSQLUser) getUserByLogin(login);
|
||||
if(postgresSQLUser == null) {
|
||||
throw AuthException.wrongPassword();
|
||||
}
|
||||
if(context != null) {
|
||||
AuthPlainPassword plainPassword = (AuthPlainPassword) password;
|
||||
if(plainPassword == null) {
|
||||
throw AuthException.wrongPassword();
|
||||
}
|
||||
if(!passwordVerifier.check(postgresSQLUser.password, plainPassword.password)) {
|
||||
throw AuthException.wrongPassword();
|
||||
}
|
||||
}
|
||||
MySQLUserSession session = new MySQLUserSession(postgresSQLUser);
|
||||
if (minecraftAccess) {
|
||||
String minecraftAccessToken = SecurityHelper.randomStringToken();
|
||||
updateAuth(postgresSQLUser, minecraftAccessToken);
|
||||
return AuthManager.AuthReport.ofMinecraftAccessToken(minecraftAccessToken, session);
|
||||
} else {
|
||||
return AuthManager.AuthReport.ofMinecraftAccessToken(null, session);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(LaunchServer server) {
|
||||
if (postgresSQLHolder == null) logger.error("postgresSQLHolder cannot be null");
|
||||
if (uuidColumn == null) logger.error("uuidColumn cannot be null");
|
||||
if (usernameColumn == null) logger.error("usernameColumn cannot be null");
|
||||
if (accessTokenColumn == null) logger.error("accessTokenColumn cannot be null");
|
||||
if (serverIDColumn == null) logger.error("serverIDColumn cannot be null");
|
||||
if (table == null) logger.error("table cannot be null");
|
||||
// Prepare SQL queries
|
||||
String userInfoCols = String.format("%s, %s, %s, %s, %s", uuidColumn, usernameColumn, accessTokenColumn, serverIDColumn, passwordColumn);
|
||||
queryByUUIDSQL = customQueryByUUIDSQL != null ? customQueryByUUIDSQL : String.format("SELECT %s FROM %s WHERE %s=? LIMIT 1", userInfoCols,
|
||||
table, uuidColumn);
|
||||
queryByUsernameSQL = customQueryByUsernameSQL != null ? customQueryByUsernameSQL : String.format("SELECT %s FROM %s WHERE %s=? LIMIT 1",
|
||||
userInfoCols, table, usernameColumn);
|
||||
queryByLoginSQL = customQueryByLoginSQL != null ? customQueryByLoginSQL : queryByUsernameSQL;
|
||||
|
||||
updateAuthSQL = customUpdateAuthSQL != null ? customUpdateAuthSQL : String.format("UPDATE %s SET %s=?, %s=NULL WHERE %s=?",
|
||||
table, accessTokenColumn, serverIDColumn, uuidColumn);
|
||||
updateServerIDSQL = customUpdateServerIdSQL != null ? customUpdateServerIdSQL : String.format("UPDATE %s SET %s=? WHERE %s=?",
|
||||
table, serverIDColumn, uuidColumn);
|
||||
}
|
||||
|
||||
protected boolean updateAuth(User user, String accessToken) throws IOException {
|
||||
try (Connection c = postgresSQLHolder.getConnection()) {
|
||||
PostgresSQLUser postgresSQLUser = (PostgresSQLUser) user;
|
||||
postgresSQLUser.accessToken = accessToken;
|
||||
PreparedStatement s = c.prepareStatement(updateAuthSQL);
|
||||
s.setString(1, accessToken);
|
||||
s.setString(2, user.getUUID().toString());
|
||||
s.setQueryTimeout(MySQLSourceConfig.TIMEOUT);
|
||||
return s.executeUpdate() > 0;
|
||||
} catch (SQLException e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean updateServerID(User user, String serverID) throws IOException {
|
||||
try (Connection c = postgresSQLHolder.getConnection()) {
|
||||
PostgresSQLUser postgresSQLUser = (PostgresSQLUser) user;
|
||||
postgresSQLUser.serverId = serverID;
|
||||
PreparedStatement s = c.prepareStatement(updateServerIDSQL);
|
||||
s.setString(1, serverID);
|
||||
s.setString(2, user.getUUID().toString());
|
||||
s.setQueryTimeout(MySQLSourceConfig.TIMEOUT);
|
||||
return s.executeUpdate() > 0;
|
||||
} catch (SQLException e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
postgresSQLHolder.close();
|
||||
}
|
||||
|
||||
private PostgresSQLUser constructUser(ResultSet set) throws SQLException {
|
||||
return set.next() ? new PostgresSQLUser(UUID.fromString(set.getString(uuidColumn)), set.getString(usernameColumn),
|
||||
set.getString(accessTokenColumn), set.getString(serverIDColumn), set.getString(passwordColumn), new ClientPermissions()) : null;
|
||||
}
|
||||
|
||||
private User query(String sql, String value) throws IOException {
|
||||
try (Connection c = postgresSQLHolder.getConnection()) {
|
||||
PreparedStatement s = c.prepareStatement(sql);
|
||||
s.setString(1, value);
|
||||
s.setQueryTimeout(MySQLSourceConfig.TIMEOUT);
|
||||
try (ResultSet set = s.executeQuery()) {
|
||||
return constructUser(set);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static class PostgresSQLUser implements User {
|
||||
protected UUID uuid;
|
||||
protected String username;
|
||||
protected String accessToken;
|
||||
protected String serverId;
|
||||
protected String password;
|
||||
protected ClientPermissions permissions;
|
||||
|
||||
public PostgresSQLUser(UUID uuid, String username, String accessToken, String serverId, String password, ClientPermissions permissions) {
|
||||
this.uuid = uuid;
|
||||
this.username = username;
|
||||
this.accessToken = accessToken;
|
||||
this.serverId = serverId;
|
||||
this.password = password;
|
||||
this.permissions = permissions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getUUID() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServerId() {
|
||||
return serverId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessToken() {
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClientPermissions getPermissions() {
|
||||
return permissions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PostgresSQLUser{" +
|
||||
"uuid=" + uuid +
|
||||
", username='" + username + '\'' +
|
||||
", permissions=" + permissions +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
public static class MySQLUserSession implements UserSession {
|
||||
private final PostgresSQLUser user;
|
||||
private final String id;
|
||||
|
||||
public MySQLUserSession(PostgresSQLUser user) {
|
||||
this.user = user;
|
||||
this.id = user.username;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getID() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public User getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getExpireIn() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -56,6 +56,10 @@ public synchronized void compile() {
|
|||
if (available != null) {
|
||||
return;
|
||||
}
|
||||
if (perms == null) {
|
||||
perms = new ArrayList<>(0);
|
||||
|
||||
}
|
||||
available = new ArrayList<>(perms.size());
|
||||
for (String a : perms) {
|
||||
available.add(new PermissionPattern(a));
|
||||
|
|
|
@ -481,7 +481,9 @@ public enum Version {
|
|||
MC1164("1.16.4", 754),
|
||||
MC1165("1.16.5", 754),
|
||||
MC117("1.17", 755),
|
||||
MC1171("1.17.1", 756);
|
||||
MC1171("1.17.1", 756),
|
||||
MC118("1.18", 757),
|
||||
MC1181("1.18.1", 757);
|
||||
private static final Map<String, Version> VERSIONS;
|
||||
|
||||
static {
|
||||
|
|
|
@ -80,7 +80,7 @@ public void enable(OptionalFile file, boolean manual, BiConsumer<OptionalFile, B
|
|||
}
|
||||
if (file.conflict != null) {
|
||||
for (OptionalFile conflict : file.conflict) {
|
||||
disable(conflict, null);
|
||||
disable(conflict, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ public final class Version implements Comparable<Version> {
|
|||
|
||||
public static final int MAJOR = 5;
|
||||
public static final int MINOR = 2;
|
||||
public static final int PATCH = 6;
|
||||
public static final int PATCH = 7;
|
||||
public static final int BUILD = 1;
|
||||
public static final Version.Type RELEASE = Type.STABLE;
|
||||
public final int major;
|
||||
|
|
|
@ -430,11 +430,15 @@ public static Path resolveIncremental(Path dir, String name, String extension) {
|
|||
}
|
||||
|
||||
public static Path resolveJavaBin(Path javaDir) {
|
||||
return resolveJavaBin(javaDir, false);
|
||||
}
|
||||
|
||||
public static Path resolveJavaBin(Path javaDir, boolean isConsole) {
|
||||
// Get Java binaries path
|
||||
Path javaBinDir = (javaDir == null ? JVM_DIR : javaDir).resolve("bin");
|
||||
|
||||
// Verify has "javaw.exe" file
|
||||
if (!LogHelper.isDebugEnabled()) {
|
||||
if (!isConsole && !LogHelper.isDebugEnabled()) {
|
||||
Path javawExe = javaBinDir.resolve("javaw.exe");
|
||||
if (isFile(javawExe))
|
||||
return javawExe;
|
||||
|
|
|
@ -141,14 +141,16 @@ public void run(String... args) throws Throwable {
|
|||
}
|
||||
Class<?> mainClass;
|
||||
if (config.classpath != null && !config.classpath.isEmpty()) {
|
||||
if (!ServerAgent.isAgentStarted()) {
|
||||
LogHelper.warning("JavaAgent not found. Using URLClassLoader");
|
||||
if(config.classLoaderConfig == ClientProfile.ClassLoaderConfig.LAUNCHER) {
|
||||
URL[] urls = config.classpath.stream().map(Paths::get).map(IOHelper::toURL).toArray(URL[]::new);
|
||||
ucp = new PublicURLClassLoader(urls);
|
||||
Thread.currentThread().setContextClassLoader(ucp);
|
||||
loader = ucp;
|
||||
} else {
|
||||
LogHelper.info("Found %d custom classpath elements", config.classpath.size());
|
||||
} else if(config.classLoaderConfig == ClientProfile.ClassLoaderConfig.AGENT) {
|
||||
if (!ServerAgent.isAgentStarted()) {
|
||||
LogHelper.error("JavaAgent not found");
|
||||
System.exit(-1);
|
||||
}
|
||||
for (String c : config.classpath)
|
||||
ServerAgent.addJVMClassPath(c);
|
||||
}
|
||||
|
@ -207,6 +209,7 @@ public Config getDefaultConfig() {
|
|||
newConfig.args = new ArrayList<>();
|
||||
newConfig.classpath = new ArrayList<>();
|
||||
newConfig.address = "ws://localhost:9274/api";
|
||||
newConfig.classLoaderConfig = ClientProfile.ClassLoaderConfig.SYSTEM_ARGS;
|
||||
newConfig.env = LauncherConfig.LauncherEnvironment.STD;
|
||||
return newConfig;
|
||||
}
|
||||
|
@ -219,6 +222,7 @@ public static final class Config {
|
|||
public boolean autoloadLibraries;
|
||||
public String logFile;
|
||||
public List<String> classpath;
|
||||
public ClientProfile.ClassLoaderConfig classLoaderConfig;
|
||||
public String librariesDir;
|
||||
public String mainclass;
|
||||
public List<String> args;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package pro.gravit.launcher.server.setup;
|
||||
|
||||
import pro.gravit.launcher.profiles.ClientProfile;
|
||||
import pro.gravit.launcher.request.Request;
|
||||
import pro.gravit.launcher.request.websockets.StdWebSocketService;
|
||||
import pro.gravit.launcher.server.ServerWrapper;
|
||||
|
@ -57,6 +58,7 @@ public void run() throws Exception {
|
|||
System.out.println("Print your server name:");
|
||||
wrapper.config.serverName = commands.commandHandler.readLine();
|
||||
wrapper.config.mainclass = mainClassName;
|
||||
boolean altMode = false;
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
if(!Request.isAvailable() || Request.getRequestService().isClosed()) {
|
||||
System.out.println("Print launchserver websocket host( ws://host:port/api ):");
|
||||
|
@ -85,6 +87,12 @@ public void run() throws Exception {
|
|||
}
|
||||
}
|
||||
}
|
||||
if(wrapper.profile != null && wrapper.profile.getVersion().compareTo(ClientProfile.Version.MC118) >= 0) {
|
||||
LogHelper.info("Switch to alternative start mode (1.18)");
|
||||
wrapper.config.classpath.add(jarName);
|
||||
wrapper.config.classLoaderConfig = ClientProfile.ClassLoaderConfig.LAUNCHER;
|
||||
altMode = true;
|
||||
}
|
||||
wrapper.saveConfig();
|
||||
LogHelper.info("Generate start script");
|
||||
Path startScript;
|
||||
|
@ -99,8 +107,9 @@ public void run() throws Exception {
|
|||
if (JVMHelper.OS_TYPE == JVMHelper.OS.LINUX) {
|
||||
writer.append("#!/bin/bash\n\n");
|
||||
}
|
||||
writer.append(IOHelper.resolveJavaBin(Paths.get(System.getProperty("java.home"))).toAbsolutePath().toString());
|
||||
writer.append(" ");
|
||||
writer.append("\"");
|
||||
writer.append(IOHelper.resolveJavaBin(Paths.get(System.getProperty("java.home")), true).toAbsolutePath().toString());
|
||||
writer.append("\" ");
|
||||
if (mainClassName.contains("bungee")) {
|
||||
LogHelper.info("Found BungeeCord mainclass. Modules dir change to modules_srv");
|
||||
writer.append(JVMHelper.jvmProperty("serverwrapper.modulesDir", "modules_srv"));
|
||||
|
@ -115,10 +124,12 @@ public void run() throws Exception {
|
|||
writer.append("-cp ");
|
||||
String pathServerWrapper = IOHelper.getCodeSource(ServerWrapper.class).getFileName().toString();
|
||||
writer.append(pathServerWrapper);
|
||||
if (JVMHelper.OS_TYPE == JVMHelper.OS.MUSTDIE) {
|
||||
writer.append(";");
|
||||
} else writer.append(":");
|
||||
writer.append(jarName);
|
||||
if(!altMode) {
|
||||
if (JVMHelper.OS_TYPE == JVMHelper.OS.MUSTDIE) {
|
||||
writer.append(";");
|
||||
} else writer.append(":");
|
||||
writer.append(jarName);
|
||||
}
|
||||
writer.append(" ");
|
||||
writer.append(ServerWrapper.class.getName());
|
||||
writer.append("\n");
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
id 'org.openjfx.javafxplugin' version '0.0.10' apply false
|
||||
}
|
||||
group = 'pro.gravit.launcher'
|
||||
version = '5.2.6 '
|
||||
version = '5.2.7'
|
||||
|
||||
apply from: 'props.gradle'
|
||||
|
||||
|
|
18
props.gradle
18
props.gradle
|
@ -1,19 +1,19 @@
|
|||
project.ext {
|
||||
verAsm = '9.2'
|
||||
verNetty = '4.1.68.Final'
|
||||
verOshiCore = '5.8.0'
|
||||
verJunit = '5.7.2'
|
||||
verNetty = '4.1.70.Final'
|
||||
verOshiCore = '5.8.5'
|
||||
verJunit = '5.8.2'
|
||||
verGuavaC = '30.1.1-jre'
|
||||
verJansi = '2.3.4'
|
||||
verJline = '3.20.0'
|
||||
verJline = '3.21.0'
|
||||
verJwt = '0.11.2'
|
||||
verBcprov = '1.69'
|
||||
verBcprov = '1.70'
|
||||
verGson = '2.8.9'
|
||||
verBcpkix = '1.69'
|
||||
verBcpkix = '1.70'
|
||||
verSlf4j = '1.7.32'
|
||||
verLog4j = '2.14.1'
|
||||
verMySQLConn = '8.0.26'
|
||||
verPostgreSQLConn = '42.2.24'
|
||||
verLog4j = '2.15.0'
|
||||
verMySQLConn = '8.0.27'
|
||||
verPostgreSQLConn = '42.3.1'
|
||||
verProguard = '7.2.0-beta2'
|
||||
verLaunch4j = '3.14'
|
||||
verHibernate = '5.5.6.Final'
|
||||
|
|
Loading…
Reference in a new issue