clerk-sdk-ruby 4.0.0.beta3 → 4.0.0.beta5

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.
Files changed (204) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +3 -0
  3. data/.github/workflows/main.yml +24 -14
  4. data/.gitignore +7 -1
  5. data/.rspec +3 -0
  6. data/.ruby-version +1 -0
  7. data/CHANGELOG.md +22 -0
  8. data/Gemfile +26 -3
  9. data/Gemfile.lock +269 -13
  10. data/Guardfile +14 -0
  11. data/README.md +71 -11
  12. data/Rakefile +50 -6
  13. data/apps/rack/app.rb +67 -0
  14. data/apps/rack/config.ru +17 -0
  15. data/apps/rack/middleware/disable_paths.rb +13 -0
  16. data/apps/rails-api/.dockerignore +41 -0
  17. data/apps/rails-api/.gitattributes +9 -0
  18. data/apps/rails-api/.gitignore +32 -0
  19. data/apps/rails-api/.kamal/hooks/docker-setup.sample +3 -0
  20. data/apps/rails-api/.kamal/hooks/post-deploy.sample +14 -0
  21. data/apps/rails-api/.kamal/hooks/post-proxy-reboot.sample +3 -0
  22. data/apps/rails-api/.kamal/hooks/pre-build.sample +51 -0
  23. data/apps/rails-api/.kamal/hooks/pre-connect.sample +47 -0
  24. data/apps/rails-api/.kamal/hooks/pre-deploy.sample +109 -0
  25. data/apps/rails-api/.kamal/hooks/pre-proxy-reboot.sample +3 -0
  26. data/apps/rails-api/.kamal/secrets +17 -0
  27. data/apps/rails-api/.rubocop.yml +8 -0
  28. data/apps/rails-api/.ruby-version +1 -0
  29. data/apps/rails-api/Dockerfile +69 -0
  30. data/apps/rails-api/Gemfile +54 -0
  31. data/apps/rails-api/Gemfile.lock +374 -0
  32. data/apps/rails-api/README.md +24 -0
  33. data/apps/rails-api/Rakefile +6 -0
  34. data/apps/rails-api/app/controllers/application_controller.rb +3 -0
  35. data/apps/rails-api/app/controllers/home_controller.rb +5 -0
  36. data/apps/rails-api/app/jobs/application_job.rb +7 -0
  37. data/apps/rails-api/app/mailers/application_mailer.rb +4 -0
  38. data/apps/rails-api/app/models/application_record.rb +3 -0
  39. data/apps/rails-api/app/views/layouts/mailer.html.erb +13 -0
  40. data/apps/rails-api/app/views/layouts/mailer.text.erb +1 -0
  41. data/apps/rails-api/bin/brakeman +7 -0
  42. data/apps/rails-api/bin/bundle +109 -0
  43. data/apps/rails-api/bin/dev +2 -0
  44. data/apps/rails-api/bin/docker-entrypoint +14 -0
  45. data/apps/rails-api/bin/jobs +6 -0
  46. data/apps/rails-api/bin/kamal +27 -0
  47. data/apps/rails-api/bin/rails +4 -0
  48. data/apps/rails-api/bin/rake +4 -0
  49. data/apps/rails-api/bin/rubocop +8 -0
  50. data/apps/rails-api/bin/setup +34 -0
  51. data/apps/rails-api/bin/thrust +5 -0
  52. data/apps/rails-api/config/application.rb +36 -0
  53. data/apps/rails-api/config/boot.rb +4 -0
  54. data/apps/rails-api/config/cable.yml +17 -0
  55. data/apps/rails-api/config/cache.yml +16 -0
  56. data/apps/rails-api/config/credentials.yml.enc +1 -0
  57. data/apps/rails-api/config/database.yml +41 -0
  58. data/apps/rails-api/config/deploy.yml +116 -0
  59. data/apps/rails-api/config/environment.rb +5 -0
  60. data/apps/rails-api/config/environments/development.rb +70 -0
  61. data/apps/rails-api/config/environments/production.rb +88 -0
  62. data/apps/rails-api/config/environments/test.rb +53 -0
  63. data/apps/rails-api/config/initializers/cors.rb +16 -0
  64. data/apps/rails-api/config/initializers/filter_parameter_logging.rb +8 -0
  65. data/apps/rails-api/config/initializers/inflections.rb +16 -0
  66. data/apps/rails-api/config/locales/en.yml +31 -0
  67. data/apps/rails-api/config/puma.rb +41 -0
  68. data/apps/rails-api/config/queue.yml +18 -0
  69. data/apps/rails-api/config/recurring.yml +10 -0
  70. data/apps/rails-api/config/routes.rb +10 -0
  71. data/apps/rails-api/config/storage.yml +34 -0
  72. data/apps/rails-api/config.ru +6 -0
  73. data/apps/rails-api/db/cable_schema.rb +11 -0
  74. data/apps/rails-api/db/cache_schema.rb +14 -0
  75. data/apps/rails-api/db/queue_schema.rb +129 -0
  76. data/apps/rails-api/db/seeds.rb +9 -0
  77. data/apps/rails-api/public/robots.txt +1 -0
  78. data/apps/rails-api/test/controllers/home_controller_test.rb +7 -0
  79. data/apps/rails-api/test/test_helper.rb +15 -0
  80. data/apps/rails-full/.dockerignore +47 -0
  81. data/apps/rails-full/.gitattributes +9 -0
  82. data/apps/rails-full/.gitignore +34 -0
  83. data/apps/rails-full/.kamal/hooks/docker-setup.sample +3 -0
  84. data/apps/rails-full/.kamal/hooks/post-deploy.sample +14 -0
  85. data/apps/rails-full/.kamal/hooks/post-proxy-reboot.sample +3 -0
  86. data/apps/rails-full/.kamal/hooks/pre-build.sample +51 -0
  87. data/apps/rails-full/.kamal/hooks/pre-connect.sample +47 -0
  88. data/apps/rails-full/.kamal/hooks/pre-deploy.sample +109 -0
  89. data/apps/rails-full/.kamal/hooks/pre-proxy-reboot.sample +3 -0
  90. data/apps/rails-full/.kamal/secrets +17 -0
  91. data/apps/rails-full/.rubocop.yml +8 -0
  92. data/apps/rails-full/.ruby-version +1 -0
  93. data/apps/rails-full/Dockerfile +72 -0
  94. data/apps/rails-full/Gemfile +70 -0
  95. data/apps/rails-full/Gemfile.lock +429 -0
  96. data/apps/rails-full/README.md +24 -0
  97. data/apps/rails-full/Rakefile +6 -0
  98. data/apps/rails-full/app/assets/stylesheets/application.css +10 -0
  99. data/apps/rails-full/app/controllers/application_controller.rb +6 -0
  100. data/apps/rails-full/app/controllers/home_controller.rb +11 -0
  101. data/apps/rails-full/app/helpers/application_helper.rb +2 -0
  102. data/apps/rails-full/app/helpers/home_helper.rb +2 -0
  103. data/apps/rails-full/app/javascript/application.js +3 -0
  104. data/apps/rails-full/app/javascript/controllers/application.js +9 -0
  105. data/apps/rails-full/app/javascript/controllers/hello_controller.js +7 -0
  106. data/apps/rails-full/app/javascript/controllers/index.js +4 -0
  107. data/apps/rails-full/app/jobs/application_job.rb +7 -0
  108. data/apps/rails-full/app/mailers/application_mailer.rb +4 -0
  109. data/apps/rails-full/app/models/application_record.rb +3 -0
  110. data/apps/rails-full/app/views/home/index.html.erb +7 -0
  111. data/apps/rails-full/app/views/layouts/application.html.erb +60 -0
  112. data/apps/rails-full/app/views/layouts/mailer.html.erb +13 -0
  113. data/apps/rails-full/app/views/layouts/mailer.text.erb +1 -0
  114. data/apps/rails-full/app/views/pwa/manifest.json.erb +22 -0
  115. data/apps/rails-full/app/views/pwa/service-worker.js +26 -0
  116. data/apps/rails-full/bin/brakeman +7 -0
  117. data/apps/rails-full/bin/bundle +109 -0
  118. data/apps/rails-full/bin/dev +2 -0
  119. data/apps/rails-full/bin/docker-entrypoint +14 -0
  120. data/apps/rails-full/bin/importmap +4 -0
  121. data/apps/rails-full/bin/jobs +6 -0
  122. data/apps/rails-full/bin/kamal +27 -0
  123. data/apps/rails-full/bin/rails +4 -0
  124. data/apps/rails-full/bin/rake +4 -0
  125. data/apps/rails-full/bin/rubocop +8 -0
  126. data/apps/rails-full/bin/setup +34 -0
  127. data/apps/rails-full/bin/thrust +5 -0
  128. data/apps/rails-full/config/application.rb +31 -0
  129. data/apps/rails-full/config/boot.rb +4 -0
  130. data/apps/rails-full/config/cable.yml +17 -0
  131. data/apps/rails-full/config/cache.yml +16 -0
  132. data/apps/rails-full/config/credentials.yml.enc +1 -0
  133. data/apps/rails-full/config/database.yml +41 -0
  134. data/apps/rails-full/config/deploy.yml +116 -0
  135. data/apps/rails-full/config/environment.rb +5 -0
  136. data/apps/rails-full/config/environments/development.rb +72 -0
  137. data/apps/rails-full/config/environments/production.rb +91 -0
  138. data/apps/rails-full/config/environments/test.rb +53 -0
  139. data/apps/rails-full/config/importmap.rb +7 -0
  140. data/apps/rails-full/config/initializers/assets.rb +7 -0
  141. data/apps/rails-full/config/initializers/clerk.rb +4 -0
  142. data/apps/rails-full/config/initializers/content_security_policy.rb +25 -0
  143. data/apps/rails-full/config/initializers/filter_parameter_logging.rb +8 -0
  144. data/apps/rails-full/config/initializers/inflections.rb +16 -0
  145. data/apps/rails-full/config/locales/en.yml +31 -0
  146. data/apps/rails-full/config/puma.rb +41 -0
  147. data/apps/rails-full/config/queue.yml +18 -0
  148. data/apps/rails-full/config/recurring.yml +10 -0
  149. data/apps/rails-full/config/routes.rb +15 -0
  150. data/apps/rails-full/config/storage.yml +34 -0
  151. data/apps/rails-full/config.ru +6 -0
  152. data/apps/rails-full/db/cable_schema.rb +11 -0
  153. data/apps/rails-full/db/cache_schema.rb +14 -0
  154. data/apps/rails-full/db/queue_schema.rb +129 -0
  155. data/apps/rails-full/db/seeds.rb +9 -0
  156. data/apps/rails-full/public/400.html +114 -0
  157. data/apps/rails-full/public/404.html +114 -0
  158. data/apps/rails-full/public/406-unsupported-browser.html +114 -0
  159. data/apps/rails-full/public/422.html +114 -0
  160. data/apps/rails-full/public/500.html +114 -0
  161. data/apps/rails-full/public/icon.png +0 -0
  162. data/apps/rails-full/public/icon.svg +3 -0
  163. data/apps/rails-full/public/robots.txt +1 -0
  164. data/apps/rails-full/test/application_system_test_case.rb +5 -0
  165. data/apps/rails-full/test/controllers/home_controller_test.rb +7 -0
  166. data/apps/rails-full/test/test_helper.rb +15 -0
  167. data/apps/sinatra/app.rb +29 -0
  168. data/apps/sinatra/config.ru +2 -0
  169. data/apps/sinatra/views/index.erb +44 -0
  170. data/clerk-sdk-ruby.gemspec +2 -1
  171. data/lib/clerk/authenticatable.rb +14 -79
  172. data/lib/clerk/authenticate_context.rb +164 -181
  173. data/lib/clerk/authenticate_request.rb +238 -230
  174. data/lib/clerk/configuration.rb +78 -0
  175. data/lib/clerk/constants.rb +68 -46
  176. data/lib/clerk/error.rb +17 -0
  177. data/lib/clerk/jwks_cache.rb +27 -22
  178. data/lib/clerk/proxy.rb +135 -0
  179. data/lib/clerk/rack.rb +2 -0
  180. data/lib/clerk/rack_middleware.rb +88 -73
  181. data/lib/clerk/rails.rb +3 -0
  182. data/lib/clerk/railtie.rb +7 -6
  183. data/lib/clerk/sdk.rb +17 -156
  184. data/lib/clerk/sinatra.rb +52 -0
  185. data/lib/clerk/utils.rb +46 -6
  186. data/lib/clerk/version.rb +1 -1
  187. data/lib/clerk.rb +15 -51
  188. metadata +187 -25
  189. data/CODEOWNERS +0 -1
  190. data/lib/clerk/errors.rb +0 -22
  191. data/lib/clerk/rack_middleware_v2.rb +0 -167
  192. data/lib/clerk/resources/allowlist.rb +0 -16
  193. data/lib/clerk/resources/allowlist_identifiers.rb +0 -16
  194. data/lib/clerk/resources/clients.rb +0 -23
  195. data/lib/clerk/resources/email_addresses.rb +0 -17
  196. data/lib/clerk/resources/emails.rb +0 -16
  197. data/lib/clerk/resources/jwks.rb +0 -18
  198. data/lib/clerk/resources/organizations.rb +0 -73
  199. data/lib/clerk/resources/phone_numbers.rb +0 -17
  200. data/lib/clerk/resources/plural_resource.rb +0 -38
  201. data/lib/clerk/resources/sessions.rb +0 -26
  202. data/lib/clerk/resources/singular_resource.rb +0 -14
  203. data/lib/clerk/resources/users.rb +0 -37
  204. data/lib/clerk/resources.rb +0 -10
