authtrail 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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