authtrail 0.3.0 → 0.3.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e54d90f6f3527e7f9f37276deda00150f33b472069b97bd66b0d27f0a3a44c6f
4
- data.tar.gz: aa1cd0b4fc8e01590efbd51cd872a57a3ef6e984c844166f261ebd01230a771a
3
+ metadata.gz: eb0329a5efc01b445b4686a7e1712d6937f57d52443ad880802c5a79c6e746c4
4
+ data.tar.gz: d4ac5c96149eebd39ba9964303758e48b537e1823345e27117ce35bf1ff7752a
5
5
  SHA512:
6
- metadata.gz: b640a2f9705502d2405fc15d1bf4bf6082cac388addef26b3592514af117508db8b5f35306f5bd93555472f25e58a86b42d1ade276083bf4b4c4db6dea284ec8
7
- data.tar.gz: 80475eaba75303cffdf3313706a3a58e73718804414002559780a55a1041616de61da596f9b67f79b57e71998e9c27a8c590faefdb0febaaa9834fd74b897a55
6
+ metadata.gz: 837b7df27b74e7c4ac54855bc40584c0fb7ed5291abb5f7627d13d9bd5fa8adfb25bdb50f2292721c67394ca5a8274b8e95a881bf63213dea7a73b927da204ae
7
+ data.tar.gz: 20b98bad8507a73e67fececc5cb2811a98013e4f449ab8d8b9c97227a4ffb33ecdf1237228c3282ebd3449f2b04cd080369b75d3c1f4f6fa585155169d1433cd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.3.1 (2021-03-03)
2
+
3
+ - Added `--lockbox` option to install generator
4
+
1
5
  ## 0.3.0 (2021-03-01)
2
6
 
3
7
  - Disabled geocoding by default for new installations
data/README.md CHANGED
@@ -14,7 +14,14 @@ Add this line to your application’s Gemfile:
14
14
  gem 'authtrail'
15
15
  ```
16
16
 
17
- And run:
17
+ To encrypt email and IP addresses, install [Lockbox](https://github.com/ankane/lockbox) and [Blind Index](https://github.com/ankane/blind_index) and run:
18
+
19
+ ```sh
20
+ rails generate authtrail:install --lockbox
21
+ rails db:migrate
22
+ ```
23
+
24
+ If you prefer not to encrypt data, run:
18
25
 
19
26
  ```sh
20
27
  rails generate authtrail:install
