Skip to content

Commit

Permalink
Add support for SessionToken for login
Browse files Browse the repository at this point in the history
  • Loading branch information
b0rba committed Jul 7, 2023
1 parent db98c58 commit 4d40fbb
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 21 deletions.
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,14 +154,24 @@ This method registers a new login for the given installation and account, return

```go
assessment, err := client.RegisterLogin(&incognia.Login{
InstallationID: "installation-id",
InstallationID: "installation-id",
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
PaymentMethodIdentifier: "payment-method-identifier",
})
```

This method registers a new **web** login for the given account and session-token, returning a `TransactionAssessment`, containing the risk assessment and supporting evidence.

```go
assessment, err := client.RegisterLogin(&incognia.Login{
SessionToken: "session-token",
AccountID: "account-id",
...
})
```

### Registering Payment or Login without evaluating its risk assessment

Turning off the risk assessment evaluation allows you to register a new transaction (Login or Payment), but the response (`TransactionAssessment`) will be empty. For instance, if you're using the risk assessment only for some payment transactions, you should still register all the other ones: this will avoid any bias on the risk assessment computation.
Expand Down
8 changes: 5 additions & 3 deletions incognia.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ type Payment struct {
}

type Login struct {
InstallationID string
InstallationID *string
SessionToken *string
AccountID string
ExternalID string
PolicyID string
Expand Down Expand Up @@ -273,7 +274,7 @@ func (c *Client) registerPayment(payment *Payment) (ret *TransactionAssessment,
}

requestBody, err := json.Marshal(postTransactionRequestBody{
InstallationID: payment.InstallationID,
InstallationID: &payment.InstallationID,
Type: paymentType,
AccountID: payment.AccountID,
PolicyID: payment.PolicyID,
Expand Down Expand Up @@ -323,7 +324,7 @@ func (c *Client) registerLogin(login *Login) (*TransactionAssessment, error) {
return nil, ErrMissingLogin
}

if login.InstallationID == "" {
if login.InstallationID == nil && login.SessionToken == nil {
return nil, ErrMissingInstallationID
}

Expand All @@ -338,6 +339,7 @@ func (c *Client) registerLogin(login *Login) (*TransactionAssessment, error) {
PolicyID: login.PolicyID,
ExternalID: login.ExternalID,
PaymentMethodIdentifier: login.PaymentMethodIdentifier,
SessionToken: login.SessionToken,
})
if err != nil {
return nil, err
Expand Down
58 changes: 42 additions & 16 deletions incognia_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ const (
)

var (
installationId = "installation-id"
sessionToken = "session-token"
shouldEval bool = true
shouldNotEval bool = false
emptyQueryString map[string][]string = nil
Expand Down Expand Up @@ -52,7 +54,7 @@ var (
},
}
postSignupRequestBodyFixture = &postAssessmentRequestBody{
InstallationID: "installation-id",
InstallationID: installationId,
AddressLine: "address line",
StructuredAddress: &StructuredAddress{
Locale: "locale",
Expand All @@ -73,7 +75,7 @@ var (
},
}
postSignupRequestBodyRequiredFieldsFixture = &postAssessmentRequestBody{
InstallationID: "installation-id",
InstallationID: installationId,
}
addressFixture = &Address{
Coordinates: postSignupRequestBodyFixture.Coordinates,
Expand Down Expand Up @@ -128,7 +130,7 @@ var (
},
}
postPaymentRequestBodyFixture = &postTransactionRequestBody{
InstallationID: "installation-id",
InstallationID: &installationId,
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
Expand Down Expand Up @@ -174,12 +176,12 @@ var (
},
}
postPaymentRequestBodyRequiredFieldsFixture = &postTransactionRequestBody{
InstallationID: "installation-id",
InstallationID: &installationId,
AccountID: "account-id",
Type: paymentType,
}
paymentFixture = &Payment{
InstallationID: "installation-id",
InstallationID: installationId,
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
Expand Down Expand Up @@ -224,60 +226,75 @@ var (
},
}
paymentFixtureRequiredFields = &Payment{
InstallationID: "installation-id",
InstallationID: installationId,
AccountID: "account-id",
}
simplePaymentFixtureWithShouldEval = &Payment{
InstallationID: "installation-id",
InstallationID: installationId,
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
Eval: &shouldEval,
}
simplePaymentFixtureWithShouldNotEval = &Payment{
InstallationID: "installation-id",
InstallationID: installationId,
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
Eval: &shouldNotEval,
}
postSimplePaymentRequestBodyFixture = &postTransactionRequestBody{
InstallationID: "installation-id",
InstallationID: &installationId,
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
Type: paymentType,
}
loginFixture = &Login{
InstallationID: "installation-id",
InstallationID: &installationId,
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
PaymentMethodIdentifier: "payment-method-identifier",
}
loginFixtureWithShouldEval = &Login{
InstallationID: "installation-id",
InstallationID: &installationId,
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
PaymentMethodIdentifier: "payment-method-identifier",
Eval: &shouldEval,
}
loginFixtureWithShouldNotEval = &Login{
InstallationID: "installation-id",
InstallationID: &installationId,
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
Eval: &shouldNotEval,
}
loginWebFixture = &Login{
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
PaymentMethodIdentifier: "payment-method-identifier",
SessionToken: &sessionToken,
}
postLoginRequestBodyFixture = &postTransactionRequestBody{
InstallationID: "installation-id",
InstallationID: &installationId,
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
PaymentMethodIdentifier: "payment-method-identifier",
Type: loginType,
}
postLoginWebRequestBodyFixture = &postTransactionRequestBody{
AccountID: "account-id",
ExternalID: "external-id",
PolicyID: "policy-id",
PaymentMethodIdentifier: "payment-method-identifier",
Type: loginType,
SessionToken: &sessionToken,
}
)

type PanickingTokenProvider struct {
Expand Down Expand Up @@ -672,6 +689,15 @@ func (suite *IncogniaTestSuite) TestSuccessRegisterLoginWithFalseEval() {
suite.Equal(emptyTransactionAssessmentFixture, response)
}

func (suite *IncogniaTestSuite) TestSuccessRegisterLoginWeb() {
transactionServer := suite.mockPostTransactionsEndpoint(token, postLoginWebRequestBodyFixture, transactionAssessmentFixture, emptyQueryString)
defer transactionServer.Close()

response, err := suite.client.registerLogin(loginWebFixture)
suite.NoError(err)
suite.Equal(transactionAssessmentFixture, response)
}

func (suite *IncogniaTestSuite) TestSuccessRegisterLoginAfterTokenExpiration() {
transactionServer := suite.mockPostTransactionsEndpoint(token, postLoginRequestBodyFixture, transactionAssessmentFixture, emptyQueryString)
defer transactionServer.Close()
Expand All @@ -694,14 +720,14 @@ func (suite *IncogniaTestSuite) TestRegisterLoginNilLogin() {
suite.Nil(response)
}

func (suite *IncogniaTestSuite) TestRegisterLoginEmptyInstallationId() {
func (suite *IncogniaTestSuite) TestRegisterLoginNullInstallationIdAndSessionToken() {
response, err := suite.client.RegisterLogin(&Login{AccountID: "some-account-id"})
suite.EqualError(err, ErrMissingInstallationID.Error())
suite.Nil(response)
}

func (suite *IncogniaTestSuite) TestRegisterLoginEmptyAccountId() {
response, err := suite.client.RegisterLogin(&Login{InstallationID: "some-installation-id"})
response, err := suite.client.RegisterLogin(&Login{InstallationID: &installationId})
suite.EqualError(err, ErrMissingAccountID.Error())
suite.Nil(response)
}
Expand All @@ -728,7 +754,7 @@ func (suite *IncogniaTestSuite) TestUnauthorizedTokenGeneration() {
suite.Nil(responseLogin)
suite.EqualError(err, ErrInvalidCredentials.Error())

responseSignUp, err := suite.client.RegisterSignup("installation-id", addressFixture)
responseSignUp, err := suite.client.RegisterSignup(installationId, addressFixture)
suite.Nil(responseSignUp)
suite.EqualError(err, ErrInvalidCredentials.Error())

Expand Down
3 changes: 2 additions & 1 deletion request_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,12 @@ type PaymentMethod struct {
type postTransactionRequestBody struct {
ExternalID string `json:"external_id,omitempty"`
PolicyID string `json:"policy_id,omitempty"`
InstallationID string `json:"installation_id"`
InstallationID *string `json:"installation_id,omitempty"`
PaymentMethodIdentifier string `json:"payment_method_identifier,omitempty"`
Type transactionType `json:"type"`
AccountID string `json:"account_id"`
Addresses []*TransactionAddress `json:"addresses,omitempty"`
PaymentValue *PaymentValue `json:"payment_value,omitempty"`
PaymentMethods []*PaymentMethod `json:"payment_methods,omitempty"`
SessionToken *string `json:"session_token,omitempty"`
}

0 comments on commit 4d40fbb

Please sign in to comment.