nuid-sdk 0.1.1 → 0.2.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/Gemfile.lock +1 -1
- data/README.md +63 -32
- data/lib/nuid-sdk.rb +1 -0
- data/lib/nuid/sdk/api/auth.rb +42 -36
- data/lib/nuid/sdk/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1036c9267f051f3b984ee91f0d11445769268e8a005e9614ee8d657beec9624
|
4
|
+
data.tar.gz: 877e2cc137cb7143aad46f69a8b5b6b198b5b7fee2675f394276f94ebcfee038
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d5708dd3898dda0b8c0b943e6e77fc4e95dded0aa2123891690fb7971216cfb43ee035d1f057191dc780523a9354f606af302bb722c5df17bb694789a5c050f
|
7
|
+
data.tar.gz: '0606849f71c9611b5724b62bf9006b4f311f140afb013aab0854a0ecb08487ace05a5f6ee899399e7f2a0cd7cb484df2e8b734a1b87d2f2b207e19c0fef181f7'
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
# NuID SDK for Ruby
|
4
4
|
|
5
|
+
[](https://rubygems.org/gems/nuid-sdk)
|
6
|
+
[](https://rubydoc.info/gems/nuid-sdk)
|
7
|
+
[](https://portal.nuid.io/docs)
|
8
|
+
|
5
9
|
This repo provides a Ruby Gem for interacting with NuID APIs within Ruby
|
6
10
|
applications.
|
7
11
|
|
@@ -15,14 +19,14 @@ video tutorials, and more.
|
|
15
19
|
From [rubygems](https://rubygems.org/gems/nuid-sdk):
|
16
20
|
|
17
21
|
```sh
|
18
|
-
gem install nuid-sdk -v "0.
|
22
|
+
gem install nuid-sdk -v "0.2.0"
|
19
23
|
```
|
20
24
|
|
21
25
|
Or with bundler:
|
22
26
|
|
23
27
|
```ruby
|
24
28
|
# Gemfile
|
25
|
-
gem "nuid-sdk", "~> 0.
|
29
|
+
gem "nuid-sdk", "~> 0.2"
|
26
30
|
```
|
27
31
|
|
28
32
|
## Usage
|
@@ -34,9 +38,26 @@ NuID](https://portal.nuid.io/docs/guides/integrating-with-nuid) guide and the
|
|
34
38
|
accompanying [examples repo](https://github.com/NuID/examples).
|
35
39
|
A ruby-specific code example is coming soon.
|
36
40
|
|
37
|
-
```ruby
|
38
|
-
|
41
|
+
``` ruby
|
42
|
+
# config/application.rb
|
43
|
+
config.x.nuid.auth_api_key = ENV['NUID_API_KEY']
|
44
|
+
```
|
45
|
+
|
46
|
+
``` ruby
|
47
|
+
require "nuid/sdk/api/auth"
|
39
48
|
|
49
|
+
class ApplicationController < ActionController::API
|
50
|
+
def nuid_api
|
51
|
+
@nuid_api ||= ::NuID::SDK::API::Auth.new(Rails.configuration.x.nuid.auth_api_key)
|
52
|
+
end
|
53
|
+
|
54
|
+
def render_error(error, status)
|
55
|
+
render(json: {errors: [error]}, status: status)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
```
|
59
|
+
|
60
|
+
```ruby
|
40
61
|
class UsersController < ApplicationController
|
41
62
|
NUID_API = ::NuID::SDK::API::Auth.new(ENV["NUID_API_KEY"])
|
42
63
|
|
@@ -49,22 +70,26 @@ class UsersController < ApplicationController
|
|
49
70
|
# using `Zk.verifiableFromSecret(password)` from the `@nuid/zk` npm
|
50
71
|
# package.
|
51
72
|
def register
|
52
|
-
credential_res =
|
53
|
-
|
54
|
-
|
55
|
-
.merge({nuid: credential_res.parsed_response["nu/id"]})
|
56
|
-
@current_user = User.create(user_params)
|
57
|
-
render json: @current_user, status: :created
|
58
|
-
else
|
59
|
-
render status: :bad_request
|
73
|
+
credential_res = nuid_api.credential_create(params[:credential])
|
74
|
+
unless credential_res.code == 201
|
75
|
+
return render_error("Unable to create the credential", :bad_request)
|
60
76
|
end
|
77
|
+
|
78
|
+
user = User.create!({
|
79
|
+
email: params[:email].strip.downcase,
|
80
|
+
first_name: params[:firstName],
|
81
|
+
last_name: params[:lastName],
|
82
|
+
nuid: credential_res.parsed_response["nu/id"]
|
83
|
+
})
|
84
|
+
|
85
|
+
render(json: { user: user }, status: :created)
|
86
|
+
rescue => exception
|
87
|
+
render_error(exception.message, 500)
|
61
88
|
end
|
62
89
|
end
|
63
90
|
```
|
64
91
|
|
65
92
|
``` ruby
|
66
|
-
require "nuid-sdk"
|
67
|
-
|
68
93
|
class SessionsController < ApplicationController
|
69
94
|
NUID_API = ::NuID::SDK::API::Auth.new(ENV["NUID_API_KEY"])
|
70
95
|
|
@@ -73,18 +98,24 @@ class SessionsController < ApplicationController
|
|
73
98
|
# challenge has been fetched, return it to the client so a proof
|
74
99
|
# can be generated from the challenge claims and the user's password.
|
75
100
|
def login_challenge
|
76
|
-
user = User.
|
77
|
-
return
|
78
|
-
|
79
|
-
credential_res =
|
80
|
-
|
101
|
+
user = User.where(email: params[:email].strip.downcase).first
|
102
|
+
return render_error("User not found", :unauthorized) unless user
|
103
|
+
|
104
|
+
credential_res = nuid_api.credential_get(user.nuid)
|
105
|
+
unless credential_res.code == 200
|
106
|
+
return render_error("Credential not found", :unauthorized)
|
107
|
+
end
|
81
108
|
|
82
109
|
credential = credential_res.parsed_response["nuid/credential"]
|
83
|
-
challenge_res =
|
84
|
-
|
110
|
+
challenge_res = nuid_api.challenge_get(credential)
|
111
|
+
unless challenge_res.code == 201
|
112
|
+
return render_error("Cannot create a challenge", 500)
|
113
|
+
end
|
85
114
|
|
86
115
|
challenge_jwt = challenge_res.parsed_response["nuid.credential.challenge/jwt"]
|
87
|
-
render
|
116
|
+
render(json: { challengeJwt: challenge_jwt }, status: :ok)
|
117
|
+
rescue => exception
|
118
|
+
render_error(exception.message, 500)
|
88
119
|
end
|
89
120
|
|
90
121
|
# Verify is the second part of the login process. The params
|
@@ -97,17 +128,17 @@ class SessionsController < ApplicationController
|
|
97
128
|
# `Zk.proofFromSecretAndChallenge(password, challenge_jwt)` from the
|
98
129
|
# `@nuid/zk` npm package.
|
99
130
|
def login_verify
|
100
|
-
user = User.
|
101
|
-
return
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
# issue session ...
|
107
|
-
render(json: @current_user)
|
108
|
-
else
|
109
|
-
render(status: :unathorized)
|
131
|
+
user = User.where(email: params[:email].strip.downcase).first
|
132
|
+
return render_error("User not found", :unauthorized) unless user
|
133
|
+
|
134
|
+
challenge_res = nuid_api.challenge_verify(params[:challengeJwt], params[:proof])
|
135
|
+
unless challenge_res.code == 200
|
136
|
+
return render_error("Verification failed", :unauthorized)
|
110
137
|
end
|
138
|
+
|
139
|
+
render(json: { user: user }, status: :ok)
|
140
|
+
rescue => exception
|
141
|
+
render_error(exception.message, 500)
|
111
142
|
end
|
112
143
|
end
|
113
144
|
```
|
data/lib/nuid-sdk.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "nuid/sdk"
|
data/lib/nuid/sdk/api/auth.rb
CHANGED
@@ -6,11 +6,9 @@ module NuID::SDK::API
|
|
6
6
|
# existing authentication flows.
|
7
7
|
#
|
8
8
|
# @example User Registration
|
9
|
-
# require "nuid-sdk"
|
10
|
-
#
|
11
9
|
# class UsersController < ApplicationController
|
12
10
|
# NUID_API = ::NuID::SDK::API::Auth.new(ENV["NUID_API_KEY"])
|
13
|
-
#
|
11
|
+
#
|
14
12
|
# # The registration form should send the verified credential to be
|
15
13
|
# # recorded in the NuID Auth API. The response to that interaction
|
16
14
|
# # will provide a `nu/id` key in the response which should be stored
|
@@ -20,22 +18,25 @@ module NuID::SDK::API
|
|
20
18
|
# # using `Zk.verifiableFromSecret(password)` from the `@nuid/zk` npm
|
21
19
|
# # package.
|
22
20
|
# def register
|
23
|
-
# credential_res =
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# user_params = params.require(:email, :first_name, :last_name)
|
27
|
-
# .merge({nuid: credential_res.parsed_response["nu/id"]})
|
28
|
-
# @current_user = User.create(user_params)
|
29
|
-
# render json: @current_user, status: :created
|
30
|
-
# else
|
31
|
-
# render status: :bad_request
|
21
|
+
# credential_res = nuid_api.credential_create(params[:credential])
|
22
|
+
# unless credential_res.code == 201
|
23
|
+
# return render_error("Unable to create the credential", :bad_request)
|
32
24
|
# end
|
25
|
+
#
|
26
|
+
# user = User.create!({
|
27
|
+
# email: params[:email].strip.downcase,
|
28
|
+
# first_name: params[:firstName],
|
29
|
+
# last_name: params[:lastName],
|
30
|
+
# nuid: credential_res.parsed_response["nu/id"]
|
31
|
+
# })
|
32
|
+
#
|
33
|
+
# render(json: { user: user }, status: :created)
|
34
|
+
# rescue => exception
|
35
|
+
# render_error(exception.message, 500)
|
33
36
|
# end
|
34
37
|
# end
|
35
38
|
#
|
36
39
|
# @example User Login
|
37
|
-
# require "nuid-sdk"
|
38
|
-
#
|
39
40
|
# class SessionsController < ApplicationController
|
40
41
|
# NUID_API = ::NuID::SDK::API::Auth.new(ENV["NUID_API_KEY"])
|
41
42
|
#
|
@@ -44,20 +45,26 @@ module NuID::SDK::API
|
|
44
45
|
# # challenge has been fetched, return it to the client so a proof
|
45
46
|
# # can be generated from the challenge claims and the user's password.
|
46
47
|
# def login_challenge
|
47
|
-
# user = User.
|
48
|
-
# return
|
49
|
-
#
|
50
|
-
# credential_res =
|
51
|
-
#
|
52
|
-
#
|
48
|
+
# user = User.where(email: params[:email].strip.downcase).first
|
49
|
+
# return render_error("User not found", :unauthorized) unless user
|
50
|
+
#
|
51
|
+
# credential_res = nuid_api.credential_get(user.nuid)
|
52
|
+
# unless credential_res.code == 200
|
53
|
+
# return render_error("Credential not found", :unauthorized)
|
54
|
+
# end
|
55
|
+
#
|
53
56
|
# credential = credential_res.parsed_response["nuid/credential"]
|
54
|
-
# challenge_res =
|
55
|
-
#
|
56
|
-
#
|
57
|
+
# challenge_res = nuid_api.challenge_get(credential)
|
58
|
+
# unless challenge_res.code == 201
|
59
|
+
# return render_error("Cannot create a challenge", 500)
|
60
|
+
# end
|
61
|
+
#
|
57
62
|
# challenge_jwt = challenge_res.parsed_response["nuid.credential.challenge/jwt"]
|
58
|
-
# render
|
63
|
+
# render(json: { challengeJwt: challenge_jwt }, status: :ok)
|
64
|
+
# rescue => exception
|
65
|
+
# render_error(exception.message, 500)
|
59
66
|
# end
|
60
|
-
#
|
67
|
+
#
|
61
68
|
# # Verify is the second part of the login process. The params
|
62
69
|
# # provided here include the user identification param (email or
|
63
70
|
# # username), the unaltered challenge_jwt retrieved in phase 1 of login
|
@@ -68,21 +75,20 @@ module NuID::SDK::API
|
|
68
75
|
# # `Zk.proofFromSecretAndChallenge(password, challenge_jwt)` from the
|
69
76
|
# # `@nuid/zk` npm package.
|
70
77
|
# def login_verify
|
71
|
-
# user = User.
|
72
|
-
# return
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
# # issue session ...
|
78
|
-
# render(json: @current_user)
|
79
|
-
# else
|
80
|
-
# render(status: :unathorized)
|
78
|
+
# user = User.where(email: params[:email].strip.downcase).first
|
79
|
+
# return render_error("User not found", :unauthorized) unless user
|
80
|
+
#
|
81
|
+
# challenge_res = nuid_api.challenge_verify(params[:challengeJwt], params[:proof])
|
82
|
+
# unless challenge_res.code == 200
|
83
|
+
# return render_error("Verification failed", :unauthorized)
|
81
84
|
# end
|
85
|
+
#
|
86
|
+
# render(json: { user: user }, status: :ok)
|
87
|
+
# rescue => exception
|
88
|
+
# render_error(exception.message, 500)
|
82
89
|
# end
|
83
90
|
# end
|
84
91
|
#
|
85
|
-
#
|
86
92
|
# @see https://www.npmjs.com/package/@nuid/zk
|
87
93
|
# @see https://www.npmjs.com/package/@nuid/cli
|
88
94
|
class Auth
|
data/lib/nuid/sdk/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nuid-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- BJ Neilsen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- Rakefile
|
57
57
|
- bin/console
|
58
58
|
- bin/setup
|
59
|
+
- lib/nuid-sdk.rb
|
59
60
|
- lib/nuid/sdk.rb
|
60
61
|
- lib/nuid/sdk/api/auth.rb
|
61
62
|
- lib/nuid/sdk/version.rb
|