diff --git a/Mage.Server/src/main/java/mage/server/AuthorizedUserRepository.java b/Mage.Server/src/main/java/mage/server/AuthorizedUserRepository.java index cce4b1eef1f0..a28932e1ef13 100644 --- a/Mage.Server/src/main/java/mage/server/AuthorizedUserRepository.java +++ b/Mage.Server/src/main/java/mage/server/AuthorizedUserRepository.java @@ -32,7 +32,7 @@ public class AuthorizedUserRepository { private static final AuthorizedUserRepository instance; static { - instance = new AuthorizedUserRepository(DatabaseUtils.prepareH2Connection(DatabaseUtils.DB_NAME_USERS, false)); + instance = new AuthorizedUserRepository(DatabaseUtils.prepareSqliteConnection(DatabaseUtils.DB_NAME_USERS)); } private Dao usersDao; @@ -42,6 +42,7 @@ public AuthorizedUserRepository(String connectionString) { if (!file.exists()) { file.mkdirs(); } + try { ConnectionSource connectionSource = new JdbcConnectionSource(connectionString); TableUtils.createTableIfNotExists(connectionSource, AuthorizedUser.class); diff --git a/Mage.Server/src/main/java/mage/server/MageServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java index b6d4c23ae51c..b897a693bc59 100644 --- a/Mage.Server/src/main/java/mage/server/MageServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java @@ -83,7 +83,7 @@ static private String generateAuthToken() { @Override public boolean authSendTokenToEmail(String sessionId, String email) throws MageException { - if (!managerFactory.configSettings().isAuthenticationActivated()) { + if (!managerFactory.configSettings().isRegistrationEnabled()) { sendErrorMessageToClient(sessionId, Session.REGISTRATION_DISABLED_MESSAGE); return false; } @@ -115,7 +115,7 @@ public boolean authSendTokenToEmail(String sessionId, String email) throws MageE @Override public boolean authResetPassword(String sessionId, String email, String authToken, String password) throws MageException { - if (!managerFactory.configSettings().isAuthenticationActivated()) { + if (!managerFactory.configSettings().isRegistrationEnabled()) { sendErrorMessageToClient(sessionId, Session.REGISTRATION_DISABLED_MESSAGE); return false; } diff --git a/Mage.Server/src/main/java/mage/server/Main.java b/Mage.Server/src/main/java/mage/server/Main.java index 9503aacb383b..dff364a03be5 100644 --- a/Mage.Server/src/main/java/mage/server/Main.java +++ b/Mage.Server/src/main/java/mage/server/Main.java @@ -138,7 +138,7 @@ public static void main(String[] args) { final ConfigWrapper config = new ConfigWrapper(ConfigFactory.loadFromFile(configPath)); - if (config.isAuthenticationActivated()) { + if (config.isRegistrationEnabled() || config.shouldCheckUsers()) { logger.info("Check authorized user DB version ..."); if (!AuthorizedUserRepository.getInstance().checkAlterAndMigrateAuthorizedUser()) { logger.fatal("Failed to start server."); @@ -260,8 +260,8 @@ public static void main(String[] args) { logger.info("Config - max pool size : " + config.getMaxPoolSize()); logger.info("Config - num accp.threads: " + config.getNumAcceptThreads()); logger.info("Config - second.bind port: " + config.getSecondaryBindPort()); - logger.info("Config - users registr.: " + (config.isAuthenticationActivated() ? "true" : "false")); - logger.info("Config - users anon: " + (!config.isAuthenticationActivated() ? "true" : "false")); + logger.info("Config - reg. enabled : " + (config.isRegistrationEnabled() ? "true" : "false")); + logger.info("Config - check users : " + (config.shouldCheckUsers() ? "true" : "false")); logger.info("Config - mailgun api key : " + config.getMailgunApiKey()); logger.info("Config - mailgun domain : " + config.getMailgunDomain()); logger.info("Config - mail smtp Host : " + config.getMailSmtpHost()); diff --git a/Mage.Server/src/main/java/mage/server/Session.java b/Mage.Server/src/main/java/mage/server/Session.java index a7dde925fdfa..de2b9c05ca09 100644 --- a/Mage.Server/src/main/java/mage/server/Session.java +++ b/Mage.Server/src/main/java/mage/server/Session.java @@ -85,7 +85,7 @@ public Session(ManagerFactory managerFactory, String sessionId, InvokerCallbackH } public String registerUser(String userName, String password, String email) { - if (!managerFactory.configSettings().isAuthenticationActivated()) { + if (!managerFactory.configSettings().isRegistrationEnabled()) { String returnMessage = REGISTRATION_DISABLED_MESSAGE; sendErrorMessageToClient(returnMessage); return returnMessage; @@ -242,7 +242,7 @@ public String connectUserHandling(String userName, String password, String resto // find auth user AuthorizedUser authorizedUser = null; - if (managerFactory.configSettings().isAuthenticationActivated()) { + if (managerFactory.configSettings().shouldCheckUsers()) { authorizedUser = AuthorizedUserRepository.getInstance().getByName(userName); String errorMsg = "Wrong username or password. You must register your account first."; if (authorizedUser == null) { @@ -276,8 +276,8 @@ public String connectUserHandling(String userName, String password, String resto if (newUser == null) { User anotherUser = managerFactory.userManager().getUserByName(userName).orElse(null); if (anotherUser != null) { - boolean canDisconnectAuthDueAnotherInstance = managerFactory.configSettings().isAuthenticationActivated(); - boolean canDisconnectAnonDueSameHost = !managerFactory.configSettings().isAuthenticationActivated() + boolean canDisconnectAuthDueAnotherInstance = managerFactory.configSettings().shouldCheckUsers(); + boolean canDisconnectAnonDueSameHost = !managerFactory.configSettings().shouldCheckUsers() && ANON_IDENTIFY_BY_HOST && Objects.equals(anotherUser.getHost(), host); boolean canDisconnectAnyDueSessionRestore = Objects.equals(restoreSessionId, anotherUser.getRestoreSessionId()); diff --git a/Mage.Server/src/main/java/mage/server/managers/ConfigSettings.java b/Mage.Server/src/main/java/mage/server/managers/ConfigSettings.java index be6d6c6c23dd..eb6f9619b6e5 100644 --- a/Mage.Server/src/main/java/mage/server/managers/ConfigSettings.java +++ b/Mage.Server/src/main/java/mage/server/managers/ConfigSettings.java @@ -42,7 +42,7 @@ public interface ConfigSettings { Boolean isSaveGameActivated(); - Boolean isAuthenticationActivated(); + Boolean isRegistrationEnabled(); String getGoogleAccount(); @@ -69,4 +69,6 @@ public interface ConfigSettings { List getDraftCubes(); List getDeckTypes(); + + Boolean shouldCheckUsers(); } diff --git a/Mage.Server/src/main/java/mage/server/util/Config.xsd b/Mage.Server/src/main/java/mage/server/util/Config.xsd index bc0ab04a6786..eec2fbdeb924 100644 --- a/Mage.Server/src/main/java/mage/server/util/Config.xsd +++ b/Mage.Server/src/main/java/mage/server/util/Config.xsd @@ -31,6 +31,7 @@ + diff --git a/Mage.Server/src/main/java/mage/server/util/ConfigWrapper.java b/Mage.Server/src/main/java/mage/server/util/ConfigWrapper.java index 20be1a642562..817853814d09 100644 --- a/Mage.Server/src/main/java/mage/server/util/ConfigWrapper.java +++ b/Mage.Server/src/main/java/mage/server/util/ConfigWrapper.java @@ -87,8 +87,12 @@ public Boolean isSaveGameActivated() { return config.getServer().isSaveGameActivated(); } - public Boolean isAuthenticationActivated() { - return config.getServer().isAuthenticationActivated(); + public Boolean isRegistrationEnabled() { + return config.getServer().isRegistrationEnabled(); + } + + public Boolean shouldCheckUsers() { + return config.getServer().isCheckUsers(); } public String getGoogleAccount() { diff --git a/Mage.Server/src/main/xml-resources/jaxb/Config/Config.xsd b/Mage.Server/src/main/xml-resources/jaxb/Config/Config.xsd index ac33721e7cbb..00ec9eb3199c 100644 --- a/Mage.Server/src/main/xml-resources/jaxb/Config/Config.xsd +++ b/Mage.Server/src/main/xml-resources/jaxb/Config/Config.xsd @@ -35,7 +35,6 @@ - @@ -44,6 +43,8 @@ + + diff --git a/Mage.Server/src/test/java/mage/server/util/ConfigWrapperTest.java b/Mage.Server/src/test/java/mage/server/util/ConfigWrapperTest.java index c8a80c34c4ce..4fc6bfffcf92 100644 --- a/Mage.Server/src/test/java/mage/server/util/ConfigWrapperTest.java +++ b/Mage.Server/src/test/java/mage/server/util/ConfigWrapperTest.java @@ -43,7 +43,8 @@ static class ConfigBuilder extends FluentBuilder { public int maxPasswordLength; public String maxAiOpponents; public boolean saveGameActivated; - public boolean authenticationActivated; + public boolean shouldCheckUsers; + public boolean registrationEnabled; public String googleAccount; public String mailgunApiKey; public String mailgunDomain; @@ -94,7 +95,8 @@ private Server makeServer() { server.setMaxPasswordLength(bi(maxPasswordLength)); server.setMaxAiOpponents(maxAiOpponents); server.setSaveGameActivated(saveGameActivated); - server.setAuthenticationActivated(authenticationActivated); + server.setRegistrationEnabled(registrationEnabled); + server.setCheckUsers(shouldCheckUsers); server.setGoogleAccount(googleAccount); server.setMailgunApiKey(mailgunApiKey); server.setMailgunDomain(mailgunDomain); @@ -171,7 +173,8 @@ Stream assignmentFromServer() { testInt("max password length", c -> c.maxPasswordLength = expectedPositiveInt, ConfigWrapper::getMaxPasswordLength), testString("max AI opponents", c -> c.maxAiOpponents = expectedString, ConfigWrapper::getMaxAiOpponents), testTrue("save game activated", c -> c.saveGameActivated = true, ConfigWrapper::isSaveGameActivated), - testTrue("authentication activated", c -> c.authenticationActivated = true, ConfigWrapper::isAuthenticationActivated), + testTrue("registration enabled", c -> c.registrationEnabled = true, ConfigWrapper::isRegistrationEnabled), + testTrue("should check users", c -> c.shouldCheckUsers = true, ConfigWrapper::shouldCheckUsers), testString("google account", c -> c.googleAccount = expectedString, ConfigWrapper::getGoogleAccount), testString("mailgun api key", c -> c.mailgunApiKey = expectedString, ConfigWrapper::getMailgunApiKey), testString("mailgun domain", c -> c.mailgunDomain = expectedString, ConfigWrapper::getMailgunDomain), diff --git a/Mage/src/main/java/mage/cards/repository/DatabaseUtils.java b/Mage/src/main/java/mage/cards/repository/DatabaseUtils.java index 1c94a2a3996f..39bb2392153a 100644 --- a/Mage/src/main/java/mage/cards/repository/DatabaseUtils.java +++ b/Mage/src/main/java/mage/cards/repository/DatabaseUtils.java @@ -12,7 +12,7 @@ public class DatabaseUtils { // warning, do not change names or db format // h2 public static final String DB_NAME_FEEDBACK = "feedback.h2"; - public static final String DB_NAME_USERS = "authorized_user.h2"; + public static final String DB_NAME_USERS = "authorized_users.db"; public static final String DB_NAME_CARDS = "cards.h2"; // sqlite (usage reason: h2 database works bad with 1GB+ files and can break it) public static final String DB_NAME_RECORDS = "table_record.db";