Skip to content

Commit 5eba8d3

Browse files
authored
Support web login (#183)
1 parent 4257503 commit 5eba8d3

File tree

6 files changed

+142
-3
lines changed

6 files changed

+142
-3
lines changed

README.md

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ And then download the artifact incognia-api-client
2222
<dependency>
2323
<groupId>com.incognia</groupId>
2424
<artifactId>incognia-api-client</artifactId>
25-
<version>2.4.1</version>
25+
<version>2.5.0</version>
2626
</dependency>
2727
```
2828

@@ -39,7 +39,7 @@ repositories {
3939
And then add the dependency
4040
```gradle
4141
dependencies {
42-
implementation 'com.incognia:incognia-api-client:2.4.1'
42+
implementation 'com.incognia:incognia-api-client:2.5.0'
4343
}
4444
```
4545
We support Java 8+.
@@ -141,6 +141,29 @@ try {
141141
}
142142
```
143143

144+
#### Registering Web Login
145+
146+
This method registers a new web login for the given installation and account, returning a `TransactionAssessment`, containing the risk assessment and supporting evidence.
147+
148+
```java
149+
IncogniaAPI api = new IncogniaAPI("client-id", "client-secret");
150+
try {
151+
RegisterLoginRequest registerLoginRequest =
152+
RegisterLoginRequest.builder()
153+
.installationId("installation id")
154+
.accountId("account id")
155+
.externalId("external id")
156+
.sessionToken("session-token")
157+
.evaluateTransaction(true) // can be omitted as it uses true as the default value
158+
.build();
159+
TransactionAssessment assessment = api.registerWebLogin(registerLoginRequest);
160+
} catch (IncogniaAPIException e) {
161+
//Some api error happened (invalid data, invalid credentials)
162+
} catch (IncogniaException e) {
163+
//Something unexpected happened
164+
}
165+
```
166+
144167
#### Registering Payment
145168

146169
This method registers a new payment for the given installation and account, returning a `TransactionAssessment`, containing the risk assessment and supporting evidence.

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
}
88

99
group = "com.incognia"
10-
version = "2.4.1"
10+
version = "2.5.0"
1111

1212
task createProjectVersionFile {
1313
def projectVersionDir = "$projectDir/src/main/java/com/incognia/api"

src/main/java/com/incognia/api/IncogniaAPI.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.incognia.transaction.TransactionAddress;
1717
import com.incognia.transaction.TransactionAssessment;
1818
import com.incognia.transaction.login.RegisterLoginRequest;
19+
import com.incognia.transaction.login.RegisterWebLoginRequest;
1920
import com.incognia.transaction.payment.RegisterPaymentRequest;
2021
import java.time.Instant;
2122
import java.util.HashMap;
@@ -199,6 +200,61 @@ public TransactionAssessment registerLogin(RegisterLoginRequest request)
199200
queryParameters);
200201
}
201202

