graphql_devise 0.18.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +7 -2
  3. data/.gitignore +3 -0
  4. data/.rubocop.yml +9 -10
  5. data/Appraisals +70 -18
  6. data/CHANGELOG.md +53 -0
  7. data/README.md +71 -142
  8. data/app/controllers/graphql_devise/graphql_controller.rb +3 -3
  9. data/app/views/graphql_devise/mailer/confirmation_instructions.html.erb +1 -5
  10. data/config/routes.rb +0 -2
  11. data/graphql_devise.gemspec +7 -5
  12. data/lib/graphql_devise/concerns/additional_controller_methods.rb +48 -0
  13. data/lib/graphql_devise/concerns/additional_model_methods.rb +17 -0
  14. data/lib/graphql_devise/concerns/authenticatable.rb +1 -1
  15. data/lib/graphql_devise/concerns/controller_methods.rb +70 -93
  16. data/lib/graphql_devise/concerns/field_authentication.rb +14 -0
  17. data/lib/graphql_devise/concerns/set_user_by_token.rb +1 -1
  18. data/lib/graphql_devise/default_operations.rb +16 -0
  19. data/lib/graphql_devise/engine.rb +0 -2
  20. data/lib/graphql_devise/model/with_email_updater.rb +5 -30
  21. data/lib/graphql_devise/mount_method/operation_preparer.rb +0 -7
  22. data/lib/graphql_devise/mount_method/operation_preparers/custom_operation_preparer.rb +1 -1
  23. data/lib/graphql_devise/mount_method/operation_preparers/default_operation_preparer.rb +1 -1
  24. data/lib/graphql_devise/mount_method/operation_sanitizer.rb +0 -12
  25. data/lib/graphql_devise/mount_method/option_sanitizer.rb +0 -2
  26. data/lib/graphql_devise/mount_method/option_sanitizers/array_checker.rb +2 -2
  27. data/lib/graphql_devise/mount_method/option_sanitizers/class_checker.rb +2 -2
  28. data/lib/graphql_devise/mount_method/option_sanitizers/hash_checker.rb +1 -1
  29. data/lib/graphql_devise/mount_method/option_sanitizers/string_checker.rb +1 -1
  30. data/lib/graphql_devise/mount_method/option_validators/provided_operations_validator.rb +0 -2
  31. data/lib/graphql_devise/mount_method/option_validators/skip_only_validator.rb +1 -1
  32. data/lib/graphql_devise/mount_method/option_validators/supported_operations_validator.rb +1 -1
  33. data/lib/graphql_devise/mount_method/options_validator.rb +0 -3
  34. data/lib/graphql_devise/mount_method/supported_options.rb +0 -5
  35. data/lib/graphql_devise/mutations/base.rb +1 -1
  36. data/lib/graphql_devise/mutations/confirm_registration_with_token.rb +1 -1
  37. data/lib/graphql_devise/mutations/login.rb +1 -1
  38. data/lib/graphql_devise/mutations/register.rb +1 -1
  39. data/lib/graphql_devise/mutations/update_password_with_token.rb +1 -1
  40. data/lib/graphql_devise/resolvers/base.rb +1 -1
  41. data/lib/graphql_devise/resource_loader.rb +71 -39
  42. data/lib/graphql_devise/route_mounter.rb +13 -0
  43. data/lib/graphql_devise/schema_plugin.rb +7 -40
  44. data/lib/graphql_devise/types/authenticatable_type.rb +1 -1
  45. data/lib/graphql_devise/types/base_field.rb +9 -0
  46. data/lib/graphql_devise/types/base_type.rb +8 -0
  47. data/lib/graphql_devise/types/credential_type.rb +1 -1
  48. data/lib/graphql_devise/types/mutation_type.rb +1 -0
  49. data/lib/graphql_devise/types/query_type.rb +1 -0
  50. data/lib/graphql_devise/version.rb +1 -1
  51. data/lib/graphql_devise.rb +21 -29
  52. data/spec/dummy/app/controllers/api/v1/graphql_controller.rb +1 -16
  53. data/spec/dummy/app/graphql/dummy_schema.rb +1 -5
  54. data/spec/dummy/app/graphql/interpreter_schema.rb +6 -2
  55. data/spec/dummy/app/graphql/mutations/base_mutation.rb +6 -0
  56. data/spec/dummy/app/graphql/mutations/update_user.rb +2 -4
  57. data/spec/dummy/app/graphql/types/admin_type.rb +1 -1
  58. data/spec/dummy/app/graphql/types/custom_admin_type.rb +1 -1
  59. data/spec/dummy/app/graphql/types/mutation_type.rb +3 -1
  60. data/spec/dummy/app/graphql/types/query_type.rb +3 -1
  61. data/spec/dummy/app/graphql/types/user_type.rb +1 -1
  62. data/spec/dummy/config/environments/test.rb +1 -1
  63. data/spec/dummy/config/routes.rb +5 -9
  64. data/spec/graphql_devise/model/with_email_updater_spec.rb +17 -35
  65. data/spec/rails_helper.rb +5 -5
  66. data/spec/requests/mutations/resend_confirmation_with_token_spec.rb +2 -3
  67. data/spec/requests/user_controller_spec.rb +1 -33
  68. data/spec/services/resource_loader_spec.rb +14 -3
  69. metadata +55 -48
  70. data/app/controllers/graphql_devise/concerns/additional_controller_methods.rb +0 -72
  71. data/app/controllers/graphql_devise/concerns/set_user_by_token.rb +0 -21
  72. data/app/helpers/graphql_devise/mailer_helper.rb +0 -37
  73. data/app/models/graphql_devise/concerns/additional_model_methods.rb +0 -21
  74. data/app/models/graphql_devise/concerns/model.rb +0 -25
  75. data/lib/graphql_devise/default_operations/mutations.rb +0 -32
  76. data/lib/graphql_devise/default_operations/resolvers.rb +0 -14
  77. data/lib/graphql_devise/mutations/resend_confirmation.rb +0 -45
  78. data/lib/graphql_devise/mutations/send_password_reset.rb +0 -38
  79. data/lib/graphql_devise/mutations/sign_up.rb +0 -61
  80. data/lib/graphql_devise/mutations/update_password.rb +0 -46
  81. data/lib/graphql_devise/rails/routes.rb +0 -15
  82. data/lib/graphql_devise/resolvers/check_password_token.rb +0 -43
  83. data/lib/graphql_devise/resolvers/confirm_account.rb +0 -42
  84. data/spec/dummy/app/graphql/mutations/sign_up.rb +0 -14
  85. data/spec/dummy/app/graphql/resolvers/confirm_admin_account.rb +0 -13
  86. data/spec/requests/mutations/resend_confirmation_spec.rb +0 -153
  87. data/spec/requests/mutations/send_password_reset_spec.rb +0 -103
  88. data/spec/requests/mutations/sign_up_spec.rb +0 -170
  89. data/spec/requests/mutations/update_password_spec.rb +0 -116
  90. data/spec/requests/queries/check_password_token_spec.rb +0 -149
  91. data/spec/requests/queries/confirm_account_spec.rb +0 -137
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql_devise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Celi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2022-03-09 00:00:00.000000000 Z
12
+ date: 2022-08-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: devise_token_auth
@@ -40,7 +40,7 @@ dependencies:
40
40
  version: '1.8'
