diff --git a/devkit-core/build.gradle.kts b/devkit-core/build.gradle.kts index 4ad9fa6..7eee4fb 100644 --- a/devkit-core/build.gradle.kts +++ b/devkit-core/build.gradle.kts @@ -58,8 +58,8 @@ publishing { } scm { - connection = "scm:git:git://github.com:CodeCraftersCN/JDevKit.git" - developerConnection = "scm:git:git://github.com:CodeCraftersCN/JDevKit.git" + connection = "scm:git:git://github.com:OnixByte/JDevKit.git" + developerConnection = "scm:git:git://github.com:OnixByte/JDevKit.git" url = projectGithubUrl } diff --git a/devkit-core/src/main/java/cn/org/codecrafters/devkit/core/exceptions/NotImplementedException.java b/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/NotImplementedException.java similarity index 98% rename from devkit-core/src/main/java/cn/org/codecrafters/devkit/core/exceptions/NotImplementedException.java rename to devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/NotImplementedException.java index 095ae72..39af4b4 100644 --- a/devkit-core/src/main/java/cn/org/codecrafters/devkit/core/exceptions/NotImplementedException.java +++ b/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/NotImplementedException.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.devkit.core.exceptions; +package com.onixbyte.devkit.core.exceptions; /** * The {@code NotImplementedException} class is a custom runtime exception diff --git a/devkit-core/src/main/java/cn/org/codecrafters/devkit/core/exceptions/package-info.java b/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/package-info.java similarity index 93% rename from devkit-core/src/main/java/cn/org/codecrafters/devkit/core/exceptions/package-info.java rename to devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/package-info.java index dfac4fe..fa691c4 100644 --- a/devkit-core/src/main/java/cn/org/codecrafters/devkit/core/exceptions/package-info.java +++ b/devkit-core/src/main/java/com/onixbyte/devkit/core/exceptions/package-info.java @@ -21,4 +21,4 @@ * @author Zihlu Wang * @since 1.0.0 */ -package cn.org.codecrafters.devkit.core.exceptions; \ No newline at end of file +package com.onixbyte.devkit.core.exceptions; \ No newline at end of file diff --git a/devkit-core/src/main/java/cn/org/codecrafters/devkit/core/package-info.java b/devkit-core/src/main/java/com/onixbyte/devkit/core/package-info.java similarity index 97% rename from devkit-core/src/main/java/cn/org/codecrafters/devkit/core/package-info.java rename to devkit-core/src/main/java/com/onixbyte/devkit/core/package-info.java index a7e930f..145ca20 100644 --- a/devkit-core/src/main/java/cn/org/codecrafters/devkit/core/package-info.java +++ b/devkit-core/src/main/java/com/onixbyte/devkit/core/package-info.java @@ -40,4 +40,4 @@ * * @since 1.0.0 */ -package cn.org.codecrafters.devkit.core; \ No newline at end of file +package com.onixbyte.devkit.core; \ No newline at end of file diff --git a/devkit-core/src/main/java/cn/org/codecrafters/devkit/package-info.java b/devkit-core/src/main/java/com/onixbyte/devkit/package-info.java similarity index 97% rename from devkit-core/src/main/java/cn/org/codecrafters/devkit/package-info.java rename to devkit-core/src/main/java/com/onixbyte/devkit/package-info.java index 90647f4..36345b7 100644 --- a/devkit-core/src/main/java/cn/org/codecrafters/devkit/package-info.java +++ b/devkit-core/src/main/java/com/onixbyte/devkit/package-info.java @@ -39,4 +39,4 @@ * * @since 1.0.0 */ -package cn.org.codecrafters.devkit; \ No newline at end of file +package com.onixbyte.devkit; \ No newline at end of file diff --git a/devkit-utils/README.md b/devkit-utils/README.md index d87e9c3..540284a 100644 --- a/devkit-utils/README.md +++ b/devkit-utils/README.md @@ -51,7 +51,7 @@ implementation 'cn.org.codecrafters:devkit-utils:${devkit-utils.version}' If you are trying to encode a string to Base64 string or decode a Base64 string to normal string, then you can try this: ```java -import cn.org.codecrafters.devkit.utils.Base64Util; +import utils.com.onixbyte.devkit.Base64Util; // To reduce sample codes, let me use the simplified main method that is upcoming in Java 21 void main(String... args) { @@ -68,7 +68,7 @@ void main(String... args) { I believe those `if...else...` blocks make you headache, and Java imported lambda since Java 8, why not try to replace those `if...else` with lambda expressions? ```java -import cn.org.codecrafters.devkit.utils.BranchUtil; +import utils.com.onixbyte.devkit.BranchUtil; void main(String... args) { var a = 1; @@ -106,7 +106,7 @@ If you have faced high-precision mathematical calculation in Java, you might kno In Java, we usually do high-precision mathematical calculation with `BigDecimal` which is quite tricky when using it. ```java -import cn.org.codecrafters.devkit.utils.ChainedCalcUtil; +import utils.com.onixbyte.devkit.ChainedCalcUtil; void main(String... args) { // If you are trying to calculate the expression of 1 * 2 / 2 - 3 + 4 @@ -133,7 +133,7 @@ This `HashUtil` supports these following hash or message digest algorithms: If you want to run a hash calculation to a string, you can use the following codes: ```java -import cn.org.codecrafters.devkit.utils.HashUtil; +import utils.com.onixbyte.devkit.HashUtil; void main(String... args) { var plaintext = "This is a plain text"; @@ -156,7 +156,7 @@ Imagine you are developing a website where users can register an account and sto In order to store the Map in a database, you need to convert the Map to an Object. An Object is a generic data type that can store any type of data. ```java -import cn.org.codecrafters.devkit.utils.MapUtil; +import utils.com.onixbyte.devkit.MapUtil; class Data { private String name; diff --git a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/AesUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/AesUtil.java similarity index 95% rename from devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/AesUtil.java rename to devkit-utils/src/main/java/com/onixbyte/devkit/utils/AesUtil.java index 6ccc4ce..23d2dbf 100644 --- a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/AesUtil.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/AesUtil.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.devkit.utils; +package com.onixbyte.devkit.utils; import lombok.extern.slf4j.Slf4j; @@ -44,13 +44,6 @@ import java.util.UUID; @Slf4j public final class AesUtil { - private AesUtil() { - } - - private static final String AES = "AES"; - - private static final String AES_CBC_CIPHER = "AES/CBC/PKCS5Padding"; - /** * Encrypts the data using the AES algorithm with the given secret. * @@ -133,4 +126,20 @@ public final class AesUtil { return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 16); } + /** + * Private constructor will protect this class from being instantiated. + */ + private AesUtil() { + } + + /** + * The algorithm AES. + */ + private static final String AES = "AES"; + + /** + * The algorithm AES/CBC/PKCS5Padding. + */ + private static final String AES_CBC_CIPHER = "AES/CBC/PKCS5Padding"; + } diff --git a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/Base64Util.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/Base64Util.java similarity index 99% rename from devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/Base64Util.java rename to devkit-utils/src/main/java/com/onixbyte/devkit/utils/Base64Util.java index fb0a80c..a74dcba 100644 --- a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/Base64Util.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/Base64Util.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.devkit.utils; +package com.onixbyte.devkit.utils; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -56,14 +56,6 @@ import java.util.Objects; */ public final class Base64Util { - private static Base64.Encoder encoder; - - private static Base64.Decoder decoder; - - private static Base64.Encoder urlEncoder; - - private static Base64.Decoder urlDecoder; - /** * Ensure that there is only one Base64 Encoder. * @@ -210,4 +202,12 @@ public final class Base64Util { return decodeUrlComponents(value, StandardCharsets.UTF_8); } + private static Base64.Encoder encoder; + + private static Base64.Decoder decoder; + + private static Base64.Encoder urlEncoder; + + private static Base64.Decoder urlDecoder; + } \ No newline at end of file diff --git a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/BranchUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BranchUtil.java similarity index 99% rename from devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/BranchUtil.java rename to devkit-utils/src/main/java/com/onixbyte/devkit/utils/BranchUtil.java index 6b9b760..0c42c01 100644 --- a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/BranchUtil.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/BranchUtil.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.devkit.utils; +package com.onixbyte.devkit.utils; import java.util.Arrays; import java.util.Objects; @@ -77,11 +77,6 @@ import java.util.function.Supplier; */ public final class BranchUtil { - /** - * The final result of the boolean expression. - */ - private final boolean result; - /** * Create a {@code BranchUtil} instance. * @@ -239,4 +234,9 @@ public final class BranchUtil { handle(ifHandler, null); } + /** + * The final result of the boolean expression. + */ + private final boolean result; + } diff --git a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/ChainedCalcUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/ChainedCalcUtil.java similarity index 99% rename from devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/ChainedCalcUtil.java rename to devkit-utils/src/main/java/com/onixbyte/devkit/utils/ChainedCalcUtil.java index fc2358c..6b3a942 100644 --- a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/ChainedCalcUtil.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/ChainedCalcUtil.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.devkit.utils; +package com.onixbyte.devkit.utils; import lombok.Getter; @@ -95,12 +95,6 @@ import java.util.function.Function; @Getter public final class ChainedCalcUtil { - /** - * -- GETTER -- - * Returns the current value as a BigDecimal. - */ - private BigDecimal value; - /** * Creates a {@code ChainedCalcUtil} instance with the specified initial * value. @@ -359,4 +353,10 @@ public final class ChainedCalcUtil { return res; } + /** + * -- GETTER -- + * Returns the current value as a BigDecimal. + */ + private BigDecimal value; + } diff --git a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/HashUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/HashUtil.java similarity index 98% rename from devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/HashUtil.java rename to devkit-utils/src/main/java/com/onixbyte/devkit/utils/HashUtil.java index c12c9b1..76c4c25 100644 --- a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/HashUtil.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/HashUtil.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.devkit.utils; +package com.onixbyte.devkit.utils; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -69,48 +69,6 @@ import java.util.Optional; */ public final class HashUtil { - /** - * Private constructor to prevent instantiation - */ - private HashUtil() { - } - - /** - * Calculates the hash value of the specified string using the specified - * algorithm and charset. - * - * @param method the hash algorithm to use - * @param value the string to calculate the hash value for - * @param charset the charset to use for encoding the string (default is - * UTF-8 if null) - * @return the hash value as a hexadecimal string, or an empty string if - * the algorithm is not available - * @throws RuntimeException if an unknown algorithm name is provided - * (should not occur under controlled usage) - */ - private static String hash(String method, String value, Charset charset) { - try { - var messageDigest = MessageDigest.getInstance(method); - messageDigest.update(value.getBytes(charset)); - var bytes = messageDigest.digest(); - var builder = new StringBuilder(); - - for (var b : bytes) { - var str = Integer.toHexString(b & 0xff); - if (str.length() == 1) { - builder.append(0); - } - builder.append(str); - } - - return builder.toString(); - } catch (NoSuchAlgorithmException ignored) { - // This should not occur under controlled usage - // Only trusted algorithms are allowed - return ""; - } - } - /** * Calculates the MD2 hash value of the specified string using the given * charset. @@ -286,4 +244,46 @@ public final class HashUtil { return hash("SHA-512", value, StandardCharsets.UTF_8); } + /** + * Private constructor will protect this class from being instantiated. + */ + private HashUtil() { + } + + /** + * Calculates the hash value of the specified string using the specified + * algorithm and charset. + * + * @param method the hash algorithm to use + * @param value the string to calculate the hash value for + * @param charset the charset to use for encoding the string (default is + * UTF-8 if null) + * @return the hash value as a hexadecimal string, or an empty string if + * the algorithm is not available + * @throws RuntimeException if an unknown algorithm name is provided + * (should not occur under controlled usage) + */ + private static String hash(String method, String value, Charset charset) { + try { + var messageDigest = MessageDigest.getInstance(method); + messageDigest.update(value.getBytes(charset)); + var bytes = messageDigest.digest(); + var builder = new StringBuilder(); + + for (var b : bytes) { + var str = Integer.toHexString(b & 0xff); + if (str.length() == 1) { + builder.append(0); + } + builder.append(str); + } + + return builder.toString(); + } catch (NoSuchAlgorithmException ignored) { + // This should not occur under controlled usage + // Only trusted algorithms are allowed + return ""; + } + } + } diff --git a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/MapUtil.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/MapUtil.java similarity index 98% rename from devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/MapUtil.java rename to devkit-utils/src/main/java/com/onixbyte/devkit/utils/MapUtil.java index 68ab6d4..d81b54f 100644 --- a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/MapUtil.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/MapUtil.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.devkit.utils; +package com.onixbyte.devkit.utils; import lombok.extern.slf4j.Slf4j; @@ -37,12 +37,6 @@ import java.util.Map; @Slf4j public final class MapUtil { - /** - * Private constructor to prevent instantiation of MapUtil. - */ - private MapUtil() { - } - /** * Converts an object to a map by mapping the field names to their * corresponding values. @@ -219,4 +213,10 @@ public final class MapUtil { return String.valueOf(obj); } } + + /** + * Private constructor will protect this class from being instantiated. + */ + private MapUtil() { + } } diff --git a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/package-info.java b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/package-info.java similarity index 96% rename from devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/package-info.java rename to devkit-utils/src/main/java/com/onixbyte/devkit/utils/package-info.java index a32280e..3241026 100644 --- a/devkit-utils/src/main/java/cn/org/codecrafters/devkit/utils/package-info.java +++ b/devkit-utils/src/main/java/com/onixbyte/devkit/utils/package-info.java @@ -25,4 +25,4 @@ * @author Zihlu Wang * @since 1.0.0 */ -package cn.org.codecrafters.devkit.utils; \ No newline at end of file +package com.onixbyte.devkit.utils; \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 68a1400..408483d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,9 +26,9 @@ okhttpVersion=4.12.0 springVersion=6.1.3 springBootVersion=3.2.3 -buildGroupId=cn.org.codecrafters +buildGroupId=com.onixbyte buildVersion=1.4.0 -projectUrl=https://codecrafters.org.cn/JDevKit -projectGithubUrl=https://github.com/CodeCraftersCN/JDevKit +projectUrl=https://onixbyte.com/JDevKit +projectGithubUrl=https://github.com/OnixByte/JDevKit licenseName=The Apache License, Version 2.0 licenseUrl=https://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/guid/src/main/java/cn/org/codecrafters/guid/GuidCreator.java b/guid/src/main/java/com/onixbyte/guid/GuidCreator.java similarity index 97% rename from guid/src/main/java/cn/org/codecrafters/guid/GuidCreator.java rename to guid/src/main/java/com/onixbyte/guid/GuidCreator.java index 8208b26..affebe7 100644 --- a/guid/src/main/java/cn/org/codecrafters/guid/GuidCreator.java +++ b/guid/src/main/java/com/onixbyte/guid/GuidCreator.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.guid; +package com.onixbyte.guid; /** * The {@code GuidCreator} is a generic interface for generating globally unique diff --git a/guid/src/main/java/cn/org/codecrafters/guid/exceptions/TimingException.java b/guid/src/main/java/com/onixbyte/guid/exceptions/TimingException.java similarity index 97% rename from guid/src/main/java/cn/org/codecrafters/guid/exceptions/TimingException.java rename to guid/src/main/java/com/onixbyte/guid/exceptions/TimingException.java index 96a90ba..35de6e9 100644 --- a/guid/src/main/java/cn/org/codecrafters/guid/exceptions/TimingException.java +++ b/guid/src/main/java/com/onixbyte/guid/exceptions/TimingException.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.guid.exceptions; +package com.onixbyte.guid.exceptions; /** * The {@code TimingException} class represents an exception that is thrown diff --git a/guid/src/main/java/cn/org/codecrafters/guid/exceptions/package-info.java b/guid/src/main/java/com/onixbyte/guid/exceptions/package-info.java similarity index 93% rename from guid/src/main/java/cn/org/codecrafters/guid/exceptions/package-info.java rename to guid/src/main/java/com/onixbyte/guid/exceptions/package-info.java index e12ea58..e509f02 100644 --- a/guid/src/main/java/cn/org/codecrafters/guid/exceptions/package-info.java +++ b/guid/src/main/java/com/onixbyte/guid/exceptions/package-info.java @@ -21,7 +21,7 @@ * during the generation or processing of global unique identifiers (GUIDs). *

* The main exception class in this package is {@link - * cn.org.codecrafters.guid.exceptions.TimingException}, which is a runtime + * com.onixbyte.guid.exceptions.TimingException}, which is a runtime * exception and serves as the base exception for all other custom exceptions * related to GUID generation. *

@@ -38,4 +38,4 @@ * * @since 1.0.0 */ -package cn.org.codecrafters.guid.exceptions; \ No newline at end of file +package com.onixbyte.guid.exceptions; \ No newline at end of file diff --git a/guid/src/main/java/cn/org/codecrafters/guid/SnowflakeGuidCreator.java b/guid/src/main/java/com/onixbyte/guid/impl/SnowflakeGuidCreator.java similarity index 98% rename from guid/src/main/java/cn/org/codecrafters/guid/SnowflakeGuidCreator.java rename to guid/src/main/java/com/onixbyte/guid/impl/SnowflakeGuidCreator.java index a20de90..1278830 100644 --- a/guid/src/main/java/cn/org/codecrafters/guid/SnowflakeGuidCreator.java +++ b/guid/src/main/java/com/onixbyte/guid/impl/SnowflakeGuidCreator.java @@ -15,13 +15,13 @@ * limitations under the License. */ -package cn.org.codecrafters.guid; +package com.onixbyte.guid.impl; -import cn.org.codecrafters.guid.exceptions.TimingException; +import com.onixbyte.guid.GuidCreator; +import com.onixbyte.guid.exceptions.TimingException; import java.time.LocalDateTime; import java.time.ZoneId; -import java.time.ZoneOffset; /** * The {@code SnowflakeGuidCreator} generates unique identifiers using the @@ -49,48 +49,6 @@ import java.time.ZoneOffset; */ public final class SnowflakeGuidCreator implements GuidCreator { - /** - * Default custom epoch. - * - * @value 2015-01-01T00:00:00Z - */ - private static final long DEFAULT_CUSTOM_EPOCH = 1_420_070_400_000L; - - /** - * The start epoch timestamp to generate IDs from. - */ - private final long startEpoch; - - /** - * The number of bits reserved for the worker ID. - */ - private final long workerIdBits = 5L; - - /** - * The number of bits reserved for the data centre ID. - */ - private final long dataCentreIdBits = 5L; - - /** - * The worker ID assigned to this generator. - */ - private final long workerId; - - /** - * The data centre ID assigned to this generator. - */ - private final long dataCentreId; - - /** - * The current sequence number. - */ - private long sequence = 0L; - - /** - * The timestamp of the last generated ID. - */ - private long lastTimestamp = -1L; - /** * Constructs a SnowflakeGuidGenerator with the default start epoch and * custom worker ID, data centre ID. @@ -204,5 +162,48 @@ public final class SnowflakeGuidCreator implements GuidCreator { private long currentTimestamp() { return LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); } + + /** + * Default custom epoch. + * + * @value 2015-01-01T00:00:00Z + */ + private static final long DEFAULT_CUSTOM_EPOCH = 1_420_070_400_000L; + + /** + * The start epoch timestamp to generate IDs from. + */ + private final long startEpoch; + + /** + * The number of bits reserved for the worker ID. + */ + private final long workerIdBits = 5L; + + /** + * The number of bits reserved for the data centre ID. + */ + private final long dataCentreIdBits = 5L; + + /** + * The worker ID assigned to this generator. + */ + private final long workerId; + + /** + * The data centre ID assigned to this generator. + */ + private final long dataCentreId; + + /** + * The current sequence number. + */ + private long sequence = 0L; + + /** + * The timestamp of the last generated ID. + */ + private long lastTimestamp = -1L; + } diff --git a/guid/src/main/java/cn/org/codecrafters/guid/package-info.java b/guid/src/main/java/com/onixbyte/guid/package-info.java similarity index 97% rename from guid/src/main/java/cn/org/codecrafters/guid/package-info.java rename to guid/src/main/java/com/onixbyte/guid/package-info.java index a9e9def..3c8be71 100644 --- a/guid/src/main/java/cn/org/codecrafters/guid/package-info.java +++ b/guid/src/main/java/com/onixbyte/guid/package-info.java @@ -32,4 +32,4 @@ * * @since 1.0.0 */ -package cn.org.codecrafters.guid; \ No newline at end of file +package com.onixbyte.guid; \ No newline at end of file diff --git a/property-guard-spring-boot-starter/README.md b/property-guard-spring-boot-starter/README.md index baf2be1..51e9e52 100644 --- a/property-guard-spring-boot-starter/README.md +++ b/property-guard-spring-boot-starter/README.md @@ -48,12 +48,12 @@ implementation 'cn.org.codecrafters:property-guard-spring-boot-starter:${propert ## Usage -First, you need a 16-bit-long secret. If you don't have a good way to get a secret, you could consider using our `cn.org.codecrafters.devkit.utils.AesUtil` or `cn.org.codecrafters.simplejwt.SecretCreator` to create a secret. +First, you need a 16-bit-long secret. If you don't have a good way to get a secret, you could consider using our `utils.com.onixbyte.devkit.AesUtil` or `com.onixbyte.simplejwt.SecretCreator` to create a secret. For example: ```java -import cn.org.codecrafters.devkit.utils.AesUtil; -import cn.org.codecrafters.simplejwt.SecretCreator; +import utils.com.onixbyte.devkit.AesUtil; +import com.onixbyte.simplejwt.SecretCreator; class GenerateRandomKeySample { public static void main(String[] args) { @@ -66,7 +66,7 @@ class GenerateRandomKeySample { Then, remember this secret and encrypt the configuration properties that are required high security. For example: ```java -import cn.org.codecrafters.devkit.utils.AesUtil; +import utils.com.onixbyte.devkit.AesUtil; class EncryptSample { public static void main(String[] args) { diff --git a/property-guard-spring-boot-starter/src/main/java/cn/org/codecrafters/propertyguard/autoconfiguration/PropertyGuard.java b/property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java similarity index 96% rename from property-guard-spring-boot-starter/src/main/java/cn/org/codecrafters/propertyguard/autoconfiguration/PropertyGuard.java rename to property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java index c2ca6fb..da8fa06 100644 --- a/property-guard-spring-boot-starter/src/main/java/cn/org/codecrafters/propertyguard/autoconfiguration/PropertyGuard.java +++ b/property-guard-spring-boot-starter/src/main/java/com/onixbyte/propertyguard/autoconfiguration/PropertyGuard.java @@ -15,9 +15,9 @@ * limitations under the License. */ -package cn.org.codecrafters.propertyguard.autoconfiguration; +package com.onixbyte.propertyguard.autoconfiguration; -import cn.org.codecrafters.devkit.utils.AesUtil; +import com.onixbyte.devkit.utils.AesUtil; import org.springframework.boot.SpringApplication; import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.boot.env.OriginTrackedMapPropertySource; @@ -70,8 +70,6 @@ import java.util.Optional; */ public class PropertyGuard implements EnvironmentPostProcessor { - private final String PREFIX = "pg"; - /** * Process the encryption environment variables. * @@ -108,4 +106,6 @@ public class PropertyGuard implements EnvironmentPostProcessor { } } } + + private static final String PREFIX = "pg"; } diff --git a/property-guard-spring-boot-starter/src/main/resources/META-INF/spring.factories b/property-guard-spring-boot-starter/src/main/resources/META-INF/spring.factories index 82e039a..4545f73 100644 --- a/property-guard-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/property-guard-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1 +1 @@ -org.springframework.boot.env.EnvironmentPostProcessor=cn.org.codecrafters.propertyguard.autoconfiguration.PropertyGuard \ No newline at end of file +org.springframework.boot.env.EnvironmentPostProcessor=com.onixbyte.propertyguard.autoconfiguration.PropertyGuard \ No newline at end of file diff --git a/simple-jwt-authzero/README.md b/simple-jwt-authzero/README.md index 4c9f003..fbebcda 100644 --- a/simple-jwt-authzero/README.md +++ b/simple-jwt-authzero/README.md @@ -50,7 +50,7 @@ implementation 'cn.org.codecrafters:simple-jwt-authzero:${simple-jwt-authzero.ve ## Use the `AuthzeroTokenResolver` -We have implemented `TokenResolver` to make sure you can add JWT to your Java application as soon as possible. All you need to do is to create an instance of `cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver` and other operations to JWT could follow our instruction in [`simple-jwt-facade`](../simple-jwt-facade/README.md). +We have implemented `TokenResolver` to make sure you can add JWT to your Java application as soon as possible. All you need to do is to create an instance of `com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver` and other operations to JWT could follow our instruction in [`simple-jwt-facade`](../simple-jwt-facade/README.md). ## Contact diff --git a/simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/AuthzeroTokenResolver.java b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/AuthzeroTokenResolver.java similarity index 95% rename from simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/AuthzeroTokenResolver.java rename to simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/AuthzeroTokenResolver.java index 80d3eaa..48e9856 100644 --- a/simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/AuthzeroTokenResolver.java +++ b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/AuthzeroTokenResolver.java @@ -15,34 +15,29 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.authzero; +package com.onixbyte.simplejwt.authzero; -import cn.org.codecrafters.devkit.utils.Base64Util; -import cn.org.codecrafters.guid.GuidCreator; -import cn.org.codecrafters.simplejwt.SecretCreator; -import cn.org.codecrafters.simplejwt.TokenPayload; -import cn.org.codecrafters.simplejwt.TokenResolver; -import cn.org.codecrafters.simplejwt.annotations.ExcludeFromPayload; -import cn.org.codecrafters.simplejwt.annotations.TokenEnum; -import cn.org.codecrafters.simplejwt.authzero.config.AuthzeroTokenResolverConfig; -import cn.org.codecrafters.simplejwt.config.TokenResolverConfig; -import cn.org.codecrafters.simplejwt.constants.PredefinedKeys; -import cn.org.codecrafters.simplejwt.constants.TokenAlgorithm; +import com.onixbyte.devkit.utils.Base64Util; +import com.onixbyte.guid.GuidCreator; +import com.onixbyte.simplejwt.SecretCreator; +import com.onixbyte.simplejwt.TokenPayload; +import com.onixbyte.simplejwt.TokenResolver; +import com.onixbyte.simplejwt.annotations.ExcludeFromPayload; +import com.onixbyte.simplejwt.annotations.TokenEnum; +import com.onixbyte.simplejwt.authzero.config.AuthzeroTokenResolverConfig; +import com.onixbyte.simplejwt.constants.PredefinedKeys; +import com.onixbyte.simplejwt.constants.TokenAlgorithm; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.JWTVerifier; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; -import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.time.Duration; import java.time.LocalDateTime; @@ -51,7 +46,7 @@ import java.util.*; /** * The {@code AuthzeroTokenResolver} class is an implementation of the {@link - * cn.org.codecrafters.simplejwt.TokenResolver} interface. It uses the {@code + * TokenResolver} interface. It uses the {@code * com.auth0:java-jwt} library to handle JSON Web Token (JWT) resolution. This * resolver provides functionality to create, extract, verify, and renew JWT * tokens using various algorithms and custom payload data. @@ -104,34 +99,6 @@ import java.util.*; @Slf4j public class AuthzeroTokenResolver implements TokenResolver { - /** - * GuidCreator used for generating unique identifiers for "jti" claim in - * JWT tokens. - */ - private final GuidCreator jtiCreator; - - /** - * The algorithm used for signing and verifying JWT tokens. - */ - private final Algorithm algorithm; - - /** - * The issuer claim value to be included in JWT tokens. - */ - private final String issuer; - - /** - * The JSON Web Token resolver. - */ - private final JWTVerifier verifier; - - /** - * Jackson JSON handler. - */ - private final ObjectMapper objectMapper; - - private final AuthzeroTokenResolverConfig config = AuthzeroTokenResolverConfig.getInstance(); - /** * Creates a new instance of {@code AuthzeroTokenResolver} with the * provided configurations. @@ -150,7 +117,7 @@ public class AuthzeroTokenResolver implements TokenResolver { throw new IllegalArgumentException("A secret is required to build a JSON Web Token."); } - if (secret.length() <= 32) { + if (secret.length() < 32) { log.warn("The provided secret which owns {} characters is too weak. Please consider replacing it with a stronger one.", secret.length()); } @@ -224,104 +191,6 @@ public class AuthzeroTokenResolver implements TokenResolver { log.info("The secret has been set to {}.", secret); } - /** - * Builds the basic information of the JSON Web Token (JWT) using the - * provided parameters and adds it to the JWTCreator.Builder. - * - * @param subject the subject claim value to be included in the JWT - * @param audience an array of audience claim values to be included in - * the JWT - * @param expireAfter the duration after which the JWT will expire - * @param builder the JWTCreator.Builder instance to which the basic - * information will be added - */ - private void buildBasicInfo(JWTCreator.Builder builder, Duration expireAfter, String subject, String... audience) { - var now = LocalDateTime.now(); - - // bind issuer (iss) - builder.withIssuer(issuer); - // bind issued at (iat) - builder.withIssuedAt(Date.from(now.atZone(ZoneId.systemDefault()).toInstant())); - // bind not before (nbf) - builder.withNotBefore(Date.from(now.atZone(ZoneId.systemDefault()).toInstant())); - // bind audience (aud) - builder.withAudience(audience); - // bind subject (sub) - builder.withSubject(subject); - // bind expire at (exp) - builder.withExpiresAt(Date.from(now.plus(expireAfter).atZone(ZoneId.systemDefault()).toInstant())); - // bind JWT Id (jti) - builder.withJWTId(jtiCreator.nextId().toString()); - } - - /** - * Add a claim to a builder. - * - * @param builder the builder to build this JSON Web Token - * @param name the property name - * @param value the property value - */ - private void addClaim(JWTCreator.Builder builder, String name, Object value) { - if (Objects.nonNull(value)) { - if (value instanceof Boolean v) { - builder.withClaim(name, v); - } else if (value instanceof Double v) { - builder.withClaim(name, v); - } else if (value instanceof Float v) { - builder.withClaim(name, v.doubleValue()); - } else if (value instanceof Integer v) { - builder.withClaim(name, v); - } else if (value instanceof Long v) { - builder.withClaim(name, v); - } else if (value instanceof String v) { - builder.withClaim(name, v); - } else if (value instanceof Date v) { - builder.withClaim(name, v); - } else if (value instanceof List v) { - builder.withClaim(name, v); - } else { - log.warn(""" - Unable to determine the type of field {}, we will handle it as a String.""", name); - builder.withClaim(name, value.toString()); - } - } else { - builder.withNullClaim(name); - } - } - - /** - * Builds the custom claims of the JSON Web Token (JWT) using the provided - * Map of claims and adds them to the JWTCreator.Builder. - *

- * This method is used to add custom claims to the JWT. It takes a Map of - * claims, where each entry represents a custom claim name (key) and its - * corresponding value (value). The custom claims will be added to the JWT - * using the JWTCreator.Builder. - * - * @param claims a Map containing the custom claims to be added to the JWT - * @param builder the JWTCreator.Builder instance to which the custom - * claims will be added - */ - private void buildMapClaims(JWTCreator.Builder builder, Map claims) { - if (Objects.nonNull(claims)) { - for (var e : claims.entrySet()) { - addClaim(builder, e.getKey(), e.getValue()); - } - } - } - - /** - * Finish creating a token. - *

- * This is the final step of create a token, to sign this token. - * - * @param builder the builder to build this JWT - * @return the generated token as a {@code String} - */ - private String buildToken(JWTCreator.Builder builder) { - return builder.sign(algorithm); - } - /** * Creates a new token with the specified expiration duration, subject, and * audience. @@ -552,8 +421,137 @@ public class AuthzeroTokenResolver implements TokenResolver { return renew(oldToken, Duration.ofMinutes(30), payload); } + /** + * Builds the basic information of the JSON Web Token (JWT) using the + * provided parameters and adds it to the JWTCreator.Builder. + * + * @param subject the subject claim value to be included in the JWT + * @param audience an array of audience claim values to be included in + * the JWT + * @param expireAfter the duration after which the JWT will expire + * @param builder the JWTCreator.Builder instance to which the basic + * information will be added + */ + private void buildBasicInfo(JWTCreator.Builder builder, Duration expireAfter, String subject, String... audience) { + var now = LocalDateTime.now(); + + // bind issuer (iss) + builder.withIssuer(issuer); + // bind issued at (iat) + builder.withIssuedAt(Date.from(now.atZone(ZoneId.systemDefault()).toInstant())); + // bind not before (nbf) + builder.withNotBefore(Date.from(now.atZone(ZoneId.systemDefault()).toInstant())); + // bind audience (aud) + builder.withAudience(audience); + // bind subject (sub) + builder.withSubject(subject); + // bind expire at (exp) + builder.withExpiresAt(Date.from(now.plus(expireAfter).atZone(ZoneId.systemDefault()).toInstant())); + // bind JWT Id (jti) + builder.withJWTId(jtiCreator.nextId().toString()); + } + + /** + * Add a claim to a builder. + * + * @param builder the builder to build this JSON Web Token + * @param name the property name + * @param value the property value + */ + private void addClaim(JWTCreator.Builder builder, String name, Object value) { + if (Objects.nonNull(value)) { + if (value instanceof Boolean v) { + builder.withClaim(name, v); + } else if (value instanceof Double v) { + builder.withClaim(name, v); + } else if (value instanceof Float v) { + builder.withClaim(name, v.doubleValue()); + } else if (value instanceof Integer v) { + builder.withClaim(name, v); + } else if (value instanceof Long v) { + builder.withClaim(name, v); + } else if (value instanceof String v) { + builder.withClaim(name, v); + } else if (value instanceof Date v) { + builder.withClaim(name, v); + } else if (value instanceof List v) { + builder.withClaim(name, v); + } else { + log.warn(""" + Unable to determine the type of field {}, we will handle it as a String.""", name); + builder.withClaim(name, value.toString()); + } + } else { + builder.withNullClaim(name); + } + } + + /** + * Builds the custom claims of the JSON Web Token (JWT) using the provided + * Map of claims and adds them to the JWTCreator.Builder. + *

+ * This method is used to add custom claims to the JWT. It takes a Map of + * claims, where each entry represents a custom claim name (key) and its + * corresponding value (value). The custom claims will be added to the JWT + * using the JWTCreator.Builder. + * + * @param claims a Map containing the custom claims to be added to the JWT + * @param builder the JWTCreator.Builder instance to which the custom + * claims will be added + */ + private void buildMapClaims(JWTCreator.Builder builder, Map claims) { + if (Objects.nonNull(claims)) { + for (var e : claims.entrySet()) { + addClaim(builder, e.getKey(), e.getValue()); + } + } + } + + /** + * Finish creating a token. + *

+ * This is the final step of create a token, to sign this token. + * + * @param builder the builder to build this JWT + * @return the generated token as a {@code String} + */ + private String buildToken(JWTCreator.Builder builder) { + return builder.sign(algorithm); + } + + /** + * Default type reference for Map. + */ private static class MapTypeReference extends TypeReference> { MapTypeReference() { } } + + /** + * GuidCreator used for generating unique identifiers for "jti" claim in + * JWT tokens. + */ + private final GuidCreator jtiCreator; + + /** + * The algorithm used for signing and verifying JWT tokens. + */ + private final Algorithm algorithm; + + /** + * The issuer claim value to be included in JWT tokens. + */ + private final String issuer; + + /** + * The JSON Web Token resolver. + */ + private final JWTVerifier verifier; + + /** + * Jackson JSON handler. + */ + private final ObjectMapper objectMapper; + + private final AuthzeroTokenResolverConfig config = AuthzeroTokenResolverConfig.getInstance(); } diff --git a/simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/config/AuthzeroTokenResolverConfig.java b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/config/AuthzeroTokenResolverConfig.java similarity index 93% rename from simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/config/AuthzeroTokenResolverConfig.java rename to simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/config/AuthzeroTokenResolverConfig.java index 1f0751a..a276195 100644 --- a/simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/config/AuthzeroTokenResolverConfig.java +++ b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/config/AuthzeroTokenResolverConfig.java @@ -15,13 +15,13 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.authzero.config; +package com.onixbyte.simplejwt.authzero.config; -import cn.org.codecrafters.simplejwt.TokenResolver; -import cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver; -import cn.org.codecrafters.simplejwt.config.TokenResolverConfig; -import cn.org.codecrafters.simplejwt.constants.TokenAlgorithm; -import cn.org.codecrafters.simplejwt.exceptions.UnsupportedAlgorithmException; +import com.onixbyte.simplejwt.TokenResolver; +import com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver; +import com.onixbyte.simplejwt.config.TokenResolverConfig; +import com.onixbyte.simplejwt.constants.TokenAlgorithm; +import com.onixbyte.simplejwt.exceptions.UnsupportedAlgorithmException; import com.auth0.jwt.algorithms.Algorithm; import java.util.HashMap; @@ -62,42 +62,6 @@ import java.util.function.Function; */ public final class AuthzeroTokenResolverConfig implements TokenResolverConfig> { - /** - * Constructs a new instance of {@code AuthzeroTokenResolverConfig}. - *

- * The constructor is set as private to enforce the singleton pattern for - * this configuration class. Instances of - * {@code AuthzeroTokenResolverConfig} should be obtained through the - * {@link #getInstance()} method. - */ - private AuthzeroTokenResolverConfig() { - } - - /** - * The singleton instance of {@code AuthzeroTokenResolverConfig}. - *

- * This instance is used to ensure that only one instance of - * {@code AuthzeroTokenResolverConfig} is created and shared throughout the - * application. The singleton pattern is implemented to provide centralised - * configuration and avoid redundant object creation. - */ - private static AuthzeroTokenResolverConfig instance; - - /** - * The supported algorithms and their corresponding algorithm functions. - *

- * This map stores the supported algorithms as keys and their corresponding - * algorithm functions as values. The algorithm functions represent the - * functions used by the {@code com.auth0:java-jwt} library to handle the - * specific algorithms. The mapping is used to provide proper algorithm - * resolution and processing within the {@link AuthzeroTokenResolver}. - */ - private static final Map> SUPPORTED_ALGORITHMS = new HashMap<>() {{ - put(TokenAlgorithm.HS256, Algorithm::HMAC256); - put(TokenAlgorithm.HS384, Algorithm::HMAC384); - put(TokenAlgorithm.HS512, Algorithm::HMAC512); - }}; - /** * Gets the instance of {@code AuthzeroTokenResolverConfig}. *

@@ -140,4 +104,40 @@ public final class AuthzeroTokenResolverConfig implements TokenResolverConfig entry.get(algorithm)) .orElseThrow(() -> new UnsupportedAlgorithmException("The specified algorithm is not supported yet.")); } + + /** + * Constructs a new instance of {@code AuthzeroTokenResolverConfig}. + *

+ * The constructor is set as private to enforce the singleton pattern for + * this configuration class. Instances of + * {@code AuthzeroTokenResolverConfig} should be obtained through the + * {@link #getInstance()} method. + */ + private AuthzeroTokenResolverConfig() { + } + + /** + * The singleton instance of {@code AuthzeroTokenResolverConfig}. + *

+ * This instance is used to ensure that only one instance of + * {@code AuthzeroTokenResolverConfig} is created and shared throughout the + * application. The singleton pattern is implemented to provide centralised + * configuration and avoid redundant object creation. + */ + private static AuthzeroTokenResolverConfig instance; + + /** + * The supported algorithms and their corresponding algorithm functions. + *

+ * This map stores the supported algorithms as keys and their corresponding + * algorithm functions as values. The algorithm functions represent the + * functions used by the {@code com.auth0:java-jwt} library to handle the + * specific algorithms. The mapping is used to provide proper algorithm + * resolution and processing within the {@link AuthzeroTokenResolver}. + */ + private static final Map> SUPPORTED_ALGORITHMS = new HashMap<>() {{ + put(TokenAlgorithm.HS256, Algorithm::HMAC256); + put(TokenAlgorithm.HS384, Algorithm::HMAC384); + put(TokenAlgorithm.HS512, Algorithm::HMAC512); + }}; } diff --git a/simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/config/package-info.java b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/config/package-info.java similarity index 75% rename from simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/config/package-info.java rename to simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/config/package-info.java index 5d6a0ae..792933d 100644 --- a/simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/config/package-info.java +++ b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/config/package-info.java @@ -18,37 +18,37 @@ /** * The package {@code cn.org.codecrafters.simplejwt.authzero.config} contains * configuration classes related to the {@link - * cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver} + * com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver} * implementation. *

* The classes in this package provide configuration options and settings for - * the {@link cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver}, + * the {@link com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver}, * which is used for resolving JSON Web Tokens (JWT) using the Auth0 library. *

* The {@link - * cn.org.codecrafters.simplejwt.authzero.config.AuthzeroTokenResolverConfig} + * com.onixbyte.simplejwt.authzero.config.AuthzeroTokenResolverConfig} * class is a configuration class that defines the mapping between standard - * {@link cn.org.codecrafters.simplejwt.constants.TokenAlgorithm} and the + * {@link com.onixbyte.simplejwt.constants.TokenAlgorithm} and the * corresponding function implementation used by {@link - * cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver} for handling + * com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver} for handling * JWT algorithms. It enables developers to specify and customize the * algorithm functions according to the chosen JWT algorithm and the library * being used. *

* The configuration options in this package help developers integrate and * configure the {@link - * cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver} seamlessly + * com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver} seamlessly * into their Spring Boot applications. Developers can fine-tune the token * resolution process and customize algorithm handling to align with their * specific requirements and desired level of security. *

* It is recommended to explore the classes in this package to understand how * to configure and use the {@link - * cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver} effectively + * com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver} effectively * in the Spring Boot environment to handle JWT authentication and * authorisation securely and efficiently. * * @since 1.0.0 */ -package cn.org.codecrafters.simplejwt.authzero.config; \ No newline at end of file +package com.onixbyte.simplejwt.authzero.config; \ No newline at end of file diff --git a/simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/package-info.java b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/package-info.java similarity index 82% rename from simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/package-info.java rename to simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/package-info.java index 11df0aa..ac8e720 100644 --- a/simple-jwt-authzero/src/main/java/cn/org/codecrafters/simplejwt/authzero/package-info.java +++ b/simple-jwt-authzero/src/main/java/com/onixbyte/simplejwt/authzero/package-info.java @@ -25,15 +25,15 @@ * the {@code com.auth0:java-jwt} library. *

* The main class in this package is the {@link - * cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver}, which - * implements the {@link cn.org.codecrafters.simplejwt.TokenResolver} interface + * com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver}, which + * implements the {@link com.onixbyte.simplejwt.TokenResolver} interface * and uses the {@code com.auth0:java-jwt} library to handle JWT operations. It * provides the functionality to create, validate, and extract JWTs using the * {@code com.auth0:java-jwt} library. Developers can use this class as the * main token resolver in the Simple JWT project when integrating {@code * com.auth0:java-jwt} as the JWT management library. *

- * The {@link cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver} + * The {@link com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver} * relies on the {@code com.auth0:java-jwt} library to handle the underlying * JWT operations, including token creation, validation, and extraction. It * utilizes the {@code com.auth0:java-jwt} {@link @@ -41,12 +41,12 @@ * algorithms for JWT signing and verification. *

* To use the {@link - * cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver}, developers + * com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver}, developers * must provide the necessary configurations and dependencies, such as the - * {@link cn.org.codecrafters.guid.GuidCreator} for generating unique JWT IDs + * {@link com.onixbyte.guid.GuidCreator} for generating unique JWT IDs * (JTI), the supported algorithm function, the issuer name, and the secret key * used for token signing and validation. The {@link - * cn.org.codecrafters.simplejwt.authzero.config.AuthzeroTokenResolverConfig} + * com.onixbyte.simplejwt.authzero.config.AuthzeroTokenResolverConfig} * class provides a convenient way to configure these dependencies. *

* Developers using the {@code com.auth0:java-jwt} integration should be @@ -56,4 +56,4 @@ * * @since 1.0.0 */ -package cn.org.codecrafters.simplejwt.authzero; \ No newline at end of file +package com.onixbyte.simplejwt.authzero; \ No newline at end of file diff --git a/simple-jwt-authzero/src/test/java/cn/org/codecrafters/simplejwt/authzero/test/TestAuthzeroTokenResolver.java b/simple-jwt-authzero/src/test/java/com/onixbyte/simplejwt/authzero/test/TestAuthzeroTokenResolver.java similarity index 85% rename from simple-jwt-authzero/src/test/java/cn/org/codecrafters/simplejwt/authzero/test/TestAuthzeroTokenResolver.java rename to simple-jwt-authzero/src/test/java/com/onixbyte/simplejwt/authzero/test/TestAuthzeroTokenResolver.java index 52e2f18..c4461f5 100644 --- a/simple-jwt-authzero/src/test/java/cn/org/codecrafters/simplejwt/authzero/test/TestAuthzeroTokenResolver.java +++ b/simple-jwt-authzero/src/test/java/com/onixbyte/simplejwt/authzero/test/TestAuthzeroTokenResolver.java @@ -15,10 +15,10 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.authzero.test; +package com.onixbyte.simplejwt.authzero.test; -import cn.org.codecrafters.simplejwt.authzero.AuthzeroTokenResolver; -import cn.org.codecrafters.simplejwt.constants.TokenAlgorithm; +import com.onixbyte.simplejwt.authzero.AuthzeroTokenResolver; +import com.onixbyte.simplejwt.constants.TokenAlgorithm; import org.junit.jupiter.api.Test; import java.time.Duration; diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/SecretCreator.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/SecretCreator.java similarity index 97% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/SecretCreator.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/SecretCreator.java index 4f274ec..40c1fc7 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/SecretCreator.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/SecretCreator.java @@ -15,9 +15,9 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt; +package com.onixbyte.simplejwt; -import cn.org.codecrafters.simplejwt.exceptions.WeakSecretException; +import com.onixbyte.simplejwt.exceptions.WeakSecretException; import java.util.Random; @@ -32,36 +32,6 @@ import java.util.Random; */ public final class SecretCreator { - /** - * Private constructor to prevent instantiation - */ - private SecretCreator() { - } - - /** - * The string containing all lowercase characters that can be used to - * generate the secret. - */ - private static final String LOWERCASE_CHARACTERS = "abcdefghijklmnopqrstuvwxyz"; - - /** - * The string containing all uppercase characters that can be used to - * generate the secret. - */ - private static final String UPPERCASE_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - - /** - * The string containing all digit characters that can be used to generate - * the secret. - */ - private static final String DIGITS = "0123456789"; - - /** - * The string containing all special sign characters that can be used to - * generate the secret. - */ - private static final String SPECIAL_SIGNS = "!@#$%^&,*()_+-=,[]{}|;:,'\",.<>/?"; - /** * Generates a secure secret with the specified length and character sets. * @@ -153,4 +123,33 @@ public final class SecretCreator { return createSecret(length, false, false, false); } + /** + * Private constructor will protect this class from being instantiated. + */ + private SecretCreator() { + } + + /** + * The string containing all lowercase characters that can be used to + * generate the secret. + */ + private static final String LOWERCASE_CHARACTERS = "abcdefghijklmnopqrstuvwxyz"; + + /** + * The string containing all uppercase characters that can be used to + * generate the secret. + */ + private static final String UPPERCASE_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + /** + * The string containing all digit characters that can be used to generate + * the secret. + */ + private static final String DIGITS = "0123456789"; + + /** + * The string containing all special sign characters that can be used to + * generate the secret. + */ + private static final String SPECIAL_SIGNS = "!@#$%^&,*()_+-=,[]{}|;:,'\",.<>/?"; } diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/TokenPayload.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenPayload.java similarity index 97% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/TokenPayload.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenPayload.java index 02901f2..26c47ee 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/TokenPayload.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenPayload.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt; +package com.onixbyte.simplejwt; import java.util.Map; diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/TokenResolver.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenResolver.java similarity index 98% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/TokenResolver.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenResolver.java index d0df2cb..d88a89d 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/TokenResolver.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/TokenResolver.java @@ -15,9 +15,8 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt; +package com.onixbyte.simplejwt; -import java.lang.reflect.InvocationTargetException; import java.time.Duration; import java.util.Map; diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/annotations/ExcludeFromPayload.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/ExcludeFromPayload.java similarity index 97% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/annotations/ExcludeFromPayload.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/ExcludeFromPayload.java index 72dac57..614f33e 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/annotations/ExcludeFromPayload.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/ExcludeFromPayload.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.annotations; +package com.onixbyte.simplejwt.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/annotations/TokenEnum.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/TokenEnum.java similarity index 92% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/annotations/TokenEnum.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/TokenEnum.java index 2258b54..052fd3b 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/annotations/TokenEnum.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/TokenEnum.java @@ -15,9 +15,9 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.annotations; +package com.onixbyte.simplejwt.annotations; -import cn.org.codecrafters.simplejwt.constants.TokenDataType; +import com.onixbyte.simplejwt.constants.TokenDataType; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/annotations/package-info.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/package-info.java similarity index 95% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/annotations/package-info.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/package-info.java index 0aca24d..0d7926d 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/annotations/package-info.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/annotations/package-info.java @@ -24,4 +24,4 @@ * * @since 1.0.0 */ -package cn.org.codecrafters.simplejwt.annotations; \ No newline at end of file +package com.onixbyte.simplejwt.annotations; \ No newline at end of file diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/config/TokenResolverConfig.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/config/TokenResolverConfig.java similarity index 92% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/config/TokenResolverConfig.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/config/TokenResolverConfig.java index f29e198..4a257d5 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/config/TokenResolverConfig.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/config/TokenResolverConfig.java @@ -15,10 +15,10 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.config; +package com.onixbyte.simplejwt.config; -import cn.org.codecrafters.simplejwt.TokenResolver; -import cn.org.codecrafters.simplejwt.constants.TokenAlgorithm; +import com.onixbyte.simplejwt.TokenResolver; +import com.onixbyte.simplejwt.constants.TokenAlgorithm; /** * The {@code TokenResolverConfig} provides a mechanism to configure an diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/config/package-info.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/config/package-info.java similarity index 96% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/config/package-info.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/config/package-info.java index 97774c4..e845956 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/config/package-info.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/config/package-info.java @@ -29,4 +29,4 @@ * * @since 1.0.0 */ -package cn.org.codecrafters.simplejwt.config; \ No newline at end of file +package com.onixbyte.simplejwt.config; \ No newline at end of file diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/PredefinedKeys.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/PredefinedKeys.java similarity index 92% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/PredefinedKeys.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/PredefinedKeys.java index 2df9309..5eb5152 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/PredefinedKeys.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/PredefinedKeys.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.constants; +package com.onixbyte.simplejwt.constants; import java.util.List; @@ -88,11 +88,7 @@ public final class PredefinedKeys { public static final List KEYS = List.of(ISSUER, SUBJECT, AUDIENCE, EXPIRATION_TIME, NOT_BEFORE, ISSUED_AT, JWT_ID); /** - * Private constructor to prevent instantiation of the - * {@code PredefinedKeys} class. - *

- * This class is intended to be used as a utility class with only static - * constants and methods. + * Private constructor will protect this class from being instantiated. */ private PredefinedKeys() { } diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/TokenAlgorithm.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenAlgorithm.java similarity index 97% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/TokenAlgorithm.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenAlgorithm.java index 3b831fd..413f0b2 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/TokenAlgorithm.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenAlgorithm.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.constants; +package com.onixbyte.simplejwt.constants; import lombok.Getter; diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/TokenDataType.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenDataType.java similarity index 93% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/TokenDataType.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenDataType.java index 767c205..6271d84 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/TokenDataType.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/TokenDataType.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.constants; +package com.onixbyte.simplejwt.constants; import lombok.Getter; @@ -63,6 +63,9 @@ public enum TokenDataType { */ private final Class mappedClass; + /** + * Create a TokenDataType with a mapped class. + */ TokenDataType(Class mappedClass) { this.mappedClass = mappedClass; } diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/package-info.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/package-info.java similarity index 94% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/package-info.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/package-info.java index 2c7726e..1818acd 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/constants/package-info.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/constants/package-info.java @@ -23,4 +23,4 @@ * * @since 1.0.0 */ -package cn.org.codecrafters.simplejwt.constants; \ No newline at end of file +package com.onixbyte.simplejwt.constants; \ No newline at end of file diff --git a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/exceptions/UnsupportedAlgorithmException.java b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/UnsupportedAlgorithmException.java similarity index 97% rename from simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/exceptions/UnsupportedAlgorithmException.java rename to simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/UnsupportedAlgorithmException.java index 020ea63..f10d528 100644 --- a/simple-jwt-facade/src/main/java/cn/org/codecrafters/simplejwt/exceptions/UnsupportedAlgorithmException.java +++ b/simple-jwt-facade/src/main/java/com/onixbyte/simplejwt/exceptions/UnsupportedAlgorithmException.java @@ -15,12 +15,14 @@ * limitations under the License. */ -package cn.org.codecrafters.simplejwt.exceptions; +package com.onixbyte.simplejwt.exceptions; + +import com.onixbyte.simplejwt.TokenResolver; /** * This {@code UnsupportedAlgorithmException} represents the given * algorithm is not supported by {@link - * cn.org.codecrafters.simplejwt.TokenResolver} yet. + * TokenResolver} yet. *

* If you want the supports to an unsupported algorithm, you could *