From cc1cbdd16357e8bc9ada971238caf78e80b53f6d Mon Sep 17 00:00:00 2001 From: hanzeINGH Date: Fri, 17 Jan 2025 15:09:02 +0800 Subject: [PATCH 1/4] feat: add load oauth client by file Change-Id: Ia2a29307ca80f36faa079e1f1d2cba8832fe600f --- api/pom.xml | 2 +- .../coze/openapi/client/auth/OAuthConfig.java | 65 +++++++++++++++++++ .../coze/openapi/client/auth/OAuthToken.java | 3 + .../service/auth/DeviceOAuthClient.java | 8 +++ .../openapi/service/auth/JWTOAuthClient.java | 11 ++++ .../openapi/service/auth/PKCEOAuthClient.java | 13 ++-- .../openapi/service/auth/WebOAuthClient.java | 10 +++ .../service/utils/UserAgentInterceptor.java | 2 +- example/pom.xml | 2 +- 9 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 api/src/main/java/com/coze/openapi/client/auth/OAuthConfig.java diff --git a/api/pom.xml b/api/pom.xml index c0afdf56..42e976e6 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -43,7 +43,7 @@ coze-api - 0.2.0 + 0.2.1 scm:git:git://github.com/coze-dev/coze-java.git diff --git a/api/src/main/java/com/coze/openapi/client/auth/OAuthConfig.java b/api/src/main/java/com/coze/openapi/client/auth/OAuthConfig.java new file mode 100644 index 00000000..32c2ab60 --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/auth/OAuthConfig.java @@ -0,0 +1,65 @@ +package com.coze.openapi.client.auth; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.exc.StreamReadException; +import com.fasterxml.jackson.databind.DatabindException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OAuthConfig { + @JsonProperty("client_type") + private String clientType; + + @JsonProperty("client_id") + private String clientId; + + @JsonProperty("client_secret") + private String clientSecret; + + @JsonProperty("private_key") + private String privateKey; + + @JsonProperty("public_key_id") + private String publicKeyId; + + @JsonProperty("coze_api_base") + private String cozeApiBase; + + @JsonProperty("coze_www_base") + private String cozeWwwBase; + + public static OAuthConfig load(String configFilePath) { + return doLoad(configFilePath); + } + + private static OAuthConfig doLoad(String configFilePath) { + try (InputStream inputStream = new FileInputStream(configFilePath)) { + ObjectMapper mapper = new ObjectMapper(); + mapper.findAndRegisterModules(); + + return mapper.readValue(inputStream, OAuthConfig.class); + + } catch (FileNotFoundException e) { + throw new RuntimeException("Config file not found: " + configFilePath, e); + } catch (StreamReadException e) { + throw new RuntimeException("JSON file format error: " + e.getMessage(), e); + } catch (DatabindException e) { + throw new RuntimeException("Failed to map config file to object: " + e.getMessage(), e); + } catch (IOException e) { + throw new RuntimeException("I/O error while reading config file: " + e.getMessage(), e); + } + } +} diff --git a/api/src/main/java/com/coze/openapi/client/auth/OAuthToken.java b/api/src/main/java/com/coze/openapi/client/auth/OAuthToken.java index b2ddc6b3..0dcafea3 100644 --- a/api/src/main/java/com/coze/openapi/client/auth/OAuthToken.java +++ b/api/src/main/java/com/coze/openapi/client/auth/OAuthToken.java @@ -25,4 +25,7 @@ public class OAuthToken extends BaseResp { @JsonProperty("refresh_token") private String refreshToken; + + @JsonProperty("token_type") + private String tokenType; } diff --git a/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java index 52cf9905..1d2b58af 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java @@ -15,6 +15,14 @@ protected DeviceOAuthClient(DeviceOAuthBuilder builder) { super(builder); } + public static DeviceOAuthClient loadFromFile(String configFilePath) { + OAuthConfig config = OAuthConfig.load(configFilePath); + return new DeviceOAuthClient.DeviceOAuthBuilder() + .clientID(config.getClientId()) + .baseURL(config.getCozeApiBase()) + .build(); + } + private static final Logger logger = AuthLogFactory.getLogger(); public DeviceAuthResp getDeviceCode() { diff --git a/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java index 6c09f446..72ec882c 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java @@ -10,6 +10,7 @@ import com.coze.openapi.client.auth.GetAccessTokenReq; import com.coze.openapi.client.auth.GrantType; +import com.coze.openapi.client.auth.OAuthConfig; import com.coze.openapi.client.auth.OAuthToken; import com.coze.openapi.client.auth.scope.Scope; import com.coze.openapi.service.utils.Utils; @@ -31,6 +32,16 @@ protected JWTOAuthClient(JWTOAuthBuilder builder) throws Exception { this.ttl = builder.ttl; } + public static JWTOAuthClient loadFromFile(String configFilePath) throws Exception { + OAuthConfig config = OAuthConfig.load(configFilePath); + return new JWTOAuthClient.JWTOAuthBuilder() + .privateKey(config.getPrivateKey()) + .publicKey(config.getPublicKeyId()) + .clientID(config.getClientId()) + .baseURL(config.getCozeApiBase()) + .build(); + } + @Override public OAuthToken refreshToken(String refreshToken) { return null; diff --git a/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java index ef309b0c..55573f50 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java @@ -8,10 +8,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import com.coze.openapi.client.auth.GetAccessTokenReq; -import com.coze.openapi.client.auth.GetPKCEAuthURLResp; -import com.coze.openapi.client.auth.GrantType; -import com.coze.openapi.client.auth.OAuthToken; +import com.coze.openapi.client.auth.*; import com.coze.openapi.service.utils.Utils; import lombok.Getter; @@ -36,6 +33,14 @@ protected PKCEOAuthClient(PKCEOAuthBuilder builder) { super(builder); } + public static PKCEOAuthClient loadFromFile(String configFilePath) { + OAuthConfig config = OAuthConfig.load(configFilePath); + return new PKCEOAuthClient.PKCEOAuthBuilder() + .clientID(config.getClientId()) + .baseURL(config.getCozeApiBase()) + .build(); + } + public GetPKCEAuthURLResp genOAuthURL(@NotNull String redirectURI, String state) { return genOAuthURL(redirectURI, state, CodeChallengeMethod.Plain); } diff --git a/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java index f8adeebc..0382fa44 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java @@ -3,6 +3,7 @@ import org.jetbrains.annotations.NotNull; import com.coze.openapi.client.auth.GrantType; +import com.coze.openapi.client.auth.OAuthConfig; import com.coze.openapi.client.auth.OAuthToken; public class WebOAuthClient extends OAuthClient { @@ -11,6 +12,15 @@ protected WebOAuthClient(OAuthBuilder builder) { super(builder); } + public static WebOAuthClient loadFromFile(String configFilePath) { + OAuthConfig config = OAuthConfig.load(configFilePath); + return new WebOAuthClient.WebOAuthBuilder() + .clientID(config.getClientId()) + .clientSecret(config.getClientSecret()) + .baseURL(config.getCozeApiBase()) + .build(); + } + @Override public String getOAuthURL(@NotNull String redirectURI, String state) { return super.getOAuthURL(redirectURI, state); diff --git a/api/src/main/java/com/coze/openapi/service/utils/UserAgentInterceptor.java b/api/src/main/java/com/coze/openapi/service/utils/UserAgentInterceptor.java index 8e2e7d7c..ee0f65c5 100644 --- a/api/src/main/java/com/coze/openapi/service/utils/UserAgentInterceptor.java +++ b/api/src/main/java/com/coze/openapi/service/utils/UserAgentInterceptor.java @@ -24,7 +24,7 @@ public Response intercept(Chain chain) throws IOException { return chain.proceed(request); } - public static final String VERSION = "0.2.0"; + public static final String VERSION = "0.2.1"; private static final ObjectMapper objectMapper = new ObjectMapper(); /** 获取操作系统版本 */ diff --git a/example/pom.xml b/example/pom.xml index f1254111..c2e94a8b 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -16,7 +16,7 @@ com.coze coze-api - ${project.parent.version} + 0.2.1 \ No newline at end of file From 0e1f731f606a2b651022ef9b9035fa3a84eb8d73 Mon Sep 17 00:00:00 2001 From: hanzeINGH Date: Fri, 17 Jan 2025 15:32:46 +0800 Subject: [PATCH 2/4] update Change-Id: Ie2d582eeff50a808145acefb8e6713c95f99e9d4 --- .../coze/openapi/client/auth/LoadAuthConfig.java | 14 ++++++++++++++ .../com/coze/openapi/client/auth/OAuthConfig.java | 4 ++-- .../openapi/service/auth/DeviceOAuthClient.java | 4 ++-- .../coze/openapi/service/auth/JWTOAuthClient.java | 9 +++------ .../coze/openapi/service/auth/PKCEOAuthClient.java | 4 ++-- .../coze/openapi/service/auth/WebOAuthClient.java | 5 +++-- 6 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 api/src/main/java/com/coze/openapi/client/auth/LoadAuthConfig.java diff --git a/api/src/main/java/com/coze/openapi/client/auth/LoadAuthConfig.java b/api/src/main/java/com/coze/openapi/client/auth/LoadAuthConfig.java new file mode 100644 index 00000000..02e44b76 --- /dev/null +++ b/api/src/main/java/com/coze/openapi/client/auth/LoadAuthConfig.java @@ -0,0 +1,14 @@ +package com.coze.openapi.client.auth; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LoadAuthConfig { + private String filePath; +} diff --git a/api/src/main/java/com/coze/openapi/client/auth/OAuthConfig.java b/api/src/main/java/com/coze/openapi/client/auth/OAuthConfig.java index 32c2ab60..3071b87c 100644 --- a/api/src/main/java/com/coze/openapi/client/auth/OAuthConfig.java +++ b/api/src/main/java/com/coze/openapi/client/auth/OAuthConfig.java @@ -41,8 +41,8 @@ public class OAuthConfig { @JsonProperty("coze_www_base") private String cozeWwwBase; - public static OAuthConfig load(String configFilePath) { - return doLoad(configFilePath); + public static OAuthConfig load(LoadAuthConfig config) { + return doLoad(config.getFilePath()); } private static OAuthConfig doLoad(String configFilePath) { diff --git a/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java index 1d2b58af..39f4bec3 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java @@ -15,8 +15,8 @@ protected DeviceOAuthClient(DeviceOAuthBuilder builder) { super(builder); } - public static DeviceOAuthClient loadFromFile(String configFilePath) { - OAuthConfig config = OAuthConfig.load(configFilePath); + public static DeviceOAuthClient loadFromFile(LoadAuthConfig loadConfig) { + OAuthConfig config = OAuthConfig.load(loadConfig); return new DeviceOAuthClient.DeviceOAuthBuilder() .clientID(config.getClientId()) .baseURL(config.getCozeApiBase()) diff --git a/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java index 72ec882c..cc5772f6 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java @@ -8,10 +8,7 @@ import java.util.HashMap; import java.util.Map; -import com.coze.openapi.client.auth.GetAccessTokenReq; -import com.coze.openapi.client.auth.GrantType; -import com.coze.openapi.client.auth.OAuthConfig; -import com.coze.openapi.client.auth.OAuthToken; +import com.coze.openapi.client.auth.*; import com.coze.openapi.client.auth.scope.Scope; import com.coze.openapi.service.utils.Utils; @@ -32,8 +29,8 @@ protected JWTOAuthClient(JWTOAuthBuilder builder) throws Exception { this.ttl = builder.ttl; } - public static JWTOAuthClient loadFromFile(String configFilePath) throws Exception { - OAuthConfig config = OAuthConfig.load(configFilePath); + public static JWTOAuthClient loadFromFile(LoadAuthConfig loadConfig) throws Exception { + OAuthConfig config = OAuthConfig.load(loadConfig); return new JWTOAuthClient.JWTOAuthBuilder() .privateKey(config.getPrivateKey()) .publicKey(config.getPublicKeyId()) diff --git a/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java index 55573f50..4a6debf5 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java @@ -33,8 +33,8 @@ protected PKCEOAuthClient(PKCEOAuthBuilder builder) { super(builder); } - public static PKCEOAuthClient loadFromFile(String configFilePath) { - OAuthConfig config = OAuthConfig.load(configFilePath); + public static PKCEOAuthClient loadFromFile(LoadAuthConfig loadConfig) { + OAuthConfig config = OAuthConfig.load(loadConfig); return new PKCEOAuthClient.PKCEOAuthBuilder() .clientID(config.getClientId()) .baseURL(config.getCozeApiBase()) diff --git a/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java index 0382fa44..5d074c57 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java @@ -1,5 +1,6 @@ package com.coze.openapi.service.auth; +import com.coze.openapi.client.auth.LoadAuthConfig; import org.jetbrains.annotations.NotNull; import com.coze.openapi.client.auth.GrantType; @@ -12,8 +13,8 @@ protected WebOAuthClient(OAuthBuilder builder) { super(builder); } - public static WebOAuthClient loadFromFile(String configFilePath) { - OAuthConfig config = OAuthConfig.load(configFilePath); + public static WebOAuthClient loadFromFile(LoadAuthConfig loadConfig) { + OAuthConfig config = OAuthConfig.load(loadConfig); return new WebOAuthClient.WebOAuthBuilder() .clientID(config.getClientId()) .clientSecret(config.getClientSecret()) From 2cc6b393b848b75c28248be494f7f5010a0d03c9 Mon Sep 17 00:00:00 2001 From: hanzeINGH Date: Fri, 17 Jan 2025 15:33:33 +0800 Subject: [PATCH 3/4] update Change-Id: Id12377da67f56bc44d8fd168a4ffff4c36fe91f0 --- .../java/com/coze/openapi/service/auth/DeviceOAuthClient.java | 2 +- .../main/java/com/coze/openapi/service/auth/JWTOAuthClient.java | 2 +- .../java/com/coze/openapi/service/auth/PKCEOAuthClient.java | 2 +- .../main/java/com/coze/openapi/service/auth/WebOAuthClient.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java index 39f4bec3..dfed4e50 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/DeviceOAuthClient.java @@ -15,7 +15,7 @@ protected DeviceOAuthClient(DeviceOAuthBuilder builder) { super(builder); } - public static DeviceOAuthClient loadFromFile(LoadAuthConfig loadConfig) { + public static DeviceOAuthClient loadFromConfig(LoadAuthConfig loadConfig) { OAuthConfig config = OAuthConfig.load(loadConfig); return new DeviceOAuthClient.DeviceOAuthBuilder() .clientID(config.getClientId()) diff --git a/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java index cc5772f6..9f8f7168 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/JWTOAuthClient.java @@ -29,7 +29,7 @@ protected JWTOAuthClient(JWTOAuthBuilder builder) throws Exception { this.ttl = builder.ttl; } - public static JWTOAuthClient loadFromFile(LoadAuthConfig loadConfig) throws Exception { + public static JWTOAuthClient loadFromConfig(LoadAuthConfig loadConfig) throws Exception { OAuthConfig config = OAuthConfig.load(loadConfig); return new JWTOAuthClient.JWTOAuthBuilder() .privateKey(config.getPrivateKey()) diff --git a/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java index 4a6debf5..afd17ff8 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/PKCEOAuthClient.java @@ -33,7 +33,7 @@ protected PKCEOAuthClient(PKCEOAuthBuilder builder) { super(builder); } - public static PKCEOAuthClient loadFromFile(LoadAuthConfig loadConfig) { + public static PKCEOAuthClient loadFromConfig(LoadAuthConfig loadConfig) { OAuthConfig config = OAuthConfig.load(loadConfig); return new PKCEOAuthClient.PKCEOAuthBuilder() .clientID(config.getClientId()) diff --git a/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java index 5d074c57..9099164d 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java @@ -13,7 +13,7 @@ protected WebOAuthClient(OAuthBuilder builder) { super(builder); } - public static WebOAuthClient loadFromFile(LoadAuthConfig loadConfig) { + public static WebOAuthClient loadFromConfig(LoadAuthConfig loadConfig) { OAuthConfig config = OAuthConfig.load(loadConfig); return new WebOAuthClient.WebOAuthBuilder() .clientID(config.getClientId()) From b2c90704b35b90f0ed14fdff83f451868f6b93c2 Mon Sep 17 00:00:00 2001 From: hanzeINGH Date: Fri, 17 Jan 2025 15:35:17 +0800 Subject: [PATCH 4/4] update Change-Id: Ied4a22a76f325cf2044073c98af3e409da2b1817 --- .../main/java/com/coze/openapi/client/auth/LoadAuthConfig.java | 2 +- .../main/java/com/coze/openapi/service/auth/WebOAuthClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/com/coze/openapi/client/auth/LoadAuthConfig.java b/api/src/main/java/com/coze/openapi/client/auth/LoadAuthConfig.java index 02e44b76..eda92685 100644 --- a/api/src/main/java/com/coze/openapi/client/auth/LoadAuthConfig.java +++ b/api/src/main/java/com/coze/openapi/client/auth/LoadAuthConfig.java @@ -10,5 +10,5 @@ @NoArgsConstructor @AllArgsConstructor public class LoadAuthConfig { - private String filePath; + private String filePath; } diff --git a/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java b/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java index 9099164d..43d01630 100644 --- a/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java +++ b/api/src/main/java/com/coze/openapi/service/auth/WebOAuthClient.java @@ -1,9 +1,9 @@ package com.coze.openapi.service.auth; -import com.coze.openapi.client.auth.LoadAuthConfig; import org.jetbrains.annotations.NotNull; import com.coze.openapi.client.auth.GrantType; +import com.coze.openapi.client.auth.LoadAuthConfig; import com.coze.openapi.client.auth.OAuthConfig; import com.coze.openapi.client.auth.OAuthToken;