WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit bf12ce4

Browse files
committed
Add new methods
1 parent aa84d87 commit bf12ce4

20 files changed

+206
-2
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ pomName=Authsignal Server SDK for Java
22
pomArtifactId=authsignal-java
33
pomGroup=com.authsignal
44
pomPackaging=jar
5-
versionName=2.4.0
5+
versionName=2.5.0
66
versionCode=2025

src/main/java/com/authsignal/AuthsignalClient.java

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,19 @@
66

77
import java.net.URI;
88
import java.net.URISyntaxException;
9+
import java.net.URLEncoder;
910
import java.net.http.HttpClient;
1011
import java.net.http.HttpRequest;
1112
import java.net.http.HttpResponse;
13+
import java.nio.charset.StandardCharsets;
1214
import java.util.Base64;
15+
import java.util.HashMap;
1316
import java.util.List;
17+
import java.util.Map;
1418
import java.util.concurrent.CompletableFuture;
1519
import java.util.Arrays;
1620
import java.util.concurrent.TimeUnit;
21+
import java.util.stream.Collectors;
1722

1823
public class AuthsignalClient {
1924
private String _secret;
@@ -22,7 +27,7 @@ public class AuthsignalClient {
2227

2328
private static final String DEFAULT_API_URL = "https://api.authsignal.com/v1";
2429
private static final int DEFAULT_RETRIES = 2;
25-
private static final String VERSION = "2.4.0";
30+
private static final String VERSION = "2.5.0";
2631

2732
public Webhook webhook;
2833

@@ -114,6 +119,73 @@ public CompletableFuture<ActionAttributes> updateAction(UpdateActionRequest requ
114119
.thenApply(response -> new Gson().fromJson(response.body(), ActionAttributes.class));
115120
}
116121

122+
public CompletableFuture<ChallengeResponse> challenge(ChallengeRequest request) {
123+
return postRequest("/challenge", new Gson().toJson(request))
124+
.thenApply(response -> new Gson().fromJson(response.body(), ChallengeResponse.class));
125+
}
126+
127+
public CompletableFuture<VerifyResponse> verify(VerifyRequest request) {
128+
return postRequest("/verify", new Gson().toJson(request))
129+
.thenApply(response -> new Gson().fromJson(response.body(), VerifyResponse.class));
130+
}
131+
132+
public CompletableFuture<ClaimChallengeResponse> claimChallenge(ClaimChallengeRequest request) {
133+
return postRequest("/claim", new Gson().toJson(request))
134+
.thenApply(response -> new Gson().fromJson(response.body(), ClaimChallengeResponse.class));
135+
}
136+
137+
public CompletableFuture<GetChallengeResponse> getChallenge(GetChallengeRequest request) {
138+
Map<String, String> params = new HashMap<>();
139+
140+
if (request.challengeId != null) {
141+
params.put("challengeId", request.challengeId);
142+
}
143+
144+
if (request.userId != null) {
145+
params.put("userId", request.userId);
146+
}
147+
148+
if (request.action != null) {
149+
params.put("action", request.action);
150+
}
151+
152+
if (request.verificationMethod != null) {
153+
params.put("verificationMethod", request.verificationMethod);
154+
}
155+
156+
String query = buildQueryString(params);
157+
158+
String path = "/challenges" + query;
159+
160+
return postRequest(path, new Gson().toJson(request))
161+
.thenApply(response -> new Gson().fromJson(response.body(), GetChallengeResponse.class));
162+
}
163+
164+
public CompletableFuture<CreateSessionResponse> createSession(CreateSessionRequest request) {
165+
return postRequest("/sessions", new Gson().toJson(request))
166+
.thenApply(response -> new Gson().fromJson(response.body(), CreateSessionResponse.class));
167+
}
168+
169+
public CompletableFuture<ValidateSessionResponse> validateSession(ValidateSessionRequest request) {
170+
return postRequest("/sessions/validate", new Gson().toJson(request))
171+
.thenApply(response -> new Gson().fromJson(response.body(), ValidateSessionResponse.class));
172+
}
173+
174+
public CompletableFuture<RefreshSessionResponse> refreshSession(RefreshSessionRequest request) {
175+
return postRequest("/sessions/refresh", new Gson().toJson(request))
176+
.thenApply(response -> new Gson().fromJson(response.body(), RefreshSessionResponse.class));
177+
}
178+
179+
public CompletableFuture<Void> revokeSession(RevokeSessionRequest request) {
180+
return postRequest("/sessions/revoke", new Gson().toJson(request))
181+
.thenApply(response -> null);
182+
}
183+
184+
public CompletableFuture<Void> revokeUserSessions(RevokeUserSessionsRequest request) {
185+
return postRequest("/sessions/revoke-user", new Gson().toJson(request))
186+
.thenApply(response -> null);
187+
}
188+
117189
private CompletableFuture<HttpResponse<String>> getRequest(String path) {
118190
try {
119191
URI uri = new URI(_baseURL + path);
@@ -276,4 +348,10 @@ private boolean isSuccessResponse(int statusCode) {
276348
private boolean isServerErrorResponse(int statusCode) {
277349
return statusCode >= 500 && statusCode <= 599;
278350
}
351+
352+
private String buildQueryString(Map<String, String> params) {
353+
return params.entrySet().stream()
354+
.map(e -> e.getKey() + "=" + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
355+
.collect(Collectors.joining("&"));
356+
}
279357
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.authsignal.model;
2+
3+
public class ChallengeRequest extends ApiModel {
4+
public VerificationMethodType verificationMethod;
5+
public String action;
6+
public String email;
7+
public String phoneNumber;
8+
public String smsChannel;
9+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.authsignal.model;
2+
3+
public class ChallengeResponse extends ApiModel {
4+
public String challengeId;
5+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.authsignal.model;
2+
3+
public class ClaimChallengeRequest extends ApiModel {
4+
public String challengeId;
5+
public String userId;
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.authsignal.model;
2+
3+
public class ClaimChallengeResponse extends ApiModel {
4+
public String token;
5+
public VerificationMethodType verificationMethod;
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.authsignal.model;
2+
3+
public class CreateSessionRequest extends ApiModel {
4+
public String clientId;
5+
public String token;
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.authsignal.model;
2+
3+
public class CreateSessionResponse extends ApiModel {
4+
public String accessToken;
5+
public String refreshToken;
6+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.authsignal.model;
2+
3+
public class GetChallengeRequest extends ApiModel {
4+
public String challengeId;
5+
public String userId;
6+
public String action;
7+
public String verificationMethod;
8+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.authsignal.model;
2+
3+
public class GetChallengeResponse extends ApiModel {
4+
public String challengeId;
5+
public Integer expiresAt;
6+
public VerificationMethodType verificationMethod;
7+
public SmsChannel smsChannel;
8+
public String phoneNumber;
9+
public String email;
10+
public String action;
11+
}

0 commit comments

Comments
 (0)