41
41
  - - "<"
42
42
  - !ruby/object:Gem::Version
43
- version: 1.14.0
43
+ version: '2.1'
44
44
  type: :runtime
45
45
  prerelease: false
46
46
  version_requirements: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  version: '1.8'
51
51
  - - "<"
52
52
  - !ruby/object:Gem::Version
53
- version: 1.14.0
53
+ version: '2.1'
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: rails
56
56
  requirement: !ruby/object:Gem::Requirement
@@ -71,6 +71,20 @@ dependencies:
71
71
  - - "<"
72
72
  - !ruby/object:Gem::Version
73
73
  version: '6.2'
74
+ - !ruby/object:Gem::Dependency
75
+ name: zeitwerk
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ type: :runtime
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
74
88
  - !ruby/object:Gem::Dependency
75
89
  name: appraisal
76
90
  requirement: !ruby/object:Gem::Requirement
@@ -215,44 +229,58 @@ dependencies:
215
229
  name: rubocop
216
230
  requirement: !ruby/object:Gem::Requirement
217
231
  requirements:
218
- - - '='
232
+ - - "<"
219
233
  - !ruby/object:Gem::Version
220
- version: 0.68.1
234
+ version: 0.82.0
221
235
  type: :development
222
236
  prerelease: false
223
237
  version_requirements: !ruby/object:Gem::Requirement
