graphql_devise 0.18.1 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +25 -2
  3. data/.gitignore +4 -0
  4. data/.rubocop.yml +9 -10
  5. data/Appraisals +72 -35
  6. data/CHANGELOG.md +63 -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 +8 -6
  12. data/lib/generators/graphql_devise/install_generator.rb +1 -1
  13. data/lib/graphql_devise/concerns/additional_controller_methods.rb +48 -0
  14. data/lib/graphql_devise/concerns/additional_model_methods.rb +17 -0
  15. data/lib/graphql_devise/concerns/authenticatable.rb +1 -1
  16. data/lib/graphql_devise/concerns/controller_methods.rb +79 -91
  17. data/lib/graphql_devise/concerns/field_authentication.rb +14 -0
  18. data/lib/graphql_devise/concerns/set_user_by_token.rb +1 -1
  19. data/lib/graphql_devise/default_operations.rb +16 -0
  20. data/lib/graphql_devise/engine.rb +0 -2
  21. data/lib/graphql_devise/model/with_email_updater.rb +5 -30
  22. data/lib/graphql_devise/mount_method/operation_preparer.rb +0 -7
  23. data/lib/graphql_devise/mount_method/operation_preparers/custom_operation_preparer.rb +1 -1
  24. data/lib/graphql_devise/mount_method/operation_preparers/default_operation_preparer.rb +1 -1
  25. data/lib/graphql_devise/mount_method/operation_sanitizer.rb +0 -12
  26. data/lib/graphql_devise/mount_method/option_sanitizer.rb +0 -2
  27. data/lib/graphql_devise/mount_method/option_sanitizers/array_checker.rb +2 -2
  28. data/lib/graphql_devise/mount_method/option_sanitizers/class_checker.rb +2 -2
  29. data/lib/graphql_devise/mount_method/option_sanitizers/hash_checker.rb +1 -1
  30. data/lib/graphql_devise/mount_method/option_sanitizers/string_checker.rb +1 -1
  31. data/lib/graphql_devise/mount_method/option_validators/provided_operations_validator.rb +0 -2
  32. data/lib/graphql_devise/mount_method/option_validators/skip_only_validator.rb +1 -1
  33. data/lib/graphql_devise/mount_method/option_validators/supported_operations_validator.rb +1 -1
  34. data/lib/graphql_devise/mount_method/options_validator.rb +0 -3
  35. data/lib/graphql_devise/mount_method/supported_options.rb +0 -5
  36. data/lib/graphql_devise/mutations/base.rb +1 -1
  37. data/lib/graphql_devise/mutations/confirm_registration_with_token.rb +2 -2
  38. data/lib/graphql_devise/mutations/login.rb +2 -2
  39. data/lib/graphql_devise/mutations/register.rb +2 -2
  40. data/lib/graphql_devise/mutations/update_password_with_token.rb +2 -2
  41. data/lib/graphql_devise/resolvers/base.rb +1 -1
  42. data/lib/graphql_devise/resource_loader.rb +71 -39
  43. data/lib/graphql_devise/route_mounter.rb +13 -0
  44. data/lib/graphql_devise/schema_plugin.rb +11 -40
  45. data/lib/graphql_devise/types/authenticatable_type.rb +1 -1
  46. data/lib/graphql_devise/types/base_field.rb +9 -0
  47. data/lib/graphql_devise/types/base_type.rb +8 -0
  48. data/lib/graphql_devise/types/credential_type.rb +1 -1
  49. data/lib/graphql_devise/types/mutation_type.rb +1 -0
  50. data/lib/graphql_devise/types/query_type.rb +1 -0
  51. data/lib/graphql_devise/version.rb +1 -1
  52. data/lib/graphql_devise.rb +21 -29
  53. data/spec/dummy/app/controllers/api/v1/graphql_controller.rb +2 -16
  54. data/spec/dummy/app/graphql/dummy_schema.rb +1 -5
  55. data/spec/dummy/app/graphql/interpreter_schema.rb +6 -2
  56. data/spec/dummy/app/graphql/mutations/base_mutation.rb +6 -0
  57. data/spec/dummy/app/graphql/mutations/update_user.rb +2 -4
  58. data/spec/dummy/app/graphql/types/admin_type.rb +1 -1
  59. data/spec/dummy/app/graphql/types/custom_admin_type.rb +1 -1
  60. data/spec/dummy/app/graphql/types/mutation_type.rb +3 -1
  61. data/spec/dummy/app/graphql/types/query_type.rb +3 -1
  62. data/spec/dummy/app/graphql/types/user_type.rb +1 -1
  63. data/spec/dummy/config/environments/test.rb +1 -1
  64. data/spec/dummy/config/routes.rb +5 -9
  65. data/spec/generators/graphql_devise/install_generator_spec.rb +2 -2
  66. data/spec/graphql_devise/model/with_email_updater_spec.rb +17 -35
  67. data/spec/rails_helper.rb +5 -5
  68. data/spec/requests/mutations/login_spec.rb +34 -0
  69. data/spec/requests/mutations/resend_confirmation_with_token_spec.rb +2 -3
  70. data/spec/requests/user_controller_spec.rb +1 -33
  71. data/spec/services/resource_loader_spec.rb +53 -3
  72. data/spec/spec_helper.rb +1 -1
  73. metadata +62 -55
  74. data/app/controllers/graphql_devise/concerns/additional_controller_methods.rb +0 -72
  75. data/app/controllers/graphql_devise/concerns/set_user_by_token.rb +0 -21
  76. data/app/helpers/graphql_devise/mailer_helper.rb +0 -37
  77. data/app/models/graphql_devise/concerns/additional_model_methods.rb +0 -21
  78. data/app/models/graphql_devise/concerns/model.rb +0 -25
  79. data/lib/graphql_devise/default_operations/mutations.rb +0 -32
  80. data/lib/graphql_devise/default_operations/resolvers.rb +0 -14
  81. data/lib/graphql_devise/mutations/resend_confirmation.rb +0 -45
  82. data/lib/graphql_devise/mutations/send_password_reset.rb +0 -38
  83. data/lib/graphql_devise/mutations/sign_up.rb +0 -61
  84. data/lib/graphql_devise/mutations/update_password.rb +0 -46
  85. data/lib/graphql_devise/rails/routes.rb +0 -15
  86. data/lib/graphql_devise/resolvers/check_password_token.rb +0 -43
  87. data/lib/graphql_devise/resolvers/confirm_account.rb +0 -42
  88. data/spec/dummy/app/graphql/mutations/sign_up.rb +0 -14
  89. data/spec/dummy/app/graphql/resolvers/confirm_admin_account.rb +0 -13
  90. data/spec/requests/mutations/resend_confirmation_spec.rb +0 -153
  91. data/spec/requests/mutations/send_password_reset_spec.rb +0 -103
  92. data/spec/requests/mutations/sign_up_spec.rb +0 -170
  93. data/spec/requests/mutations/update_password_spec.rb +0 -116
  94. data/spec/requests/queries/check_password_token_spec.rb +0 -149
  95. data/spec/requests/queries/confirm_account_spec.rb +0 -137