data/lib/clerk/errors.rb DELETED
@@ -1,22 +0,0 @@
1
- module Clerk
2
- module Errors
3
- class Base < StandardError
4
- attr_reader :status
5
-
6
- def initialize(msg, status:)
7
- @errors = msg["errors"]
8
- @status = status
9
- super(msg.merge("status" => status))
10
- end
11
- end
12
-
13
- class Fatal < Base
14
- end
15
-
16
- class Authentication < Base
17
- end
18
-
19
- class Configuration < StandardError
20
- end
21
- end
22
- end
@@ -1,167 +0,0 @@
1
- require "clerk"
2
- require_relative "authenticate_context"
3
- require_relative "authenticate_request"
4
-
5
- module Clerk
6
- class ProxyV2
7
- CACHE_TTL = 60 # seconds
8
-
9
- attr_reader :session_claims, :session_token
10
-
11
- def initialize(session_claims: nil, session_token: nil)
12
- @session_claims = session_claims
13
- @session_token = session_token
14
- @session = nil
15
- end
16
-
17
- def session
18
- return nil if @session_claims.nil?
19
-
20
- @session ||= verify_session
21
- end
22
-
23
- def verify_session
24
- return nil if @session_claims.nil?
25
-
26
- sdk.sessions.verify_token(@session_claims["sid"], @session_token)
27
- end
28
-
29
- def user
30
- return nil if user_id.nil?
31
-
32
- @user ||= fetch_user(user_id)
33
- end
34
-
35
- def user_id
36
- return nil if @session_claims.nil?
37
-
38
- @session_claims["sub"]
39
- end
40
-
41
- def org
42
- return nil if org_id.nil?
43
-
44
- @org ||= fetch_org(org_id)
45
- end
46
-
47
- def org_id
48
- return nil if user_id.nil?
49
-
50
- @session_claims["org_id"]
51
- end
52
-
53
- def org_role
54
- return nil if @session_claims.nil?
55
-
56
- @session_claims["org_role"]
57
- end
58
-
59
- def org_permissions
60
- return nil if @session_claims.nil?
61
-
62
- @session_claims["org_permissions"]
63
- end
64
-
65
- private
66
-
67
- def fetch_user(user_id)
68
- cached_fetch("clerk_user:#{user_id}") do
69
- sdk.users.find(user_id)
70
- end
71
- end
72
-
73
- def fetch_org(org_id)
74
- cached_fetch("clerk_org:#{org_id}") do
75
- sdk.organizations.find(org_id)
76
- end
77
- end
78
-
79
- def cached_fetch(key, &block)
80
- if store = Clerk.configuration.middleware_cache_store
81
- store.fetch(key, expires_in: CACHE_TTL, &block)
82
- else
83
- yield
84
- end
85
- end
86
-
87
- def sdk
88
- @sdk ||= Clerk::SDK.new
89
- end
90
- end
91
-
92
- class RackMiddlewareV2
93
- def initialize(app)
94
- @app = app
95
- @excluded_routes = {}
96
- @excluded_routes_wildcards = []
97
-
98
- Clerk.configuration.excluded_routes.each do |route|
99
- route = route.strip
100
-
101
- if route.ends_with?("/*")
102
- @excluded_routes_wildcards << route[0..-2]
103
- else
104
- @excluded_routes[route] = true
105
- end
106
- end
107
-
108
- @excluded_routes_wildcards.uniq!
109
- end
110
-
111
- def call(env)
112
- env = env
113
- req = Rack::Request.new(env)
114
-
115
- if @excluded_routes[req.path]
116
- return @app.call(env)
117
- end
118
-
119
- @excluded_routes_wildcards.each do |route|
120
- return @app.call(env) if req.path.starts_with?(route)
121
- end
122
-
123
- env["clerk"] = Clerk::ProxyV2.new
124
-
125
- auth_context = AuthenticateContext.new(req, Clerk.configuration)
126
- auth_request = AuthenticateRequest.new(auth_context)
127
-
128
- status, auth_request_headers, body = auth_request.resolve(env)
129
- return [status, auth_request_headers, body] if status
130
-
131
- status, headers, body = @app.call(env)
132
-
133
- if !auth_request_headers.empty?
134
- # Remove them to avoid overriding existing cookies set in headers by other middlewares
135
- auth_request_cookies = auth_request_headers.delete(COOKIE_HEADER)
136
- # merge non-cookie related headers into response headers
137
- headers.merge!(auth_request_headers)
138
-
139
- set_cookie_headers!(headers, auth_request_cookies) if auth_request_cookies
140
- end
141
-
142
- [status, headers, body]
143
- end
144
-
145
- private
146
-
147
- def set_cookie_headers!(headers, cookie_headers)
148
- cookie_headers.each do |cookie_header|
149
- cookie_key = cookie_header.split(';')[0].split('=')[0]
150
- cookie = Rack::Utils.parse_cookies_header(cookie_header)
151
- cookie_params = convert_http_cookie_to_cookie_setter_params(cookie, cookie_key)
152
- Rack::Utils.set_cookie_header!(headers, cookie_key, cookie_params)
153
- end
154
- end
155
-
156
- def convert_http_cookie_to_cookie_setter_params(cookie, cookie_key)
157
- # convert cookie to to match cookie setter method params (lowercase symbolized keys with `:value` key)
158
- cookie_params = cookie.transform_keys { |k| k.downcase.to_sym }
159
- # drop the current cookie name key to avoid polluting the expected cookie params
160
- cookie_params[:value] = cookie.delete(cookie_key)
161
- # fix issue with cookie expiration expected to be Date type
162
- cookie_params[:expires] = Date.parse(cookie_params[:expires]) if cookie_params[:expires]
163
-
164
- cookie_params
165
- end
166
- end
167
- end
@@ -1,16 +0,0 @@
1
- require "forwardable"
2
- require_relative "singular_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class Allowlist
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @resource = SingularResource.new(client, "beta_features/allowlist")
11
- end
12
-
13
- def_delegators :@resource, :update
14
- end
15
- end
16
- end
@@ -1,16 +0,0 @@
1
- require "forwardable"
2
- require_relative "plural_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class AllowlistIdentifiers
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @resource = PluralResource.new(client, "allowlist_identifiers")
11
- end
12
-
13
- def_delegators :@resource, :all, :create, :delete
14
- end
15
- end
16
- end
@@ -1,23 +0,0 @@
1
- require "forwardable"
2
- require_relative "plural_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class Clients
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @client = client
11
- @resource = PluralResource.new(client, "clients")
12
- end
13
-
14
- def verify_token(token)
15
- @client.request(:post, "#{@resource.collection_path}/verify",
16
- body: {token: token})
17
- end
18
-
19
- def_delegators :@resource, :all, :find
20
- end
21
- end
22
- end
23
-
@@ -1,17 +0,0 @@
1
- require "forwardable"
2
- require_relative "plural_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class EmailAddresses
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @client = client
11
- @resource = PluralResource.new(client, "email_addresses")
12
- end
13
-
14
- def_delegators :@resource, :find, :create, :update, :delete
15
- end
16
- end
17
- end
@@ -1,16 +0,0 @@
1
- require "forwardable"
2
- require_relative "plural_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class Emails
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @resource = PluralResource.new(client, "emails")
11
- end
12
-
13
- def_delegators :@resource, :create
14
- end
15
- end
16
- end
@@ -1,18 +0,0 @@
1
- require "forwardable"
2
- require_relative "plural_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class JWKS
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @client = client
11
- end
12
-
13
- def all(timeout: 5)
14
- @client.request(:get, "jwks", timeout: timeout)
15
- end
16
- end
17
- end
18
- end
@@ -1,73 +0,0 @@
1
- require "forwardable"
2
- require_relative "plural_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class Organizations
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @client = client
11
- @resource = PluralResource.new(client, "organizations")
12
- end
13
-
14
- def_delegators :@resource, :all, :find, :create, :update, :delete
15
-
16
- def update_metadata(org_id, private_metadata: {}, public_metadata: {})
17
- data = {}
18
- data["private_metadata"] = private_metadata.to_json if !private_metadata.empty?
19
- data["public_metadata"] = public_metadata.to_json if !public_metadata.empty?
20
-
21
- @client.request(:patch, "#{@resource.resource_path(org_id)}/metadata", body: data)
22
- end
23
-
24
- #
25
- # Invitations
26
- #
27
- def pending_invitations(org_id, query_params = {})
28
- @client.request(:get, "#{invitations_path(org_id)}/pending", query: query_params)
29
- end
30
-
31
- def create_invitation(org_id, data)
32
- @client.request(:post, invitations_path(org_id), body: data)
33
- end
34
-
35
- def revoke_invitation(org_id, invitation_id, data)
36
- @client.request(:post, "#{invitations_path(org_id, invitation_id)}/revoke", body: data)
37
- end
38
-
39
- #
40
- # Memberships
41
- #
42
- def memberships(org_id, query_params = {})
43
- @client.request(:get, memberships_path(org_id), query: query_params)
44
- end
45
-
46
- def create_membership(org_id, data)
47
- @client.request(:post, memberships_path(org_id), body: data)
48
- end
49
-
50
- def update_membership(org_id, user_id, data)
51
- @client.request(:patch, memberships_path(org_id, user_id), body: data)
52
- end
53
-
54
- def delete_membership(org_id, user_id)
55
- @client.request(:delete, memberships_path(org_id, user_id))
56
- end
57
-
58
- private
59
-
60
- def invitations_path(org_id, invitation_id=nil)
61
- path = "#{@resource.resource_path(org_id)}/invitations"
62
- path << "/#{invitation_id}" if invitation_id
63
- path
64
- end
65
-
66
- def memberships_path(org_id, user_id=nil)
67
- path = "#{@resource.resource_path(org_id)}/memberships"
68
- path << "/#{user_id}" if user_id
69
- path
70
- end
71
- end
72
- end
73
- end
@@ -1,17 +0,0 @@
1
- require "forwardable"
2
- require_relative "plural_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class PhoneNumbers
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @client = client
11
- @resource = PluralResource.new(client, "phone_numbers")
12
- end
13
-
14
- def_delegators :@resource, :find, :create, :update, :delete
15
- end
16
- end
17
- end
@@ -1,38 +0,0 @@
1
- module Clerk
2
- module Resources
3
- class PluralResource
4
- def initialize(client, path_prefix)
5
- @client = client
6
- @path_prefix = path_prefix
7
- end
8
-
9
- def all(query_params = {})
10
- @client.request(:get, collection_path, query: query_params)
11
- end
12
-
13
- def find(id)
14
- @client.request(:get, resource_path(id))
15
- end
16
-
17
- def create(data = nil)
18
- @client.request(:post, collection_path, body: data)
19
- end
20
-
21
- def update(id, changes = nil)
22
- @client.request(:patch, resource_path(id), body: changes)
23
- end
24
-
25
- def delete(id)
26
- @client.request(:delete, resource_path(id))
27
- end
28
-
29
- def collection_path
30
- @path_prefix
31
- end
32
-
33
- def resource_path(id)
34
- "#{@path_prefix}/#{id}"
35
- end
36
- end
37
- end
38
- end
@@ -1,26 +0,0 @@
1
- require "forwardable"
2
- require_relative "plural_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class Sessions
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @client = client
11
- @resource = PluralResource.new(client, "sessions")
12
- end
13
-
14
- def revoke(id)
15
- @client.request(:post, "#{@resource.resource_path(id)}/revoke")
16
- end
17
-
18
- def verify_token(id, token)
19
- @client.request(:post, "#{@resource.resource_path(id)}/verify",
20
- body: {token: token})
21
- end
22
-
23
- def_delegators :@resource, :all, :find
24
- end
25
- end
26
- end
@@ -1,14 +0,0 @@
1
- module Clerk
2
- module Resources
3
- class SingularResource
4
- def initialize(client, resource_path)
5
- @client = client
6
- @resource_path = resource_path
7
- end
8
-
9
- def update(changes = {})
10
- @client.request(:patch, @resource_path, body: changes)
11
- end
12
- end
13
- end
14
- end
@@ -1,37 +0,0 @@
1
- require "forwardable"
2
- require_relative "plural_resource"
3
-
4
- module Clerk
5
- module Resources
6
- class Users
7
- extend Forwardable
8
-
9
- def initialize(client)
10
- @client = client
11
- @resource = PluralResource.new(client, "users")
12
- end
13
-
14
- def_delegators :@resource, :all, :find, :create, :update, :delete
15
-
16
- def oauth_access_token(user_id, provider)
17
- @client.request(:get, "#{@resource.resource_path(user_id)}/oauth_access_tokens/#{provider}")
18
- end
19
-
20
- def verify_password(user_id, password)
21
- @client.request(:post, "#{@resource.resource_path(user_id)}/verify_password", body: { password: password })
22
- end
23
-
24
- def verify_totp(user_id, totp_or_backup_code)
25
- @client.request(:post, "#{@resource.resource_path(user_id)}/verify_totp", body: { code: totp_or_backup_code })
26
- end
27
-
28
- def disable_mfa(user_id)
29
- @client.request(:delete, "#{@resource.resource_path(user_id)}/mfa")
30
- end
31
-
32
- def organization_memberships(user_id, query_params = {})
33
- @client.request(:get, "#{@resource.resource_path(user_id)}/organization_memberships", query: query_params)
34
- end
35
- end
36
- end
37
- end
@@ -1,10 +0,0 @@
1
- require_relative "resources/allowlist_identifiers"
2
- require_relative "resources/allowlist"
3
- require_relative "resources/clients"
4
- require_relative "resources/email_addresses"
5
- require_relative "resources/emails"
6
- require_relative "resources/organizations"
7
- require_relative "resources/phone_numbers"
8
- require_relative "resources/sessions"
9
- require_relative "resources/users"
10
- require_relative "resources/jwks"