@@ -95,7 +102,7 @@ The `LoginActivity` model uses a [polymorphic association](https://guides.rubyon
95
102
 
96
103
  ## Geocoding
97
104
 
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.
105
+ AuthTrail uses [Geocoder](https://github.com/alexreisner/geocoder) for geocoding. We recommend configuring [local geocoding](#local-geocoding) or [load balancer geocoding](#load-balancer-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
106
 
100
107
  To enable geocoding, update `config/initializers/authtrail.rb`:
101
108
 
@@ -146,17 +153,25 @@ Geocoder.configure(
146
153
  )
147
154
  ```
148
155
 
149
- ## Data Protection
156
+ ### Load Balancer Geocoding
157
+
158
+ Some load balancers can add geocoding information to request headers.
150
159
 
151
- Protect the privacy of your users by encrypting fields that contain personal data, such as `identity` and `ip`. [Lockbox](https://github.com/ankane/lockbox) is great for this. Use [Blind Index](https://github.com/ankane/blind_index) so you can still query the fields.
160
+ - [nginx](https://nginx.org/en/docs/http/ngx_http_geoip_module.html)
161
+ - [Google Cloud](https://cloud.google.com/load-balancing/docs/custom-headers)
162
+ - [Cloudflare](https://support.cloudflare.com/hc/en-us/articles/200168236-Configuring-Cloudflare-IP-Geolocation)
152
163
 
153
164
  ```ruby
154
- class LoginActivity < ApplicationRecord
155
- encrypts :identity, :ip
156
- blind_index :identity, :ip
165
+ AuthTrail.geocode = false
166
+ AuthTrail.transform_method = lambda do |data, request|
167
+ data[:country] = request.headers["<country-header>"]
168
+ data[:region] = request.headers["<region-header>"]
169
+ data[:city] = request.headers["<city-header>"]
157
170
  end
158
171
  ```
159
172
 
173
+ Check out [this example](https://github.com/ankane/authtrail/issues/40)
174
+
160
175
  ## Other Notes
161
176
 
162
177
  We recommend using this in addition to Devise’s `Lockable` module and [Rack::Attack](https://github.com/kickstarter/rack-attack).
@@ -1,3 +1,3 @@
1
1
  module AuthTrail
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -6,6 +6,8 @@ module Authtrail
6
6
  include ActiveRecord::Generators::Migration
7
7
  source_root File.join(__dir__, "templates")
8
8
 
9
+ class_option :lockbox, type: :boolean
10
+
9
11
  def copy_migration
10
12
  migration_template "login_activities_migration.rb", "db/migrate/create_login_activities.rb", migration_version: migration_version
11
13
  end
@@ -15,12 +17,36 @@ module Authtrail
15
17
  end
16
18
 
17
19
  def generate_model
18
- template "login_activity_model.rb", "app/models/login_activity.rb"
20
+ if lockbox?
21
+ template "model_lockbox.rb", "app/models/login_activity.rb"
22
+ else
23
+ template "model.rb", "app/models/login_activity.rb"
24
+ end
19
25
  end
20
26
 
21
27
  def migration_version
22
28
  "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
23
29
  end
30
+
31
+ def identity_column
32
+ if lockbox?
33
+ "t.text :identity_ciphertext\n t.string :identity_bidx, index: true"
34
+ else
35
+ "t.string :identity, index: true"
36
+ end
37
+ end
38
+
39
+ def ip_column
40
+ if lockbox?
41
+ "t.text :ip_ciphertext\n t.string :ip_bidx, index: true"
42
+ else
43
+ "t.string :ip, index: true"
44
+ end
45
+ end
46
+
47
+ def lockbox?
48
+ options[:lockbox]
49
+ end
24
50
  end
25
51
  end
26
52
  end
@@ -3,12 +3,12 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
3
3
  create_table :login_activities do |t|
4
4
  t.string :scope
5
5
  t.string :strategy
6
- t.string :identity
6
+ <%= identity_column %>
7
7
  t.boolean :success
8
8
  t.string :failure_reason
9
9
  t.references :user, polymorphic: true
10
10
  t.string :context
11
- t.string :ip
11
+ <%= ip_column %>
12
12
  t.text :user_agent
13
13
  t.text :referrer
14
14
  t.string :city
@@ -18,8 +18,5 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
18
18
  t.float :longitude
19
19
  t.datetime :created_at
20
20
  end
21
-
22
- add_index :login_activities, :identity
23
- add_index :login_activities, :ip
24
21
  end
25
22
  end
@@ -0,0 +1,14 @@
1
+ class LoginActivity < ApplicationRecord
2
+ belongs_to :user, polymorphic: true, optional: true
3
+
4
+ encrypts :identity, :ip
5
+ blind_index :identity, :ip
6
+
7
+ before_save :reduce_precision
8
+
9
+ # reduce precision to city level to protect IP
10
+ def reduce_precision
11
+ self.latitude = latitude&.round(1) if try(:latitude_changed?)
12
+ self.longitude = longitude&.round(1) if try(:longitude_changed?)
13
+ end
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.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-02 00:00:00.000000000 Z
11
+ date: 2021-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -83,7 +83,8 @@ files:
83
83
  - lib/generators/authtrail/install_generator.rb
84
84
  - lib/generators/authtrail/templates/initializer.rb.tt
85
85
  - lib/generators/authtrail/templates/login_activities_migration.rb.tt
86
- - lib/generators/authtrail/templates/login_activity_model.rb.tt
86
+ - lib/generators/authtrail/templates/model.rb.tt
87
+ - lib/generators/authtrail/templates/model_lockbox.rb.tt
87
88
  homepage: https://github.com/ankane/authtrail
88
89
  licenses:
89
90
  - MIT