203+
/**
204+
* Registers a web login to obtain a risk assessment. Check <a
205+
* href="https://dash.incognia.com/api-reference#operation/transactions-post">the docs</a><br>
206+
* Example:
207+
*
208+
* <pre>{@code
209+
* IncogniaAPI api = new IncogniaAPI("client-id", "client-secret", Region.BR);
210+
* try {
211+
* RegisterLoginRequest loginRequest = RegisterLoginRequest.builder()
212+
* .installationId("installation-id")
213+
* .accountId("account-id")
214+
* .externalId("external-id")
215+
* .sessionToken("session-token")
216+
* .evaluateTransaction(true) // can be omitted as it uses true as the default value
217+
* .build();
218+
* TransactionAssessment assessment = api.registerLogin(loginRequest);
219+
* } catch (IncogniaAPIException e) {
220+
* //Some api error happened (invalid data, invalid credentials)
221+
* } catch (IncogniaException e) {
222+
* //Something unexpected happened
223+
* }
224+
* }</pre>
225+
*
226+
* @param request the {@link RegisterWebLoginRequest} model with the properties we need to make
227+
* the assessment
228+
* @return the assessment for the login
229+
* @throws IncogniaAPIException in case of api errors
230+
* @throws IncogniaException in case of unexpected errors
231+
*/
232+
public TransactionAssessment registerWebLogin(RegisterWebLoginRequest request)
233+
throws IncogniaException {
234+
Asserts.assertNotNull(request, "register login request");
235+
Asserts.assertNotEmpty(request.getInstallationId(), "installation id");
236+
Asserts.assertNotEmpty(request.getAccountId(), "account id");
237+
Asserts.assertNotEmpty(request.getSessionToken(), "session token");
238+
PostTransactionRequestBody requestBody =
239+
PostTransactionRequestBody.builder()
240+
.installationId(request.getInstallationId())
241+
.accountId(request.getAccountId())
242+
.externalId(request.getExternalId())
243+
.sessionToken(request.getSessionToken())
244+
.type("login")
245+
.build();
246+
247+
Map<String, String> queryParameters = new HashMap<>();
248+
if (request.shouldEvaluateTransaction() != null) {
249+
queryParameters.put(EVALUATION_PARAMETER, request.shouldEvaluateTransaction().toString());
250+
}
251+
return tokenAwareNetworkingClient.doPost(
252+
"api/v2/authentication/transactions",
253+
requestBody,
254+
TransactionAssessment.class,
255+
queryParameters);
256+
}
257+
202258
/**
203259
* Registers a payment to obtain a risk assessment. Check <a
204260
* href="https://dash.incognia.com/api-reference#operation/transactions-post">the docs</a><br>

src/main/java/com/incognia/transaction/PostTransactionRequestBody.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
public class PostTransactionRequestBody {
1414
String installationId;
1515
String accountId;
16+
String sessionToken;
1617

1718
String type;
1819
String externalId;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.incognia.transaction.login;
2+
3+
import lombok.AccessLevel;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.Value;
7+
8+
@Value
9+
@Builder
10+
public class RegisterWebLoginRequest {
11+
String installationId;
12+
String accountId;
13+
String externalId;
14+
String sessionToken;
15+
16+
@Getter(AccessLevel.NONE)
17+
Boolean evaluateTransaction;
18+
19+
public Boolean shouldEvaluateTransaction() {
20+
return this.evaluateTransaction;
21+
}
22+
}

src/test/java/com/incognia/api/IncogniaAPITest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.incognia.transaction.TransactionAddress;
2323
import com.incognia.transaction.TransactionAssessment;
2424
import com.incognia.transaction.login.RegisterLoginRequest;
25+
import com.incognia.transaction.login.RegisterWebLoginRequest;
2526
import com.incognia.transaction.payment.CardInfo;
2627
import com.incognia.transaction.payment.PaymentMethod;
2728
import com.incognia.transaction.payment.PaymentType;
@@ -219,6 +220,42 @@ void testRegisterLogin_whenDataIsValid(Boolean eval) {
219220
assertTransactionAssessment(transactionAssessment);
220221
}
221222

223+
@ParameterizedTest
224+
@ValueSource(booleans = {true})
225+
@NullSource
226+
@DisplayName("should return the expected web login transaction response")
227+
@SneakyThrows
228+
void testRegisterWebLogin_whenDataIsValid(Boolean eval) {
229+
String token = TokenCreationFixture.createToken();
230+
String installationId = "installation-id";
231+
String accountId = "account-id";
232+
String externalId = "external-id";
233+
String sessionToken = "session-token";
234+
235+
TokenAwareDispatcher dispatcher = new TokenAwareDispatcher(token, CLIENT_ID, CLIENT_SECRET);
236+
dispatcher.setExpectedTransactionRequestBody(
237+
PostTransactionRequestBody.builder()
238+
.installationId(installationId)
239+
.externalId(externalId)
240+
.accountId(accountId)
241+
.type("login")
242+
.sessionToken(sessionToken)
243+
.addresses(null)
244+
.paymentMethods(null)
245+
.build());
246+
mockServer.setDispatcher(dispatcher);
247+
RegisterWebLoginRequest loginRequest =
248+
RegisterWebLoginRequest.builder()
249+
.installationId(installationId)
250+
.accountId(accountId)
251+
.externalId(externalId)
252+
.evaluateTransaction(eval)
253+
.sessionToken(sessionToken)
254+
.build();
255+
TransactionAssessment transactionAssessment = client.registerWebLogin(loginRequest);
256+
assertTransactionAssessment(transactionAssessment);
257+
}
258+
222259
@Test
223260
@DisplayName("should return an empty response")
224261
@SneakyThrows

0 commit comments

Comments
 (0)