@@ -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
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActionDispatch::Routing
4
- class Mapper
5
- def mount_graphql_devise_for(resource, options = {})
6
- clean_options = GraphqlDevise::ResourceLoader.new(resource, options, true).call(
7
- GraphqlDevise::Types::QueryType,
8
- GraphqlDevise::Types::MutationType
9
- )
10
-
11
- post clean_options.at, to: 'graphql_devise/graphql#auth'
12
- get clean_options.at, to: 'graphql_devise/graphql#auth'
13
- end
14
- end
15
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphqlDevise
4
- module Resolvers
5
- class CheckPasswordToken < Base
6
- argument :reset_password_token, String, required: true
7
- argument :redirect_url, String, required: false
8
-
9
- def resolve(reset_password_token:, redirect_url: nil)
10
- resource = resource_class.with_reset_password_token(reset_password_token)
11
- raise_user_error(I18n.t('graphql_devise.passwords.reset_token_not_found')) if resource.blank?
12
-
13
- if resource.reset_password_period_valid?
14
- token_info = client_and_token(resource.create_token)
15
-
16
- resource.skip_confirmation! if confirmable_enabled? && !resource.confirmed_at
17
- resource.allow_password_change = true if recoverable_enabled?
18
-
19
- resource.save!
20
-
21
- yield resource if block_given?
22
-
23
- redirect_header_options = { reset_password: true }
24
- built_redirect_headers = redirect_headers(
25
- token_info,
26
- redirect_header_options
27
- )
28
-
29
- if redirect_url.present?
30
- check_redirect_url_whitelist!(redirect_url)
31
- controller.redirect_to(resource.build_auth_url(redirect_url, built_redirect_headers))
32
- else
33
- set_auth_headers(resource)
34
- end
35
-
36
- resource
37
- else
38
- raise_user_error(I18n.t('graphql_devise.passwords.reset_token_expired'))
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GraphqlDevise
4
- module Resolvers
5
- class ConfirmAccount < Base
6
- argument :confirmation_token, String, required: true
7
- argument :redirect_url, String, required: true
8
-
9
- def resolve(confirmation_token:, redirect_url:)
10
- check_redirect_url_whitelist!(redirect_url)
11
-
12
- resource = resource_class.confirm_by_token(confirmation_token)
13
-
14
- if resource.errors.empty?
15
- yield resource if block_given?
16
-
17
- redirect_header_options = { account_confirmation_success: true }
18
-
19
- redirect_to_link = if controller.signed_in?(resource_name)
20
- url = resource.build_auth_url(
21
- redirect_url,
22
- redirect_headers(
23
- client_and_token(resource.create_token),
24
- redirect_header_options
25
- )
26
- )
27
- resource.save!
28
-
29
- url
30
- else
31
- DeviseTokenAuth::Url.generate(redirect_url, redirect_header_options)
32
- end
33
-
34
- controller.redirect_to(redirect_to_link)
35
- resource
36
- else
37
- raise_user_error(I18n.t('graphql_devise.confirmations.invalid_token'))
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Mutations
4
- class SignUp < GraphqlDevise::Mutations::SignUp
5
- argument :name, String, required: false
6
-
7
- field :user, Types::UserType, null: true
8
-
9
- def resolve(email:, **attrs)
10
- original_payload = super
11
- original_payload.merge(user: original_payload[:authenticatable])
12
- end
13
- end
14
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Resolvers
4
- class ConfirmAdminAccount < GraphqlDevise::Resolvers::ConfirmAccount
5
- type Types::AdminType, null: false
6
-
7
- def resolve(confirmation_token:, redirect_url:)
8
- super do |admin|
9
- controller.sign_in(admin)
10
- end
11
- end
12
- end
13
- end