224
238
  requirements:
225
- - - '='
239
+ - - "<"
226
240
  - !ruby/object:Gem::Version
227
- version: 0.68.1
241
+ version: 0.82.0
228
242
  - !ruby/object:Gem::Dependency
229
243
  name: rubocop-performance
230
244
  requirement: !ruby/object:Gem::Requirement
231
245
  requirements:
232
- - - ">="
246
+ - - "<"
233
247
  - !ruby/object:Gem::Version
234
- version: '0'
248
+ version: 1.6.0
235
249
  type: :development
236
250
  prerelease: false
237
251
  version_requirements: !ruby/object:Gem::Requirement
238
252
  requirements:
239
- - - ">="
253
+ - - "<"
240
254
  - !ruby/object:Gem::Version
241
- version: '0'
255
+ version: 1.6.0
256
+ - !ruby/object:Gem::Dependency
257
+ name: rubocop-rails
258
+ requirement: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - "<"
261
+ - !ruby/object:Gem::Version
262
+ version: 2.6.0
263
+ type: :development
264
+ prerelease: false
265
+ version_requirements: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - "<"
268
+ - !ruby/object:Gem::Version
269
+ version: 2.6.0
242
270
  - !ruby/object:Gem::Dependency
243
271
  name: rubocop-rspec
244
272
  requirement: !ruby/object:Gem::Requirement
245
273
  requirements:
246
- - - ">="
274
+ - - "<"
247
275
  - !ruby/object:Gem::Version
248
- version: '0'
276
+ version: 1.39.0
249
277
  type: :development
250
278
  prerelease: false
251
279
  version_requirements: !ruby/object:Gem::Requirement
252
280
  requirements:
253
- - - ">="
281
+ - - "<"
254
282
  - !ruby/object:Gem::Version
255
- version: '0'
283
+ version: 1.39.0
256
284
  - !ruby/object:Gem::Dependency
257
285
  name: sqlite3
258
286
  requirement: !ruby/object:Gem::Requirement
@@ -289,13 +317,8 @@ files:
289
317
  - README.md
290
318
  - Rakefile
291
319
  - app/controllers/graphql_devise/application_controller.rb
292
- - app/controllers/graphql_devise/concerns/additional_controller_methods.rb
293
- - app/controllers/graphql_devise/concerns/set_user_by_token.rb
294
320
  - app/controllers/graphql_devise/graphql_controller.rb
295
321
  - app/helpers/graphql_devise/application_helper.rb
296
- - app/helpers/graphql_devise/mailer_helper.rb
297
- - app/models/graphql_devise/concerns/additional_model_methods.rb
298
- - app/models/graphql_devise/concerns/model.rb
299
322
  - app/views/.keep
300
323
  - app/views/graphql_devise/mailer/confirmation_instructions.html.erb
301
324
  - app/views/graphql_devise/mailer/reset_password_instructions.html.erb
@@ -308,11 +331,13 @@ files:
308
331
  - graphql_devise.gemspec
309
332
  - lib/generators/graphql_devise/install_generator.rb
310
333
  - lib/graphql_devise.rb
334
+ - lib/graphql_devise/concerns/additional_controller_methods.rb
335
+ - lib/graphql_devise/concerns/additional_model_methods.rb
311
336
  - lib/graphql_devise/concerns/authenticatable.rb
312
337
  - lib/graphql_devise/concerns/controller_methods.rb
338
+ - lib/graphql_devise/concerns/field_authentication.rb
313
339
  - lib/graphql_devise/concerns/set_user_by_token.rb
314
- - lib/graphql_devise/default_operations/mutations.rb
315
- - lib/graphql_devise/default_operations/resolvers.rb
340
+ - lib/graphql_devise/default_operations.rb
316
341
  - lib/graphql_devise/engine.rb
317
342
  - lib/graphql_devise/errors/authentication_error.rb
318
343
  - lib/graphql_devise/errors/detailed_user_error.rb
