incognia_api 0.2.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +1 -1
- data/.github/workflows/codeql.yml +76 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +11 -7
- data/README.md +84 -0
- data/lib/incognia/api.rb +35 -3
- data/lib/incognia/constants/feedback_event.rb +33 -0
- data/lib/incognia/resources/login_assessment.rb +5 -0
- data/lib/incognia/version.rb +1 -1
- data/lib/incognia.rb +3 -0
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4670f0fda3487b76490802caef76aa02c9ef037c552d4fab1e970871d07498f
|
4
|
+
data.tar.gz: b8286fe8ba8130ad7512bc8bf2acb065409195ed326a72c9c0a4fb27b9e7cfb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 191d5b1ee6963347a37a752bedda18bd293a04b7adc245c037b67e5ac6f08e629d36dbe5701c5bb13b6f5e180a2d7e6153b3913da730a2418fcd66d972eb866e
|
7
|
+
data.tar.gz: 118a7ea43a3f35709383c24c1b5d372b92152fea8041894666fdeb8839c2b6c472b8ced28bb3b654bbbf9ecd2fa7b6367d37174acc1f434508070937880420c9
|
data/.github/CODEOWNERS
CHANGED
@@ -1 +1 @@
|
|
1
|
-
* @guiocavalcanti
|
1
|
+
* @guiocavalcanti @julianalucena @ottony
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# For most projects, this workflow file will not need changing; you simply need
|
2
|
+
# to commit it to your repository.
|
3
|
+
#
|
4
|
+
# You may wish to alter this file to override the set of languages analyzed,
|
5
|
+
# or to provide custom queries or build logic.
|
6
|
+
#
|
7
|
+
# ******** NOTE ********
|
8
|
+
# We have attempted to detect the languages in your repository. Please check
|
9
|
+
# the `language` matrix defined below to confirm you have the correct set of
|
10
|
+
# supported CodeQL languages.
|
11
|
+
#
|
12
|
+
name: "CodeQL"
|
13
|
+
|
14
|
+
on:
|
15
|
+
push:
|
16
|
+
branches: [ "main" ]
|
17
|
+
pull_request:
|
18
|
+
# The branches below must be a subset of the branches above
|
19
|
+
branches: [ "main" ]
|
20
|
+
schedule:
|
21
|
+
- cron: '25 9 * * 0'
|
22
|
+
|
23
|
+
jobs:
|
24
|
+
analyze:
|
25
|
+
name: Analyze
|
26
|
+
runs-on: ubuntu-latest
|
27
|
+
permissions:
|
28
|
+
actions: read
|
29
|
+
contents: read
|
30
|
+
security-events: write
|
31
|
+
|
32
|
+
strategy:
|
33
|
+
fail-fast: false
|
34
|
+
matrix:
|
35
|
+
language: [ 'ruby' ]
|
36
|
+
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
37
|
+
# Use only 'java' to analyze code written in Java, Kotlin or both
|
38
|
+
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
|
39
|
+
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
40
|
+
|
41
|
+
steps:
|
42
|
+
- name: Checkout repository
|
43
|
+
uses: actions/checkout@v3
|
44
|
+
|
45
|
+
# Initializes the CodeQL tools for scanning.
|
46
|
+
- name: Initialize CodeQL
|
47
|
+
uses: github/codeql-action/init@v2
|
48
|
+
with:
|
49
|
+
languages: ${{ matrix.language }}
|
50
|
+
# If you wish to specify custom queries, you can do so here or in a config file.
|
51
|
+
# By default, queries listed here will override any specified in a config file.
|
52
|
+
# Prefix the list here with "+" to use these queries and those in the config file.
|
53
|
+
|
54
|
+
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
55
|
+
queries: security-extended,security-and-quality
|
56
|
+
|
57
|
+
|
58
|
+
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
59
|
+
# If this step fails, then you should remove it and run the build manually (see below)
|
60
|
+
- name: Autobuild
|
61
|
+
uses: github/codeql-action/autobuild@v2
|
62
|
+
|
63
|
+
# ℹ️ Command-line programs to run using the OS shell.
|
64
|
+
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
65
|
+
|
66
|
+
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
67
|
+
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
68
|
+
|
69
|
+
# - run: |
|
70
|
+
# echo "Run, Build Application using script"
|
71
|
+
# ./location_of_script_within_repo/buildscript.sh
|
72
|
+
|
73
|
+
- name: Perform CodeQL Analysis
|
74
|
+
uses: github/codeql-action/analyze@v2
|
75
|
+
with:
|
76
|
+
category: "/language:${{matrix.language}}"
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [0.3.1] - 2023-01-24
|
4
|
+
|
5
|
+
- Allows optional params on #register_signup
|
6
|
+
- Adds Reset feedback event
|
7
|
+
|
8
|
+
## [0.3.0] - 2022-05-06
|
9
|
+
|
10
|
+
- Allow registering feedbacks
|
11
|
+
- Allow registering logins
|
12
|
+
|
3
13
|
## [0.2.0] - 2022-05-06
|
4
14
|
|
5
15
|
- Allow registering signups without address
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
incognia_api (0.
|
4
|
+
incognia_api (0.3.1)
|
5
5
|
faraday
|
6
6
|
faraday_middleware
|
7
7
|
|
@@ -13,29 +13,33 @@ GEM
|
|
13
13
|
crack (0.4.5)
|
14
14
|
rexml
|
15
15
|
diff-lcs (1.4.4)
|
16
|
-
faraday (1.
|
16
|
+
faraday (1.10.3)
|
17
17
|
faraday-em_http (~> 1.0)
|
18
18
|
faraday-em_synchrony (~> 1.0)
|
19
19
|
faraday-excon (~> 1.1)
|
20
|
-
faraday-httpclient (~> 1.0
|
20
|
+
faraday-httpclient (~> 1.0)
|
21
|
+
faraday-multipart (~> 1.0)
|
21
22
|
faraday-net_http (~> 1.0)
|
22
|
-
faraday-net_http_persistent (~> 1.
|
23
|
+
faraday-net_http_persistent (~> 1.0)
|
23
24
|
faraday-patron (~> 1.0)
|
24
25
|
faraday-rack (~> 1.0)
|
25
|
-
|
26
|
+
faraday-retry (~> 1.0)
|
26
27
|
ruby2_keywords (>= 0.0.4)
|
27
28
|
faraday-em_http (1.0.0)
|
28
29
|
faraday-em_synchrony (1.0.0)
|
29
30
|
faraday-excon (1.1.0)
|
30
31
|
faraday-httpclient (1.0.1)
|
32
|
+
faraday-multipart (1.0.4)
|
33
|
+
multipart-post (~> 2)
|
31
34
|
faraday-net_http (1.0.1)
|
32
35
|
faraday-net_http_persistent (1.2.0)
|
33
36
|
faraday-patron (1.0.0)
|
34
37
|
faraday-rack (1.0.0)
|
35
|
-
|
38
|
+
faraday-retry (1.0.3)
|
39
|
+
faraday_middleware (1.2.0)
|
36
40
|
faraday (~> 1.0)
|
37
41
|
hashdiff (1.0.1)
|
38
|
-
multipart-post (2.
|
42
|
+
multipart-post (2.2.3)
|
39
43
|
public_suffix (4.0.6)
|
40
44
|
rake (13.0.3)
|
41
45
|
rexml (3.2.5)
|
data/README.md
CHANGED
@@ -64,6 +64,22 @@ assessment = api.register_signup(
|
|
64
64
|
|
65
65
|
```
|
66
66
|
|
67
|
+
It also supports optional parameters, for example:
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
address = Incognia::Address.new(line: "West 34th Street, New York City, NY 10001")
|
71
|
+
installation_id = "WlMksW+jh5GPhqWBorsV8yDihoSHHpmt+DpjJ7eYxpHhuO/5tuHTuA..."
|
72
|
+
external_id = "7b02736a-7718-4b83-8982-f68fb6f501fa"
|
73
|
+
|
74
|
+
assessment = api.register_signup(
|
75
|
+
installation_id: installation_id,
|
76
|
+
address: address,
|
77
|
+
external_id: external_id
|
78
|
+
)
|
79
|
+
|
80
|
+
# => #<OpenStruct id="...", device_id="...", risk_assessment="..", evidence=...>
|
81
|
+
```
|
82
|
+
|
67
83
|
### Getting a Signup
|
68
84
|
|
69
85
|
This method allows you to query the latest assessment for a given signup event, returning signup assessment, containing the risk assessment and supporting evidence:
|
@@ -75,6 +91,74 @@ assessment = api.get_signup_assessment(signup_id: "95a9fc56-f65e-436b-a87f-a1338
|
|
75
91
|
|
76
92
|
```
|
77
93
|
|
94
|
+
### Registering a Login
|
95
|
+
|
96
|
+
This method registers a new login for the given installation and account, returning a login assessment, containing the risk assessment and supporting evidence:
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
installation_id = "WlMksW+jh5GPhqWBorsV8yDihoSHHpmt+DpjJ7eYxpHhuO/5tuHTuA..."
|
100
|
+
account_id = 'account-identifier-123'
|
101
|
+
|
102
|
+
assessment = api.register_login(
|
103
|
+
installation_id: installation_id,
|
104
|
+
account_id: account_id,
|
105
|
+
)
|
106
|
+
|
107
|
+
# => #<OpenStruct id="...", device_id="...", risk_assessment="..", evidence=...>
|
108
|
+
|
109
|
+
```
|
110
|
+
|
111
|
+
It also supports optional parameters, for example:
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
installation_id = "WlMksW+jh5GPhqWBorsV8yDihoSHHpmt+DpjJ7eYxpHhuO/5tuHTuA..."
|
115
|
+
account_id = 'account-identifier-123'
|
116
|
+
external_id = 'some-external-identifier'
|
117
|
+
|
118
|
+
assessment = api.register_login(
|
119
|
+
installation_id: installation_id,
|
120
|
+
account_id: account_id,
|
121
|
+
external_id: external_id,
|
122
|
+
eval: false # can be used to register a new login without evaluating it
|
123
|
+
)
|
124
|
+
|
125
|
+
# => #<OpenStruct id="...", device_id="...", risk_assessment="..", evidence=...>
|
126
|
+
```
|
127
|
+
|
128
|
+
### Registering a Feedback
|
129
|
+
|
130
|
+
This method registers a feedback event for the given identifiers (optional arguments), returning true when success.
|
131
|
+
|
132
|
+
The `timestamp` argument should be a _Time_, _DateTime_ or an _Integer_ being the timestamp in milliseconds:
|
133
|
+
|
134
|
+
```ruby
|
135
|
+
account_id = "cdb2cfbb-8ad8-4668-b276-5fff9bbfdc96"
|
136
|
+
timestamp = DateTime.parse('2022-06-20 23:29:00 UTC-3')
|
137
|
+
|
138
|
+
success = api.register_feedback(
|
139
|
+
event: Incognia::Constants::FeedbackEvent::IDENTITY_FRAUD,
|
140
|
+
timestamp: timestamp,
|
141
|
+
account_id: account_id
|
142
|
+
)
|
143
|
+
|
144
|
+
# => true
|
145
|
+
```
|
146
|
+
|
147
|
+
For custom fraud, set the value of `event` with the corresponding code:
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
success = api.register_feedback(
|
151
|
+
event: 'custom_fraud_name'
|
152
|
+
timestamp: timestamp,
|
153
|
+
account_id: account_id,
|
154
|
+
installation_id: installation_id
|
155
|
+
)
|
156
|
+
|
157
|
+
# => true
|
158
|
+
```
|
159
|
+
|
160
|
+
Check the [documentation](https://developer.incognia.com) to see possible identifiers for each event type.
|
161
|
+
|
78
162
|
## Exception handling
|
79
163
|
|
80
164
|
Every method call can throw `APIError` and `APIAuthenticationError`.
|
data/lib/incognia/api.rb
CHANGED
@@ -15,9 +15,10 @@ module Incognia
|
|
15
15
|
host: "https://api.incognia.com/api")
|
16
16
|
end
|
17
17
|
|
18
|
-
def register_signup(installation_id:, address: nil)
|
18
|
+
def register_signup(installation_id:, address: nil, **opts)
|
19
19
|
params = { installation_id: installation_id }
|
20
|
-
params.merge!(
|
20
|
+
params.merge!(opts)
|
21
|
+
params.merge!(address&.to_hash) if address
|
21
22
|
|
22
23
|
response = connection.request(
|
23
24
|
:post,
|
@@ -36,6 +37,37 @@ module Incognia
|
|
36
37
|
|
37
38
|
SignupAssessment.from_hash(response.body) if response.success?
|
38
39
|
end
|
39
|
-
end
|
40
40
|
|
41
|
+
def register_login(installation_id:, account_id:, **opts)
|
42
|
+
params = {
|
43
|
+
type: :login,
|
44
|
+
installation_id: installation_id,
|
45
|
+
account_id: account_id,
|
46
|
+
}
|
47
|
+
params.merge!(opts)
|
48
|
+
|
49
|
+
response = connection.request(
|
50
|
+
:post,
|
51
|
+
'v2/authentication/transactions',
|
52
|
+
params
|
53
|
+
)
|
54
|
+
|
55
|
+
LoginAssessment.from_hash(response.body) if response.success?
|
56
|
+
end
|
57
|
+
|
58
|
+
def register_feedback(event: , timestamp: nil, **ids)
|
59
|
+
timestamp = timestamp.strftime('%s%L') if timestamp.respond_to? :strftime
|
60
|
+
|
61
|
+
params = { event: event, timestamp: timestamp&.to_i }.compact
|
62
|
+
params.merge!(ids)
|
63
|
+
|
64
|
+
response = connection.request(
|
65
|
+
:post,
|
66
|
+
'/api/v2/feedbacks',
|
67
|
+
params
|
68
|
+
)
|
69
|
+
|
70
|
+
response.success?
|
71
|
+
end
|
72
|
+
end
|
41
73
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Incognia
|
2
|
+
module Constants
|
3
|
+
module FeedbackEvent
|
4
|
+
ACCOUNT_TAKEOVER = 'account_takeover'.freeze
|
5
|
+
CHALLENGE_FAILED = 'challenge_failed'.freeze
|
6
|
+
CHALLENGE_PASSED = 'challenge_passed'.freeze
|
7
|
+
CHARGEBACK = 'chargeback'.freeze
|
8
|
+
CHARGEBACK_NOTIFICATION = 'chargeback_notification'.freeze
|
9
|
+
IDENTITY_FRAUD = 'identity_fraud'.freeze
|
10
|
+
MPOS_FRAUD = 'mpos_fraud'.freeze
|
11
|
+
PASSWORD_CHANGE_FAILED = 'password_change_failed'.freeze
|
12
|
+
PASSWORD_CHANGED_SUCCESSFULLY = 'password_changed_successfully'.freeze
|
13
|
+
PROMOTION_ABUSE = 'promotion_abuse'.freeze
|
14
|
+
RESET = 'reset'.freeze
|
15
|
+
VERIFIED = 'verified'.freeze
|
16
|
+
|
17
|
+
SIGNUP_ACCEPTED = 'signup_accepted'.freeze
|
18
|
+
SIGNUP_DECLINED = 'signup_declined'.freeze
|
19
|
+
|
20
|
+
LOGIN_ACCEPTED = 'login_accepted'.freeze
|
21
|
+
LOGIN_DECLINED = 'login_declined'.freeze
|
22
|
+
|
23
|
+
PAYMENT_ACCEPTED = 'payment_accepted'.freeze
|
24
|
+
PAYMENT_ACCEPTED_BY_CONTROL_GROUP = 'payment_accepted_by_control_group'.freeze
|
25
|
+
PAYMENT_ACCEPTED_BY_THIRD_PARTY = 'payment_accepted_by_third_party'.freeze
|
26
|
+
PAYMENT_DECLINED = 'payment_declined'.freeze
|
27
|
+
PAYMENT_DECLINED_BY_ACQUIRER = 'payment_declined_by_acquirer'.freeze
|
28
|
+
PAYMENT_DECLINED_BY_BUSINESS = 'payment_declined_by_business'.freeze
|
29
|
+
PAYMENT_DECLINED_BY_MANUAL_REVIEW = 'payment_declined_by_manual_review'.freeze
|
30
|
+
PAYMENT_DECLINED_BY_RISK_ANALYSIS = 'payment_declined_by_risk_analysis'.freeze
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/incognia/version.rb
CHANGED
data/lib/incognia.rb
CHANGED
@@ -8,8 +8,11 @@ require_relative "incognia/api"
|
|
8
8
|
|
9
9
|
require_relative "incognia/resources/api_resource"
|
10
10
|
require_relative "incognia/resources/signup_assessment"
|
11
|
+
require_relative "incognia/resources/login_assessment"
|
11
12
|
require_relative "incognia/resources/credentials"
|
12
13
|
|
14
|
+
require_relative "incognia/constants/feedback_event"
|
15
|
+
|
13
16
|
module Incognia
|
14
17
|
class APIError < StandardError
|
15
18
|
attr_reader :message, :errors, :status
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: incognia_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guilherme Cavalcanti
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -46,6 +46,7 @@ extensions: []
|
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
48
|
- ".github/CODEOWNERS"
|
49
|
+
- ".github/workflows/codeql.yml"
|
49
50
|
- ".github/workflows/main.yml"
|
50
51
|
- ".gitignore"
|
51
52
|
- ".rspec"
|
@@ -62,8 +63,10 @@ files:
|
|
62
63
|
- lib/incognia/address.rb
|
63
64
|
- lib/incognia/api.rb
|
64
65
|
- lib/incognia/client.rb
|
66
|
+
- lib/incognia/constants/feedback_event.rb
|
65
67
|
- lib/incognia/resources/api_resource.rb
|
66
68
|
- lib/incognia/resources/credentials.rb
|
69
|
+
- lib/incognia/resources/login_assessment.rb
|
67
70
|
- lib/incognia/resources/signup_assessment.rb
|
68
71
|
- lib/incognia/util.rb
|
69
72
|
- lib/incognia/version.rb
|
@@ -73,7 +76,7 @@ metadata:
|
|
73
76
|
homepage_uri: https://github.com/inloco/incognia-api-ruby
|
74
77
|
source_code_uri: https://github.com/inloco/incognia-api-ruby
|
75
78
|
changelog_uri: https://github.com/inloco/incognia-api-ruby/blob/master/
|
76
|
-
post_install_message:
|
79
|
+
post_install_message:
|
77
80
|
rdoc_options: []
|
78
81
|
require_paths:
|
79
82
|
- lib
|
@@ -88,8 +91,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
91
|
- !ruby/object:Gem::Version
|
89
92
|
version: '0'
|
90
93
|
requirements: []
|
91
|
-
rubygems_version: 3.1.
|
92
|
-
signing_key:
|
94
|
+
rubygems_version: 3.1.4
|
95
|
+
signing_key:
|
93
96
|
specification_version: 4
|
94
97
|
summary: Official Ruby lib for communicating with Incognia API
|
95
98
|
test_files: []
|