From d4b2a1fa2f69a959a15d0051aa22898fcbcbed96 Mon Sep 17 00:00:00 2001 From: Sebastian Reddig Date: Tue, 27 Jan 2026 21:40:58 +0100 Subject: [PATCH] refactor: Separate functions for encryption and decryption to HoEncryption --- src/main/java/core/net/Connector.java | 12 +-- src/main/java/core/net/login/OAuthDialog.java | 15 ++- src/main/java/core/util/HOEncryption.java | 77 +++++++++++++++ src/main/java/core/util/Helper.java | 69 ------------- src/test/java/core/util/HOEncryptionTest.java | 99 +++++++++++++++++++ 5 files changed, 188 insertions(+), 84 deletions(-) create mode 100644 src/main/java/core/util/HOEncryption.java create mode 100644 src/test/java/core/util/HOEncryptionTest.java diff --git a/src/main/java/core/net/Connector.java b/src/main/java/core/net/Connector.java index 1255fa3d4..3db507f37 100644 --- a/src/main/java/core/net/Connector.java +++ b/src/main/java/core/net/Connector.java @@ -54,8 +54,8 @@ public class Connector { * Creates a new instance of Connector. */ private Connector() { - m_OAService = new ServiceBuilder(Helper.decryptString(CONSUMER_KEY)) - .apiSecret(Helper.decryptString(CONSUMER_SECRET)) + m_OAService = new ServiceBuilder(HOEncryption.decryptString(CONSUMER_KEY)) + .apiSecret(HOEncryption.decryptString(CONSUMER_SECRET)) .build(HattrickAPI.instance()); @@ -63,8 +63,8 @@ private Connector() { } private OAuth1AccessToken createOAAccessToken() { - return new OAuth1AccessToken(Helper.decryptString(UserParameter.instance().AccessToken), - Helper.decryptString(UserParameter.instance().TokenSecret)); + return new OAuth1AccessToken(HOEncryption.decryptString(UserParameter.instance().AccessToken), + HOEncryption.decryptString(UserParameter.instance().TokenSecret)); } /** @@ -778,8 +778,8 @@ public InputStream postWebFileWithBodyParameters(String surl, Map data() { + return Stream.of( + of("", ""), + of("01234567890", "*),+.-0/21*"), + of("ABCDEFGHIJLKMNOPQRSTUVWXQZ", "9<;>=@?BADFCEHGJILKNMPORIT"), + of("abcdefghijlkmnopqrstuvwxqz", "Y~[^]`_badfcehgjilknmporit"), + of("HO", "BG"), + of("HattrickOrganizer", "BYnnla[cGl_Yhat]l") + ); + } + + private static Stream notEncryptableCharacters() { + return Stream.of( + of(","), + of("."), + of("-"), + of(";"), + of(":"), + of("_"), + of("!"), + of("\""), + of("§"), + of("$"), + of("%"), + of("&"), + of("/"), + of("("), + of(")"), + of("="), + of("?"), + of("`"), + of("²"), + of("³"), + of("{"), + of("["), + of("]"), + of("}"), + of("\\"), + of("¸"), + of("+"), + of("*"), + of("~"), + of("#"), + of("'"), + of("|"), + of("<"), + of(">"), + of("^"), + of("°"), + of("€"), + of("@"), + of(" ") + ); + } + + @ParameterizedTest + @MethodSource("data") + void cryptString(String cleartext, String ciphertext) { + assertThat(HOEncryption.cryptString(cleartext)).isEqualTo(ciphertext); + } + + @Test + void cryptString_with_null_result_is_empty() { + assertThat(HOEncryption.cryptString(null)).isEqualTo(StringUtils.EMPTY); + } + + @ParameterizedTest + @MethodSource("data") + void decryptString(String cleartext, String ciphertext) { + assertThat(HOEncryption.decryptString(ciphertext)).isEqualTo(cleartext); + } + + @Test + void decryptString_with_null_result_is_empty() { + assertThat(HOEncryption.decryptString(null)).isEqualTo(StringUtils.EMPTY); + } + + @ParameterizedTest + @MethodSource("notEncryptableCharacters") + void cryptString_not_allowed_characters_result_is_null(String notAllowedCharacter) { + assertThat(StringUtils.length(notAllowedCharacter)).isEqualTo(1); + assertThat(HOEncryption.cryptString(notAllowedCharacter)).isNull(); + } +}