@@ -343,22 +368,18 @@ files:
343
368
  - lib/graphql_devise/mutations/login.rb
344
369
  - lib/graphql_devise/mutations/logout.rb
345
370
  - lib/graphql_devise/mutations/register.rb
346
- - lib/graphql_devise/mutations/resend_confirmation.rb
347
371
  - lib/graphql_devise/mutations/resend_confirmation_with_token.rb
348
- - lib/graphql_devise/mutations/send_password_reset.rb
349
372
  - lib/graphql_devise/mutations/send_password_reset_with_token.rb
350
- - lib/graphql_devise/mutations/sign_up.rb
351
- - lib/graphql_devise/mutations/update_password.rb
352
373
  - lib/graphql_devise/mutations/update_password_with_token.rb
353
- - lib/graphql_devise/rails/routes.rb
354
374
  - lib/graphql_devise/resolvers/base.rb
355
- - lib/graphql_devise/resolvers/check_password_token.rb
356
- - lib/graphql_devise/resolvers/confirm_account.rb
357
375
  - lib/graphql_devise/resolvers/dummy.rb
358
376
  - lib/graphql_devise/resource_loader.rb
377
+ - lib/graphql_devise/route_mounter.rb
359
378
  - lib/graphql_devise/schema.rb
360
379
  - lib/graphql_devise/schema_plugin.rb
361
380
  - lib/graphql_devise/types/authenticatable_type.rb
381
+ - lib/graphql_devise/types/base_field.rb
382
+ - lib/graphql_devise/types/base_type.rb
362
383
  - lib/graphql_devise/types/credential_type.rb
363
384
  - lib/graphql_devise/types/mutation_type.rb
364
385
  - lib/graphql_devise/types/query_type.rb
@@ -370,13 +391,12 @@ files:
370
391
  - spec/dummy/app/controllers/application_controller.rb
371
392
  - spec/dummy/app/graphql/dummy_schema.rb
372
393
  - spec/dummy/app/graphql/interpreter_schema.rb
394
+ - spec/dummy/app/graphql/mutations/base_mutation.rb
373
395
  - spec/dummy/app/graphql/mutations/login.rb
374
396
  - spec/dummy/app/graphql/mutations/register.rb
375
397
  - spec/dummy/app/graphql/mutations/register_confirmed_user.rb
376
398
  - spec/dummy/app/graphql/mutations/reset_admin_password_with_token.rb
377
- - spec/dummy/app/graphql/mutations/sign_up.rb
378
399
  - spec/dummy/app/graphql/mutations/update_user.rb
379
- - spec/dummy/app/graphql/resolvers/confirm_admin_account.rb
380
400
  - spec/dummy/app/graphql/resolvers/public_user.rb
381
401
  - spec/dummy/app/graphql/resolvers/user_show.rb
382
402
  - spec/dummy/app/graphql/types/admin_type.rb
@@ -453,15 +473,9 @@ files:
453
473
  - spec/requests/mutations/login_spec.rb
454
474
  - spec/requests/mutations/logout_spec.rb
455
475
  - spec/requests/mutations/register_spec.rb
456
- - spec/requests/mutations/resend_confirmation_spec.rb
457
476
  - spec/requests/mutations/resend_confirmation_with_token_spec.rb
458
- - spec/requests/mutations/send_password_reset_spec.rb
459
477
  - spec/requests/mutations/send_password_reset_with_token_spec.rb
460
- - spec/requests/mutations/sign_up_spec.rb
461
- - spec/requests/mutations/update_password_spec.rb
462
478
  - spec/requests/mutations/update_password_with_token_spec.rb
463
- - spec/requests/queries/check_password_token_spec.rb
464
- - spec/requests/queries/confirm_account_spec.rb
465
479
  - spec/requests/queries/introspection_query_spec.rb
466
480
  - spec/requests/user_controller_spec.rb
467
481
  - spec/services/mount_method/operation_preparer_spec.rb
@@ -505,14 +519,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
505
519
  requirements:
506
520
  - - ">="
507
521
  - !ruby/object:Gem::Version
508
- version: 2.2.0
522
+ version: 2.4.4
509
523
  required_rubygems_version: !ruby/object:Gem::Requirement
