omniauth-humanid 0.0.25 → 1.0.0

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: 95735723f5a043cb13204fd0645418db55ff1989ba21f2745d1d3102ac92e0bd
4
- data.tar.gz: e65bd40067ebc27b9c0b49385232ad1c2edea86f1977a28962fc2d5528b2de71
3
+ metadata.gz: f4bc9196f2283e4f131635ef4d1aeed7c7870a55a7555e8c546c28fdd0f06eac
4
+ data.tar.gz: 340de736108b463ce81c404109179b3b44d2972bda377d86df67be776b0bc82a
5
5
  SHA512:
6
- metadata.gz: 2d7f1b3d143b50d2f09d7d66022ac7b148d3aebea8e9e8bcd550238ae40440074f8bd025d571b0137d968575c0071c6e5dc09ad7bbf8239a9d5652f44695a4b0
7
- data.tar.gz: d1b12cb08758174c66a7182201a7a8a85032cb84edd877329e4413fc130e49ff7cdf45fb5da6c3fc884a069b033e0ae4ae990805067d8ae8857379f9f38d9d98
6
+ metadata.gz: 91677e1ea06063748fac42aa84497786f6c514caa052ae4c68800427ad5487ae66c54009cd4dc534eb415e318fb4debc4b28b2eb35bc5113abd0eb66cc3aa66e
7
+ data.tar.gz: 1ba5d6c6a5ca2e2d22cc12d89ece24611c8fdd22622791c50b6a09a583b186495d5c5db9e4a6a4edfc3023b88217c07240d8e39adba67331325ff428d07e3a1a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- omniauth-humanid (0.0.25)
4
+ omniauth-humanid (1.0.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,11 +1,13 @@
1
1
  # Ruby/Rails OmniAuth for HumanID Alpha
2
2
 
3
+ status: working, but will wait a while to make sure before bumping to 1.0.0
4
+
3
5
  Omniauth for humanID, a platform that prevents bots and increases privacy. HumanID is run by Human Internet,
4
6
  a non-profit that is currently financed by organizations such as Harvard and the Mozilla Foundation (I love the Mozilla
5
7
  Developer Network (MDN) which gives great javascript information).
6
8
 
7
9
  HumanID works best when used as the only sign-up solution, due to this HumanID has to be highly trusted. This is where their
8
- non-profit status steps in. HumanID has many benifits:
10
+ non-profit status steps in. HumanID has many benefits:
9
11
 
10
12
  1. Increased privacy for users through both technical innovations and legal responsibilities.
11
13
  2. Making bots inconvienient by requiring phone verification.
@@ -16,6 +18,8 @@ non-profit status steps in. HumanID has many benifits:
16
18
 
17
19
  ## Installation
18
20
 
21
+ This gem relies on the [omniauth gem](https://github.com/omniauth/omniauth). It was also developed along-side [devise](https://github.com/heartcombo/devise), but should work without it, some of the configuration may change though.
22
+
19
23
  Add this line to your application's Gemfile:
20
24
 
21
25
  ```ruby
@@ -54,9 +58,39 @@ Update as normal.
54
58
  = form_with url: user_humanid_omniauth_authorize_path, method: :post do
55
59
  %input{type: :image, src: image_pack_path("icons/sign_in_logos/humanID.svg"), alt: "Anonymous Login with humanID"}
56
60
  ```
57
- 5. Create your callback area (still in development)
58
- - This area is generally supposed to be customizable, as you might have a diffrent model name, want to attach some validations, etc, etc. So it is not included in the gem, but is here as a how-to.
59
- - TBD
61
+ 5. Create your callback area
62
+ - This area is generally supposed to be customizable, as you might have a different model name, want to attach some validations, etc, etc. So it is not included in the gem, but is here a partial implementation of it.
63
+ ```ruby
64
+ #in the omnath_callbacks_controller.rb file
65
+ def accept_country_code?(code)
66
+ true
67
+ end
68
+ def humanid
69
+ omau = request.env['omniauth.auth']
70
+ uid = omau.info.appUserId
71
+ country_code = omau.info.countryCode
72
+ provider = omau.provider
73
+ Rails.logger.info("#{provider} - #{country_code} - #{uid}")
74
+
75
+ unless accept_country_code?(country_code)
76
+ redirect_to root_path, flash: {info: "phone number's country-code not accepted at this time"}
77
+ return
78
+ end
79
+
80
+ user = User.find_by(provider: provider, uid: uid)
81
+ if user
82
+ #allready have an account, sign them in
83
+ sign_in_and_redirect user, event: :authentication
84
+ else
85
+ request.session['signup'] ||= {}
86
+ request.session["signup"]["provider"] = provider
87
+ request.session["signup"]["uid"] = uid
88
+ request.session["signup"]["country_code"] = country_code
89
+ #continue the signup process, perhaps with a redirect, or create the user here,
90
+ #and redirect to the main website.
91
+ end
92
+ end
93
+ ```
60
94
 
61
95
  ## Additional configuration
62
96
 
@@ -67,6 +101,7 @@ additional configuration can be set in your initializer file at the same area an
67
101
  - humanid_version: version string that goes in the url. Defaults to 'v0.0.3'. If humanid updates this may need to be updated aswell.
68
102
  - priority_country: not sure exactly what this does or how to use it, but it was in the docs so i added it as an option. Defaults to nil.
69
103
  - external_signup_url: the web login url. Defaults to: "https://core.human-id.org/[HUMANID_VERSION]/server/users/web-login". [HUMANID_VERSION] gets substituted by humanid_version above.
104
+ - exchange_url: the exchange url. Defaults to: "https://core.human-id.org/[HUMANID_VERSION]/server/users/exchange". [HUMANID_VERSION] gets substituted by humanid_version above.
70
105
 
71
106
  ### Devise without emails/passwords
72
107
 
@@ -82,11 +117,11 @@ Although Devise is easier to deal with without usernames / passwords, it takes a
82
117
  2. In your devise.rb initializer file, make sure to set authentication_keys to []
83
118
  3. delete or comment out the selections in devise.rb related to number 1.
84
119
  4. I had to add back the route below:
85
- ```ruby
86
- as :user do
87
- delete "/users/sign_out" => "users/sessions#destroy"
88
- end
89
- ```
120
+ ```ruby
121
+ as :user do
122
+ delete "/users/sign_out" => "users/sessions#destroy"
123
+ end
124
+ ```
90
125
  5. For development you may have to create a seperate way to login/signup for testing purposes. You can do this by sending a form that implements the method 'sign_in_and_redirect user, event: :authentication', or that sets fake values for signup. MAKE SURE THIS METHOD IS ONLY ACTIVE DURING DEVELOPMENT. I have a version of this below:
91
126
  - in my routes.rb:
92
127
  ```ruby
@@ -98,24 +133,22 @@ end
98
133
  ```
99
134
  - in my OmniauthCallbacksController override (see devise documentation):
100
135
  ```ruby
101
- def callback_common(provider, uid)
102
- user = User.from_omniauth(provider, uid)
103
- if user
104
- #allready have an account, sign them in
105
- sign_in_and_redirect user, event: :authentication # this will throw if user is not activated
106
- else
107
- request.session['signup'] ||= {}
108
- request.session["signup"]["provider"] = provider
109
- request.session["signup"]["uid"] = uid
110
- raise StandardError.new("REPLACE THIS ERROR WITH A REDIRECT TO FINISH SIGNUP")
111
- end
112
- end
113
136
  if Rails.env.development?
114
137
  def callback_override
115
138
  raise StandardError.new("nope") unless Rails.env.development?
116
139
  provider = 'override'
117
140
  uid = params['uid']
118
- callback_common provider, uid
141
+ user = User.find_by(provider: provider, uid: uid)
142
+ if user
143
+ #allready have an account, sign them in
144
+ sign_in_and_redirect user, event: :authentication # this will throw if user is not activated
145
+ else
146
+ request.session['signup'] ||= {}
147
+ request.session["signup"]["provider"] = provider
148
+ request.session["signup"]["uid"] = uid
149
+ request.session["signup"]["country_code"] = 'US'
150
+ #continue your usual sign-up process. Note for the override strategy that the username is the uid.
151
+ end
119
152
  end
120
153
  end
121
154
  ```
@@ -4,7 +4,7 @@ module OmniAuth
4
4
  module Strategies
5
5
  class Humanid
6
6
  include OmniAuth::Strategy
7
- #Omniauth strategy creation guide be useful
7
+ #Omniauth strategy creation guide can be useful
8
8
  #- https://github.com/omniauth/omniauth/wiki/Strategy-Contribution-Guide
9
9
  #- note the request_phase and the callback_phase
10
10
 
@@ -62,7 +62,7 @@ module OmniAuth
62
62
 
63
63
  #get uri
64
64
  uri = get_external_signup_uri
65
- Rails.logger.debug "HUMANID_OMNIAUTH URI: #{uri.to_s}"
65
+ Rails.logger.debug "uri: #{uri.to_s}"
66
66
  #make a post request (but dont send it yet)
67
67
  post_request = Net::HTTP::Post.new(uri)
68
68
  #set the headers as per docs.
@@ -108,9 +108,8 @@ module OmniAuth
108
108
  #this is done in the verify exchange token step in the humanID docs.
109
109
 
110
110
  #get the exchange_token from the humanID callback
111
- Rails.logger.info("CALLBACK PHASE")
111
+ Rails.logger.info("humanid callback phase")
112
112
  exchange_token = request.params['et']
113
- Rails.logger.info("EXCHANGE TOKEN: #{exchange_token}")
114
113
 
115
114
  #create the request (as per the humanID docs)
116
115
  uri = get_exchange_uri
@@ -121,10 +120,9 @@ module OmniAuth
121
120
  post_request.body = {"exchangeToken" => exchange_token}.to_json
122
121
  #send the request, get the response.
123
122
  res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true){|http| http.request(post_request)}
124
- Rails.logger.info("RESPONSE: #{res}")
125
123
  if res.code == "200"
126
124
  self.raw_info = JSON.parse(res.body)
127
- Rails.logger.info("raw: #{raw_info}")
125
+ Rails.logger.info("humanid callback phase: success")
128
126
  super
129
127
  else
130
128
  str = "Issue with the callback_phase of humanid omniauth, response from human id has code: #{res.code}, and body: #{res.body}"
@@ -133,13 +131,11 @@ module OmniAuth
133
131
  end
134
132
  end
135
133
 
136
- #not a method? Some DSL magic that is not explained in docs. Just looked at other projects and they did something like this so
134
+ #not a method? Some DSL magic that is not explained in docs.
135
+ #tried to do the same with uid but it didn't work. Either way its accessible now
137
136
  info do
138
137
  raw_info['data']
139
138
  end
140
- uid do
141
- raw_info['data']['userAppId']
142
- end
143
139
  end
144
140
  end
145
141
  end
@@ -1,4 +1,4 @@
1
- version = '0.0.25'
1
+ version = '1.0.0'
2
2
  #version must be on the first line for the update script
3
3
 
4
4
  Gem::Specification.new do |spec|
@@ -29,4 +29,4 @@ Gem::Specification.new do |spec|
29
29
  spec.bindir = "exe"
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
- end
32
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-humanid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.25
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Clancy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-23 00:00:00.000000000 Z
11
+ date: 2022-09-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: