omniauth-identity 3.0.1 → 3.0.6

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: 7dcc9a20a3a2b96b6a97f6319eae36df210fed3cea3faa2f2251780e37ac1992
4
- data.tar.gz: 1c5644fef5b8e3381063228ef0d9d512db76d4358643d4685f19ea35c7efefe0
3
+ metadata.gz: 469e5989686f13b8e924e7efc5cfbd2f205a13d45da6410f454f2d0b14e884ea
4
+ data.tar.gz: 38424bbbc877d8d18aa4a35916697c59b31379809e05e5ff620de0089f53759c
5
5
  SHA512:
6
- metadata.gz: 900adc20c287fd19c5fb1545711a715a5235b51fd5f5cdff9f5e26445efe91e7db7fbdb59035ac64d1621c10b810183ff54beb701e940d6dd8908edb9e15532f
7
- data.tar.gz: bb1f0af1551b7f9de8bf3ea602a11780feb2f40390cd752fe201157179d985529ab39df4373803acda4fd1e7927678ed844854ff0493c18d2f527fdc21af3608
6
+ metadata.gz: 1458cc73c99ca0bb267f9730d5e64daa8d6b7460720dd5790d443292cc8e938434190fcaf55195e5f039ffd50286018045ac2e0ed8c9a8e83eb5cae5878dcb62
7
+ data.tar.gz: 439a1bd2702a7d5a729be16ad65fdd079a6a867f9ffa26c823b63d675dcaf2127311097b4f51a8c42425c33aba1d490dc46abf92d4bdab6c0185e191952d244c
data/CHANGELOG.md CHANGED
@@ -6,9 +6,61 @@ All notable changes to this project will be documented in this file.
6
6
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
7
7
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
8
 