510
524
  requirements:
511
525
  - - ">="
512
526
  - !ruby/object:Gem::Version
513
527
  version: '0'
514
528
  requirements: []
515
- rubygems_version: 3.1.6
529
+ rubygems_version: 3.3.19
516
530
  signing_key:
517
531
  specification_version: 4
518
532
  summary: GraphQL queries and mutations on top of devise_token_auth
@@ -524,13 +538,12 @@ test_files:
524
538
  - spec/dummy/app/controllers/application_controller.rb
525
539
  - spec/dummy/app/graphql/dummy_schema.rb
526
540
  - spec/dummy/app/graphql/interpreter_schema.rb
541
+ - spec/dummy/app/graphql/mutations/base_mutation.rb
527
542
  - spec/dummy/app/graphql/mutations/login.rb
528
543
  - spec/dummy/app/graphql/mutations/register.rb
529
544
  - spec/dummy/app/graphql/mutations/register_confirmed_user.rb
530
545
  - spec/dummy/app/graphql/mutations/reset_admin_password_with_token.rb
531
- - spec/dummy/app/graphql/mutations/sign_up.rb
532
546
  - spec/dummy/app/graphql/mutations/update_user.rb
533
- - spec/dummy/app/graphql/resolvers/confirm_admin_account.rb
534
547
  - spec/dummy/app/graphql/resolvers/public_user.rb
535
548
  - spec/dummy/app/graphql/resolvers/user_show.rb
536
549
  - spec/dummy/app/graphql/types/admin_type.rb
@@ -607,15 +620,9 @@ test_files:
607
620
  - spec/requests/mutations/login_spec.rb
608
621
  - spec/requests/mutations/logout_spec.rb
609
622
  - spec/requests/mutations/register_spec.rb
610
- - spec/requests/mutations/resend_confirmation_spec.rb
611
623
  - spec/requests/mutations/resend_confirmation_with_token_spec.rb
612
- - spec/requests/mutations/send_password_reset_spec.rb
613
624
  - spec/requests/mutations/send_password_reset_with_token_spec.rb
614
- - spec/requests/mutations/sign_up_spec.rb
615
- - spec/requests/mutations/update_password_spec.rb
616
625
  - spec/requests/mutations/update_password_with_token_spec.rb
617
- - spec/requests/queries/check_password_token_spec.rb
618
- - spec/requests/queries/confirm_account_spec.rb
619
626
  - spec/requests/queries/introspection_query_spec.rb
620
627
  - spec/requests/user_controller_spec.rb
