authtrail 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/LICENSE.txt +1 -1
- data/README.md +28 -10
- data/lib/auth_trail/manager.rb +18 -23
- data/lib/auth_trail/version.rb +1 -1
- data/lib/generators/authtrail/install_generator.rb +4 -0
- data/lib/generators/authtrail/templates/initializer.rb.tt +14 -0
- metadata +10 -107
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e54d90f6f3527e7f9f37276deda00150f33b472069b97bd66b0d27f0a3a44c6f
|
4
|
+
data.tar.gz: aa1cd0b4fc8e01590efbd51cd872a57a3ef6e984c844166f261ebd01230a771a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b640a2f9705502d2405fc15d1bf4bf6082cac388addef26b3592514af117508db8b5f35306f5bd93555472f25e58a86b42d1ade276083bf4b4c4db6dea284ec8
|
7
|
+
data.tar.gz: 80475eaba75303cffdf3313706a3a58e73718804414002559780a55a1041616de61da596f9b67f79b57e71998e9c27a8c590faefdb0febaaa9834fd74b897a55
|
data/CHANGELOG.md
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -47,7 +47,7 @@ AuthTrail.exclude_method = lambda do |data|
|
|
47
47
|
end
|
48
48
|
```
|
49
49
|
|
50
|
-
Add or modify data
|
50
|
+
Add or modify data - also add new fields to the `login_activities` table if needed
|
51
51
|
|
52
52
|
```ruby
|
53
53
|
AuthTrail.transform_method = lambda do |data, request|
|
@@ -95,35 +95,53 @@ The `LoginActivity` model uses a [polymorphic association](https://guides.rubyon
|
|
95
95
|
|
96
96
|
## Geocoding
|
97
97
|
|
98
|
-
|
98
|
+
AuthTrail uses [Geocoder](https://github.com/alexreisner/geocoder) for geocoding. We recommend configuring [local geocoding](#local-geocoding) so IP addresses are not sent to a 3rd party service. If you do use a 3rd party service and adhere to GDPR, be sure to add it to your subprocessor list.
|
99
|
+
|
100
|
+
To enable geocoding, update `config/initializers/authtrail.rb`:
|
99
101
|
|
100
102
|
```ruby
|
101
|
-
AuthTrail.geocode =
|
103
|
+
AuthTrail.geocode = true
|
102
104
|
```
|
103
105
|
|
104
|
-
Set job queue
|
106
|
+
Geocoding is performed in a background job so it doesn’t slow down web requests. Set the job queue with:
|
105
107
|
|
106
108
|
```ruby
|
107
109
|
AuthTrail.job_queue = :low_priority
|
108
110
|
```
|
109
111
|
|
110
|
-
### Geocoding
|
111
|
-
|
112
|
-
To avoid calls to a remote API, download the [GeoLite2 City database](https://dev.maxmind.com/geoip/geoip2/geolite2/) and configure Geocoder to use it.
|
112
|
+
### Local Geocoding
|
113
113
|
|
114
|
-
Add this line to your application’s Gemfile:
|
114
|
+
For privacy and performance, we recommend geocoding locally. Add this line to your application’s Gemfile:
|
115
115
|
|
116
116
|
```ruby
|
117
117
|
gem 'maxminddb'
|
118
118
|
```
|
119
119
|
|
120
|
-
|
120
|
+
For city-level geocoding, download the [GeoLite2 City database](https://dev.maxmind.com/geoip/geoip2/geolite2/) and create `config/initializers/geocoder.rb` with:
|
121
121
|
|
122
122
|
```ruby
|
123
123
|
Geocoder.configure(
|
124
124
|
ip_lookup: :geoip2,
|
125
125
|
geoip2: {
|
126
|
-
file:
|
126
|
+
file: "path/to/GeoLite2-City.mmdb"
|
127
|
+
}
|
128
|
+
)
|
129
|
+
```
|
130
|
+
|
131
|
+
For country-level geocoding, install the `geoip-database` package. It’s preinstalled on Heroku. For Ubuntu, use:
|
132
|
+
|
133
|
+
```sh
|
134
|
+
sudo apt-get install geoip-database
|
135
|
+
```
|
136
|
+
|
137
|
+
And create `config/initializers/geocoder.rb` with:
|
138
|
+
|
139
|
+
```ruby
|
140
|
+
Geocoder.configure(
|
141
|
+
ip_lookup: :maxmind_local,
|
142
|
+
maxmind_local: {
|
143
|
+
file: "/usr/share/GeoIP/GeoIP.dat",
|
144
|
+
package: :country
|
127
145
|
}
|
128
146
|
)
|
129
147
|
```
|
data/lib/auth_trail/manager.rb
CHANGED
@@ -2,34 +2,29 @@ module AuthTrail
|
|
2
2
|
module Manager
|
3
3
|
class << self
|
4
4
|
def after_set_user(user, auth, opts)
|
5
|
-
|
6
|
-
AuthTrail.safely do
|
7
|
-
request = ActionDispatch::Request.new(auth.env)
|
5
|
+
request = ActionDispatch::Request.new(auth.env)
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
7
|
+
AuthTrail.track(
|
8
|
+
strategy: detect_strategy(auth),
|
9
|
+
scope: opts[:scope].to_s,
|
10
|
+
identity: AuthTrail.identity_method.call(request, opts, user),
|
11
|
+
success: true,
|
12
|
+
request: request,
|
13
|
+
user: user
|
14
|
+
)
|
18
15
|
end
|
19
16
|
|
20
17
|
def before_failure(env, opts)
|
21
|
-
|
22
|
-
request = ActionDispatch::Request.new(env)
|
18
|
+
request = ActionDispatch::Request.new(env)
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
20
|
+
AuthTrail.track(
|
21
|
+
strategy: detect_strategy(env["warden"]),
|
22
|
+
scope: opts[:scope].to_s,
|
23
|
+
identity: AuthTrail.identity_method.call(request, opts, nil),
|
24
|
+
success: false,
|
25
|
+
request: request,
|
26
|
+
failure_reason: opts[:message].to_s
|
27
|
+
)
|
33
28
|
end
|
34
29
|
|
35
30
|
private
|
data/lib/auth_trail/version.rb
CHANGED
@@ -10,6 +10,10 @@ module Authtrail
|
|
10
10
|
migration_template "login_activities_migration.rb", "db/migrate/create_login_activities.rb", migration_version: migration_version
|
11
11
|
end
|
12
12
|
|
13
|
+
def copy_templates
|
14
|
+
template "initializer.rb", "config/initializers/authtrail.rb"
|
15
|
+
end
|
16
|
+
|
13
17
|
def generate_model
|
14
18
|
template "login_activity_model.rb", "app/models/login_activity.rb"
|
15
19
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# set to true for geocoding
|
2
|
+
# we recommend configuring local geocoding first
|
3
|
+
# see https://github.com/ankane/authtrail#geocoding
|
4
|
+
AuthTrail.geocode = false
|
5
|
+
|
6
|
+
# add or modify data
|
7
|
+
# AuthTrail.transform_method = lambda do |data, request|
|
8
|
+
# data[:request_id] = request.request_id
|
9
|
+
# end
|
10
|
+
|
11
|
+
# exclude certain attempts from tracking
|
12
|
+
# AuthTrail.exclude_method = lambda do |data|
|
13
|
+
# data[:identity] == "capybara@example.org"
|
14
|
+
# end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authtrail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5'
|
19
|
+
version: '5.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '5'
|
26
|
+
version: '5.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5'
|
33
|
+
version: '5.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '5'
|
40
|
+
version: '5.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: warden
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,106 +66,8 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: bundler
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: minitest
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '5'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '5'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: combustion
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rails
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: sqlite3
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: devise
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - ">="
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
69
|
description:
|
168
|
-
email: andrew@
|
70
|
+
email: andrew@ankane.org
|
169
71
|
executables: []
|
170
72
|
extensions: []
|
171
73
|
extra_rdoc_files: []
|
@@ -179,6 +81,7 @@ files:
|
|
179
81
|
- lib/auth_trail/version.rb
|
180
82
|
- lib/authtrail.rb
|
181
83
|
- lib/generators/authtrail/install_generator.rb
|
84
|
+
- lib/generators/authtrail/templates/initializer.rb.tt
|
182
85
|
- lib/generators/authtrail/templates/login_activities_migration.rb.tt
|
183
86
|
- lib/generators/authtrail/templates/login_activity_model.rb.tt
|
184
87
|
homepage: https://github.com/ankane/authtrail
|
@@ -193,14 +96,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
193
96
|
requirements:
|
194
97
|
- - ">="
|
195
98
|
- !ruby/object:Gem::Version
|
196
|
-
version: '2.
|
99
|
+
version: '2.6'
|
197
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
101
|
requirements:
|
199
102
|
- - ">="
|
200
103
|
- !ruby/object:Gem::Version
|
201
104
|
version: '0'
|
202
105
|
requirements: []
|
203
|
-
rubygems_version: 3.
|
106
|
+
rubygems_version: 3.2.3
|
204
107
|
signing_key:
|
205
108
|
specification_version: 4
|
206
109
|
summary: Track Devise login activity
|