9
+ ## [Unreleased]
10
+
11
+ ## [3.0.5] - 2021-03-19
12
+
13
+ ### Fixed
14
+
15
+ - Fix breaking changes introduced by [#86's](https://github.com/omniauth/omniauth-identity/pull/86) introduction of `:on_validation`
16
+
17
+ ### Added
18
+
19
+ - Define `#save`, `#persisted?` and `::create` on `Omniauth::Identity::Model`
20
+ - Add `@since` YARD tags to interface methods
21
+ - Refactor `Omniauth::Strategies::Identity.registration_phase` to support `Omniauth::Identity::Model`-inheriting classes that do not define `#save`.
22
+ - This support will be dropped in v4.0.
23
+
24
+ ## [3.0.4] - 2021-02-14
25
+
26
+ ### Added
27
+
28
+ - Add support for [sequel ORM](http://sequel.jeremyevans.net/)
29
+
30
+ ## [3.0.3] - 2021-02-14
31
+
32
+ ### Added
33
+
34
+ - Add option `:on_validation`, which can be used to add a Captcha
35
+ - See [example here](https://github.com/omniauth/omniauth-identity/pull/86#issue-63225122)
36
+ - Add support for nobrainer, an ORM for RethinkDB
37
+ - Validation error message on invalid registration form submission
38
+
39
+ ### Removed
40
+
41
+ - ruby-head build... simply too slow
42
+
43
+ ## [3.0.2] - 2021-02-14
44
+
45
+ ### Fixed
46
+
47
+ - Github Actions CI Build for Ruby 2.4, 3.0 and ruby-head
48
+ - Updated copyright
49
+ - Code style cleanup
50
+ - Added Code Climate "Quality"
51
+ - Updated Readme
52
+
53
+ ## [3.0.1] - 2021-02-14
54
+
55
+ ### Fixed
56
+
57
+ - Github Actions CI Build for various Rubies
58
+
9
59
  ## [3.0] - 2021-02-13
10
60
 
11
61
  ### Added
62
+
63
+ - Compatibility with Ruby 3
12
64
  - Add option `:enable_login` to bypass OmniAuth disabling of GET method (default `true`)
13
65
  - NOTE: This restores compatibility between this gem and the current, core, omniauth gem!
14
66
  - README updates, including a rename to README.md
@@ -20,6 +72,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
20
72
  - Documentation in README.md
21
73
 
22
74
  ### Removed
75
+
23
76
  - Support for Rubies < 2.4
24
77
  - Support for DataMapper, which died long ago.
25
78
  - Unwanted git artifacts
@@ -27,10 +80,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
27
80
  ## [2.0] - 2020-09-01
28
81
 
29
82
  ### Added
83
+
30
84
  - CHANGELOG to maintain a history of changes.
31
85
  - Include mongoid-rspec gem.
32
86
 
33
87
  ### Changed
88
+
34
89
  - Fix failing Specs
35
90
  - Update Spec syntax to RSpec 3
36
91
  - Fix deprecation Warnings
data/LICENSE CHANGED
@@ -1,4 +1,5 @@
1
- Copyright (c) 2020- Andrew Roberts, and Jellybooks Ltd.
1
+ Copyright (c) 2021 OmniAuth-Identity Maintainers
2
+ Copyright (c) 2020 Peter Boling, Andrew Roberts, and Jellybooks Ltd.
2
3
  Copyright (c) 2010-2015 Michael Bleigh and Intridea, Inc.
3
4
 
4
5
  Permission is hereby granted, free of charge, to any person obtaining
data/README.md CHANGED
@@ -1,16 +1,26 @@
1
1
  # OmniAuth Identity
2
2
 
3
+ [![Version](https://img.shields.io/gem/v/omniauth-identity.svg)](https://rubygems.org/gems/omniauth-identity)
4
+ [![Depfu](https://badges.depfu.com/badges/6c9b45362951b872127f9e46d39bed76/count.svg)](https://depfu.com/github/omniauth/omniauth-identity?project_id=22381)
5
+ [![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fomniauth%2Fomniauth-identity%2Fbadge&style=flat)](https://actions-badge.atrox.dev/omniauth/omniauth-identity/goto)
6
+ [![Maintainability](https://api.codeclimate.com/v1/badges/621d6211cb2e0959ce00/maintainability)](https://codeclimate.com/github/omniauth/omniauth-identity/maintainability)
7
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/621d6211cb2e0959ce00/test_coverage)](https://codeclimate.com/github/omniauth/omniauth-identity/test_coverage)
8
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
9
+ [![Open Source Helpers](https://www.codetriage.com/omniauth/omniauth-identity/badges/users.svg)](https://www.codetriage.com/omniauth/omniauth-identity)
10
+ [![Downloads Rank](https://img.shields.io/gem/rd/omniauth-identity.svg)](https://rubygems.org/gems/omniauth-identity)
11
+
3
12
  The OmniAuth Identity gem provides a way for applications to utilize a
4
- traditional login/password based authentication system without the need
13
+ traditional username/password based authentication system without the need
5
14
  to give up the simple authentication flow provided by OmniAuth. Identity
6
15
  is designed on purpose to be as featureless as possible: it provides the
7
16
  basic construct for user management and then gets out of the way.
8
17
 
9
18
  ## Compatibility
10
19
 
11
- This gem is compatible with, as of Feb 2021:
12
- • latest released version of omniauth, v2.0.2
13
- Ruby 2.4, 2.5, 2.6, 2.7
20
+ This gem is compatible with, as of Feb 2021, version 3:
21
+
22
+ * Latest released version of omniauth, v2.0.2
23
+ * Ruby 2.4, 2.5, 2.6, 2.7, 3.0, ruby-head
14
24
 
15
25
  ## Installation
16
26
 
@@ -48,6 +58,13 @@ with `:model` argument above) that will be able to persist the information
48
58
  provided by the user. Luckily for you, there are pre-built models for popular
49
59
  ORMs that make this dead simple.
50
60
 
61
+ Once you've got an `Identity` persistence model and the strategy up and
62
+ running, you can point users to `/auth/identity` and it will request
63
+ that they log in or give them the opportunity to sign up for an account.
64
+ Once they have authenticated with their identity, OmniAuth will call
65
+ through to `/auth/identity/callback` with the same kinds of information
66
+ it would had the user authenticated through an external provider.
67
+
51
68
  **Note:** OmniAuth Identity is different from many other user authentication
52
69
  systems in that it is *not* built to store authentication information in your primary
53
70
  `User` model. Instead, the `Identity` model should be **associated** with your
@@ -68,52 +85,42 @@ class Identity < OmniAuth::Identity::Models::ActiveRecord
68
85
  end
69
86
  ```
70
87
 
71
- ### Mongoid
88
+ ### Sequel
72
89
 
73
- Include the `OmniAuth::Identity::Models::Mongoid` mixin and specify
74
- fields that you will need.
90
+ [Sequel](http://sequel.jeremyevans.net/) is an alternative to ActiveRecord.
75
91
 
76
- ```ruby
77
- class Identity
78
- include Mongoid::Document
79
- include OmniAuth::Identity::Models::Mongoid
92
+ Just include `OmniAuth::Identity::Models::Sequel` mixin, and specify
93
+ whatever else you will need.
80
94
 
81
- field :email, type: String
82
- field :name, type: String
83
- field :password_digest, type: String
95
+ ```ruby
96
+ class SequelTestIdentity < Sequel::Model
97
+ include OmniAuth::Identity::Models::Sequel
98
+ auth_key :email
99
+ # whatever else you want!
84
100
  end
85
101
  ```
86
102
 
87
- ### MongoMapper
88
-
89
- Unfortunately MongoMapper is **not supported** in `omniauth-identity` from >= v2.0 as a result of it
90
- not being maintained for several years.
91
103
 
92
- It wasn't possible to include Mongoid *and* MongoMapper due to incompatible gem version
93
- requirements. Therefore precedence was given to Mongoid as it is significantly more
94
- popular and actively maintained.
95
-
96
- ### DataMapper
104
+ ### Mongoid
97
105
 
98
- Include the `OmniAuth::Identity::Models::DataMapper` mixin and specify
106
+ Include the `OmniAuth::Identity::Models::Mongoid` mixin and specify
99
107
  fields that you will need.
100
108
 
101
109
  ```ruby
102
110
  class Identity
103
- include DataMapper::Resource
104
- include OmniAuth::Identity::Models::DataMapper
105
-
106
- property :id, Serial
107
- property :email, String
108
- property :password_digest, Text
111
+ include Mongoid::Document
112
+ include OmniAuth::Identity::Models::Mongoid
109
113
 
110
- attr_accessor :password_confirmation
114
+ field :email, type: String
115
+ field :name, type: String
116
+ field :password_digest, type: String
111
117
  end
112
118
  ```
113
119
 
114
120
  ### CouchPotato
115
121
 
116
- Include the `OmniAuth::Identity::Models::CouchPotatoModule` mixin and specify fields that you will need.
122
+ Include the `OmniAuth::Identity::Models::CouchPotatoModule` mixin and specify
123
+ fields that you will need.
117
124
 
118
125
  ```ruby
119
126
  class Identity
@@ -131,13 +138,25 @@ class Identity
131
138
  end
132
139
  ```
133
140
 
134
- Once you've got an `Identity` persistence model and the strategy up and
135
- running, you can point users to `/auth/identity` and it will request
136
- that they log in or give them the opportunity to sign up for an account.
137
- Once they have authenticated with their identity, OmniAuth will call
138
- through to `/auth/identity/callback` with the same kinds of information
139
- it would had the user authenticated through an external provider.
140
- Simple!
141
+ ### NoBrainer
142
+
143
+ [NoBrainer](http://nobrainer.io/) is an ORM for [RethinkDB](https://rethinkdb.com/).
144
+
145
+ Include the `OmniAuth::Identity::Models::NoBrainer` mixin and specify
146
+ fields that you will need.
147
+
148
+ ```ruby
149
+ class Identity
150
+ include NoBrainer::Document
151
+ include OmniAuth::Identity::Models::NoBrainer
152
+
153
+ auth_key :email
154
+ end
155
+ ```
156
+
157
+ ### Ruby Object Mapper
158
+
159
+ Would love to add a mixin for the [Ruby Object Mapper (ROM)](https://rom-rb.org/) if anyone wants to work on it!
141
160
 
142
161
  ## Custom Auth Model
143
162
 
@@ -226,12 +245,32 @@ Note: Be careful when customizing `locate_conditions`. The best way to modify t
226
245
  to copy the default value, and then add to the hash. Removing the default condition will almost
227
246
  always break things!
228
247
 
248
+ ## Customizing Other Things
249
+
250
+ From the code - here are the options we have for you, a couple of which are documented above, and the rest are documented... in the specs we hope!?
251
+ ```
252
+ option :fields, %i[name email]
253
+
254
+ # Primary Feature Switches:
255
+ option :enable_registration, true # See #other_phase and #request_phase
256
+ option :enable_login, true # See #other_phase
257
+
258
+ # Customization Options:
259
+ option :on_login, nil # See #request_phase
260
+ option :on_validation, nil # See #registration_phase
261
+ option :on_registration, nil # See #registration_phase
262
+ option :on_failed_registration, nil # See #registration_phase
263
+ option :locate_conditions, ->(req) { { model.auth_key => req['auth_key'] } }
264
+ ```
265
+
266
+ Please contribute some documentation if you have the gumption! The maintainer's time is limited, and sometimes the authors of PRs with new options don't update the _this_ readme. 😭
267
+
229
268
  ## License
230
269
 
231
270
  MIT License. See LICENSE for details.
232
271
 
233
272
  ## Copyright
234
273
 
235
- Copyright (c) 2021 OmniAuth-Identity Maintainers
236
- Copyright (c) 2020 Peter Boling, Andrew Roberts, and Jellybooks Ltd.
237
- Copyright (c) 2010-2015 Michael Bleigh, and Intridea, Inc.
274
+ * Copyright (c) 2021 OmniAuth-Identity Maintainers
275
+ * Copyright (c) 2020 Peter Boling, Andrew Roberts, and Jellybooks Ltd.
276
+ * Copyright (c) 2010-2015 Michael Bleigh, and Intridea, Inc.
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'omniauth-identity/version'
2
4
  require 'omniauth/identity'
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module OmniAuth
2
4
  module Identity
3
- VERSION = '3.0.1'
5
+ VERSION = '3.0.6'
4
6
  end
5
7
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'omniauth'
2
4
 
3
5
  module OmniAuth
@@ -12,6 +14,8 @@ module OmniAuth
12
14
  autoload :ActiveRecord, 'omniauth/identity/models/active_record'
13
15
  autoload :Mongoid, 'omniauth/identity/models/mongoid'
14
16
  autoload :CouchPotatoModule, 'omniauth/identity/models/couch_potato'
17
+ autoload :NoBrainer, 'omniauth/identity/models/no_brainer'
18
+ autoload :Sequel, 'omniauth/identity/models/sequel'
15
19
  end
16
20
  end
17
21
  end
@@ -1,24 +1,34 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module OmniAuth
2
4
  module Identity
3
5
  # This module provides an includable interface for implementing the
4
6
  # necessary API for OmniAuth Identity to properly locate identities
5
- # and provide all necessary information. All methods marked as
6
- # abstract must be implemented in the including class for things to
7
- # work properly.
7
+ # and provide all necessary information.
8
+ #
9
+ # All methods marked as abstract must be implemented in the
10
+ # including class for things to work properly.
11
+ #
12
+ ### Singleton API
13
+ #
14
+ # * locate(key)
15
+ # * create(*args) - Deprecated in v3.0.5; Will be removed in v4.0
16
+ #
17
+ ### Instance API
18
+ #
19
+ # * save
20
+ # * persisted?
21
+ # * authenticate(password)
22
+ #
8
23
  module Model
24
+ SCHEMA_ATTRIBUTES = %w[name email nickname first_name last_name location description image phone].freeze
25
+
9
26
  def self.included(base)
10
27
  base.extend ClassMethods
11
28
  end
12
29
 
13
30
  module ClassMethods
14
- # Locate an identity given its unique login key.
15
- #
16
- # @abstract
17
- # @param [String] key The unique login key.
18
- # @return [Model] An instance of the identity model class.
19
- def locate(key)
20
- raise NotImplementedError
21
- end
31
+ extend Gem::Deprecate
22
32
 
23
33
  # Authenticate a user with the given key and password.
24
34
  #
@@ -37,10 +47,57 @@ module OmniAuth
37
47
  # @return [String] The method name.
38
48
  def auth_key(method = false)
39
49
  @auth_key = method.to_s unless method == false
40
- @auth_key = nil if @auth_key == ''
50
+ @auth_key = nil if !defined?(@auth_key) || @auth_key == ''
41
51
 
42
52
  @auth_key || 'email'
43
53
  end
54
+
55
+ # Persists a new Identity object to the ORM.
56
+ # Defaults to calling super. Override as needed per ORM.
57
+ #
58
+ # @deprecated v4.0 will begin using {#new} with {#save} instead.
59
+ # @abstract
60
+ # @param [Hash] args Attributes of the new instance.
61
+ # @return [Model] An instance of the identity model class.
62
+ # @since 3.0.5
63
+ def create(*args)
64
+ raise NotImplementedError unless defined?(super)
65
+
66
+ super
67
+ end
68
+
69
+ # Locate an identity given its unique login key.
70
+ #
71
+ # @abstract
72
+ # @param [String] key The unique login key.
73
+ # @return [Model] An instance of the identity model class.
74
+ def locate(key)
75
+ raise NotImplementedError
76
+ end
77
+ end
78
+
79
+ # Persists a new Identity object to the ORM.
80
+ # Default raises an error. Override as needed per ORM.
81
+ #
82
+ # @abstract
83
+ # @return [Model] An instance of the identity model class.
84
+ # @since 3.0.5
85
+ def save
86
+ raise NotImplementedError unless defined?(super)
87
+
88
+ super
89
+ end
90
+
91
+ # Checks if the Identity object is persisted in the ORM.
92
+ # Defaults to calling super. Override as needed per ORM.
93
+ #
94
+ # @abstract
95
+ # @return [true or false] true if object exists, false if not.
96
+ # @since 3.0.5
97
+ def persisted?
98
+ raise NotImplementedError unless defined?(super)
99
+
100
+ super
44
101
  end
45
102
 
46
103
  # Returns self if the provided password is correct, false
@@ -53,22 +110,6 @@ module OmniAuth
53
110
  raise NotImplementedError
54
111
  end
55
112
 
56
- SCHEMA_ATTRIBUTES = %w[name email nickname first_name last_name location description image phone]
57
- # A hash of as much of the standard OmniAuth schema as is stored
58
- # in this particular model. By default, this will call instance
59
- # methods for each of the attributes it needs in turn, ignoring
60
- # any for which `#respond_to?` is `false`.
61
- #
62
- # If `first_name`, `nickname`, and/or `last_name` is provided but
63
- # `name` is not, it will be automatically calculated.
64
- #
65
- # @return [Hash] A string-keyed hash of user information.
66
- def info
67
- SCHEMA_ATTRIBUTES.each_with_object({}) do |attribute, hash|
68
- hash[attribute] = send(attribute) if respond_to?(attribute)
69
- end
70
- end
71
-
72
113
  # An identifying string that must be globally unique to the
73
114
  # application. Defaults to stringifying the `id` method.
74
115
  #
@@ -104,13 +145,28 @@ module OmniAuth
104
145
  # @param [String] value The value to which the auth key should be
105
146
  # set.
106
147
  def auth_key=(value)
107
- auth_key_setter = (self.class.auth_key + '=').to_sym
148
+ auth_key_setter = "#{self.class.auth_key}=".to_sym
108
149
  if respond_to?(auth_key_setter)
109
150
  send(auth_key_setter, value)
110
151
  else
111
152
  raise NotImplementedError
112
153
  end
113
154
  end
155
+
156
+ # A hash of as much of the standard OmniAuth schema as is stored
157
+ # in this particular model. By default, this will call instance
158
+ # methods for each of the attributes it needs in turn, ignoring
159
+ # any for which `#respond_to?` is `false`.
160
+ #
161
+ # If `first_name`, `nickname`, and/or `last_name` is provided but
162
+ # `name` is not, it will be automatically calculated.
163
+ #
164
+ # @return [Hash] A string-keyed hash of user information.
165
+ def info
166
+ SCHEMA_ATTRIBUTES.each_with_object({}) do |attribute, hash|
167
+ hash[attribute] = send(attribute) if respond_to?(attribute)
168
+ end
169
+ end
114
170
  end
115
171
  end
116
172
  end