621
628
  - spec/services/mount_method/operation_preparer_spec.rb
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphqlDevise
4
- module Concerns
5
- module AdditionalControllerMethods
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- attr_accessor :client_id, :token, :resource
10
- end
11
-
12
- def gql_devise_context(*models)
13
- {
14
- current_resource: authenticate_model(*models),
15
- controller: self
16
- }
17
- end
18
-
19
- def authenticate_model(*models)
20
- models.each do |model|
21
- set_resource_by_token(model)
22
- return @resource if @resource.present?
23
- end
24
-
25
- nil
26
- end
27
-
28
- def resource_class(resource = nil)
29
- # Return the resource class instead of looking for a Devise mapping if resource is already a resource class
30
- return resource if resource.respond_to?(:find_by)
31
-
32
- super
33
- end
34
-
35
- def full_url_without_params
36
- request.base_url + request.path
37
- end
38
-
39
- def set_resource_by_token(resource)
40
- set_user_by_token(resource)
41
- end
42
-
43
- def graphql_context(resource_name)
44
- ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc, caller)
45
- `graphql_context` is deprecated and will be removed in a future version of this gem.
46
- Use `gql_devise_context(model)` instead.
47
-
48
- EXAMPLE
49
- include GraphqlDevise::SetUserByToken
50
-
51
- DummySchema.execute(params[:query], context: gql_devise_context(User))
52
- DummySchema.execute(params[:query], context: gql_devise_context(User, Admin))
53
- DEPRECATION
54
-
55
- {
56
- resource_name: resource_name,
57
- controller: self
58
- }
59
- end
60
-
61
- def build_redirect_headers(access_token, client, redirect_header_options = {})
62
- {
63
- DeviseTokenAuth.headers_names[:"access-token"] => access_token,
64
- DeviseTokenAuth.headers_names[:client] => client,
65
- :config => params[:config],
66
- :client_id => client,
67
- :token => access_token
68
- }.merge(redirect_header_options)
69
- end
70
- end
71
- end
72
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphqlDevise
4
- module Concerns
5
- module SetUserByToken
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- include DeviseTokenAuth::Concerns::SetUserByToken
10
- include GraphqlDevise::Concerns::AdditionalControllerMethods
11
-
12
- ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc, caller)
13
- Including GraphqlDevise::Concerns::SetUserByToken is deprecated and will be removed in a future version of
14
- this gem. Please use GraphqlDevise::SetUserByToken instead.
15
- EXAMPLE
16
- include GraphqlDevise::SetUserByToken
17
- DEPRECATION
18
- end
19
- end
20
- end
21
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphqlDevise
4
- module MailerHelper
5
- def confirmation_query(resource_name:, token:, redirect_url:)
6
- name = "#{GraphqlDevise.to_mapping_name(resource_name).camelize(:lower)}ConfirmAccount"
7
- raw = <<-GRAPHQL
8
- query($token:String!,$redirectUrl:String!){
9
- #{name}(confirmationToken:$token,redirectUrl:$redirectUrl){
10
- email
11
- }
12
- }
13
- GRAPHQL
14
-
15
- {
16
- query: raw.delete("\n").delete(' ').html_safe,
17
- variables: { token: token, redirectUrl: redirect_url }
18
- }
19
- end
20
-
21
- def password_reset_query(token:, redirect_url:, resource_name:)
22
- name = "#{GraphqlDevise.to_mapping_name(resource_name).camelize(:lower)}CheckPasswordToken"
23
- raw = <<-GRAPHQL
24
- query($token:String!,$redirectUrl:String!){
25
- #{name}(resetPasswordToken:$token,redirectUrl:$redirectUrl){
26
- email
27
- }
28
- }
29
- GRAPHQL
30
-
31
- {
32
- query: raw.delete("\n").delete(' ').html_safe,
33
- variables: { token: token, redirectUrl: redirect_url }
34
- }
35
- end
36
- end
37
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'graphql_devise/model/with_email_updater'
4
-
5
- module GraphqlDevise
6
- module Concerns
7
- module AdditionalModelMethods
8
- extend ActiveSupport::Concern
9
-
10
- class_methods do
11
- def reconfirmable
12
- devise_modules.include?(:confirmable) && column_names.include?('unconfirmed_email')
13
- end
14
- end
15
-
16
- def update_with_email(attributes = {})
17
- GraphqlDevise::Model::WithEmailUpdater.new(self, attributes).call
18
- end
19
- end
20
- end
21
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'graphql_devise/model/with_email_updater'
4
-
5
- module GraphqlDevise
6
- module Concerns
7
- module Model
8
- extend ActiveSupport::Concern
9
-
10
- included do
11
- include DeviseTokenAuth::Concerns::User
12
- include GraphqlDevise::Concerns::AdditionalModelMethods
13
-
14
- GraphqlDevise.configure_warden_serializer_for_model(self)
15
-
16
- ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc, caller)
17
- Including GraphqlDevise::Concerns::Model is deprecated and will be removed in a future version of
18
- this gem. Please use GraphqlDevise::Authenticatable instead.
19
- EXAMPLE
20
- include GraphqlDevise::Authenticatable
21
- DEPRECATION
22
- end
23
- end
24
- end
25
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'graphql_devise/mutations/base'
4
- require 'graphql_devise/mutations/login'
5
- require 'graphql_devise/mutations/logout'
6
- require 'graphql_devise/mutations/resend_confirmation'
7
- require 'graphql_devise/mutations/resend_confirmation_with_token'
8
- require 'graphql_devise/mutations/send_password_reset'
9
- require 'graphql_devise/mutations/send_password_reset_with_token'
10
- require 'graphql_devise/mutations/sign_up'
11
- require 'graphql_devise/mutations/register'
12
- require 'graphql_devise/mutations/update_password'
13
- require 'graphql_devise/mutations/update_password_with_token'
14
- require 'graphql_devise/mutations/confirm_registration_with_token'
15
-
16
- module GraphqlDevise
17
- module DefaultOperations
18
- MUTATIONS = {
19
- login: { klass: GraphqlDevise::Mutations::Login, authenticatable: true },
20
- logout: { klass: GraphqlDevise::Mutations::Logout, authenticatable: true },
21
- sign_up: { klass: GraphqlDevise::Mutations::SignUp, authenticatable: true, deprecation_reason: 'use register instead' },
22
- register: { klass: GraphqlDevise::Mutations::Register, authenticatable: true },
23
- update_password: { klass: GraphqlDevise::Mutations::UpdatePassword, authenticatable: true, deprecation_reason: 'use update_password_with_token instead' },
24
- update_password_with_token: { klass: GraphqlDevise::Mutations::UpdatePasswordWithToken, authenticatable: true },
25
- send_password_reset: { klass: GraphqlDevise::Mutations::SendPasswordReset, authenticatable: false, deprecation_reason: 'use send_password_reset_with_token instead' },
26
- send_password_reset_with_token: { klass: GraphqlDevise::Mutations::SendPasswordResetWithToken, authenticatable: false },
27
- resend_confirmation: { klass: GraphqlDevise::Mutations::ResendConfirmation, authenticatable: false, deprecation_reason: 'use resend_confirmation_with_token instead' },
28
- resend_confirmation_with_token: { klass: GraphqlDevise::Mutations::ResendConfirmationWithToken, authenticatable: false },
29
- confirm_registration_with_token: { klass: GraphqlDevise::Mutations::ConfirmRegistrationWithToken, authenticatable: true }
30
- }.freeze
31
- end
32
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'graphql_devise/resolvers/base'
4
- require 'graphql_devise/resolvers/check_password_token'
5
- require 'graphql_devise/resolvers/confirm_account'
6
-
7
- module GraphqlDevise
8
- module DefaultOperations
9
- QUERIES = {
10
- confirm_account: { klass: GraphqlDevise::Resolvers::ConfirmAccount, deprecation_reason: 'use the new confirmation flow as it does not require this query anymore' },
11
- check_password_token: { klass: GraphqlDevise::Resolvers::CheckPasswordToken, deprecation_reason: 'use the new password reset flow as it does not require this query anymore' }
12
- }.freeze
13
- end
14
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphqlDevise
4
- module Mutations
5
- class ResendConfirmation < Base
6
- argument :email, String, required: true, prepare: ->(email, _) { email.downcase }
7
- argument :redirect_url, String, required: true
8
-
9
- field :message, String, null: false
10
-
11
- def resolve(email:, redirect_url:)
12
- check_redirect_url_whitelist!(redirect_url)
13
-
14
- resource = find_confirmable_resource(email)
15
-
16
- if resource
17
- yield resource if block_given?
18
-
19
- if resource.confirmed? && !resource.pending_reconfirmation?
20
- raise_user_error(I18n.t('graphql_devise.confirmations.already_confirmed'))
21
- end
22
-
23
- resource.send_confirmation_instructions(
24
- redirect_url: redirect_url,
25
- template_path: ['graphql_devise/mailer'],
26
- schema_url: controller.full_url_without_params
27
- )
28
-
29
- { message: I18n.t('graphql_devise.confirmations.send_instructions', email: email) }
30
- else
31
- raise_user_error(I18n.t('graphql_devise.confirmations.user_not_found', email: email))
32
- end
33
- end
34
-
35
- private
36
-
37
- def find_confirmable_resource(email)
38
- email_insensitive = get_case_insensitive_field(:email, email)
39
- resource = find_resource(:unconfirmed_email, email_insensitive) if resource_class.reconfirmable
40
- resource ||= find_resource(:email, email_insensitive)
41
- resource
42
- end
43
- end
44
- end
45
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphqlDevise
4
- module Mutations
5
- class SendPasswordReset < Base
6
- argument :email, String, required: true
7
- argument :redirect_url, String, required: true
8
-
9
- field :message, String, null: false
10
-
11
- def resolve(email:, redirect_url:)
12
- check_redirect_url_whitelist!(redirect_url)
13
-
14
- resource = find_resource(:email, get_case_insensitive_field(:email, email))
15
-
16
- if resource
17
- yield resource if block_given?
18
-
19
- resource.send_reset_password_instructions(
20
- email: email,
21
- provider: 'email',
22
- redirect_url: redirect_url,
23
- template_path: ['graphql_devise/mailer'],
24
- schema_url: controller.full_url_without_params
25
- )
26
-
27
- if resource.errors.empty?
28
- { message: I18n.t('graphql_devise.passwords.send_instructions') }
29
- else
30
- raise_user_error_list(I18n.t('graphql_devise.invalid_resource'), errors: resource.errors.full_messages)
31
- end
32
- else
33
- raise_user_error(I18n.t('graphql_devise.user_not_found'))
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphqlDevise
4
- module Mutations
5
- class SignUp < Base
6
- argument :email, String, required: true
7
- argument :password, String, required: true
8
- argument :password_confirmation, String, required: true
9
- argument :confirm_success_url, String, required: false
10
-
11
- field :credentials,
12
- GraphqlDevise::Types::CredentialType,
13
- null: true,
14
- description: 'Authentication credentials. Null if after signUp resource is not active for authentication (e.g. Email confirmation required).'
15
-
16
- def resolve(confirm_success_url: nil, **attrs)
17
- resource = build_resource(attrs.merge(provider: provider))
18
- raise_user_error(I18n.t('graphql_devise.resource_build_failed')) if resource.blank?
19
-
20
- redirect_url = confirm_success_url || DeviseTokenAuth.default_confirm_success_url
21
- if confirmable_enabled? && redirect_url.blank?
22
- raise_user_error(I18n.t('graphql_devise.registrations.missing_confirm_redirect_url'))
23
- end
24
-
25
- check_redirect_url_whitelist!(redirect_url)
26
-
27
- resource.skip_confirmation_notification! if resource.respond_to?(:skip_confirmation_notification!)
28
-
29
- if resource.save
30
- yield resource if block_given?
31
-
32
- unless resource.confirmed?
33
- resource.send_confirmation_instructions(
34
- redirect_url: redirect_url,
35
- template_path: ['graphql_devise/mailer'],
36
- schema_url: controller.full_url_without_params
37
- )
38
- end
39
-
40
- response_payload = { authenticatable: resource }
41
-
42
- response_payload[:credentials] = set_auth_headers(resource) if resource.active_for_authentication?
43
-
44
- response_payload
45
- else
46
- resource.try(:clean_up_passwords)
47
- raise_user_error_list(
48
- I18n.t('graphql_devise.registration_failed'),
49
- errors: resource.errors.full_messages
50
- )
51
- end
52
- end
53
-
54
- private
55
-
56
- def build_resource(attrs)
57
- resource_class.new(attrs)
58
- end
59
- end
60
- end
61
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphqlDevise
4
- module Mutations
5
- class UpdatePassword < Base
6
- argument :password, String, required: true
7
- argument :password_confirmation, String, required: true
8
- argument :current_password, String, required: false
9
-
10
- def resolve(current_password: nil, **attrs)
11
- if current_resource.blank?
12
- raise_user_error(I18n.t('graphql_devise.not_authenticated'))
13
- elsif current_resource.provider != 'email'
14
- raise_user_error(
15
- I18n.t('graphql_devise.passwords.password_not_required', provider: current_resource.provider.humanize)
16
- )
17
- end
18
-
19
- if update_resource_password(current_password, attrs)
20
- current_resource.allow_password_change = false if recoverable_enabled?
21
- current_resource.save!
22
-
23
- yield current_resource if block_given?
24
-
25
- { authenticatable: current_resource }
26
- else
27
- raise_user_error_list(
28
- I18n.t('graphql_devise.passwords.update_password_error'),
29
- errors: current_resource.errors.full_messages
30
- )
31
- end
32
- end
33
-
34
- private
35
-
36
- def update_resource_password(current_password, attrs)
37
- allow_password_change = recoverable_enabled? && current_resource.allow_password_change == true
38
- if DeviseTokenAuth.check_current_password_before_update == false || allow_password_change
39
- current_resource.public_send(:update, attrs)
40
- else
41
- current_resource.public_send(:update_with_password, attrs.merge(current_password: current_password))
42
- end
43
- end
44
- end
45
- end
46
- end