castle-rb 5.0.0 → 7.1.1

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 (144) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +113 -39
  3. data/lib/castle.rb +49 -29
  4. data/lib/castle/api.rb +20 -16
  5. data/lib/castle/api/approve_device.rb +20 -0
  6. data/lib/castle/api/authenticate.rb +37 -0
  7. data/lib/castle/api/end_impersonation.rb +24 -0
  8. data/lib/castle/api/filter.rb +37 -0
  9. data/lib/castle/api/get_device.rb +20 -0
  10. data/lib/castle/api/get_devices_for_user.rb +20 -0
  11. data/lib/castle/api/log.rb +37 -0
  12. data/lib/castle/api/report_device.rb +20 -0
  13. data/lib/castle/api/risk.rb +37 -0
  14. data/lib/castle/api/start_impersonation.rb +24 -0
  15. data/lib/castle/api/track.rb +21 -0
  16. data/lib/castle/client.rb +74 -68
  17. data/lib/castle/{extractors/client_id.rb → client_id/extract.rb} +2 -2
  18. data/lib/castle/commands/approve_device.rb +17 -0
  19. data/lib/castle/commands/authenticate.rb +13 -13
  20. data/lib/castle/commands/end_impersonation.rb +25 -0
  21. data/lib/castle/commands/filter.rb +22 -0
  22. data/lib/castle/commands/get_device.rb +17 -0
  23. data/lib/castle/commands/get_devices_for_user.rb +17 -0
  24. data/lib/castle/commands/log.rb +22 -0
  25. data/lib/castle/commands/report_device.rb +17 -0
  26. data/lib/castle/commands/risk.rb +22 -0
  27. data/lib/castle/commands/start_impersonation.rb +25 -0
  28. data/lib/castle/commands/track.rb +12 -13
  29. data/lib/castle/configuration.rb +31 -23
  30. data/lib/castle/context/{default.rb → get_default.rb} +5 -6
  31. data/lib/castle/context/{merger.rb → merge.rb} +3 -3
  32. data/lib/castle/context/prepare.rb +18 -0
  33. data/lib/castle/context/{sanitizer.rb → sanitize.rb} +1 -1
  34. data/lib/castle/core/get_connection.rb +27 -0
  35. data/lib/castle/{api/response.rb → core/process_response.rb} +8 -3
  36. data/lib/castle/core/process_webhook.rb +25 -0
  37. data/lib/castle/core/send_request.rb +42 -0
  38. data/lib/castle/errors.rb +38 -12
  39. data/lib/castle/failover/prepare_response.rb +28 -0
  40. data/lib/castle/failover/strategy.rb +23 -0
  41. data/lib/castle/{extractors/headers.rb → headers/extract.rb} +8 -6
  42. data/lib/castle/headers/filter.rb +40 -0
  43. data/lib/castle/headers/format.rb +24 -0
  44. data/lib/castle/{extractors/ip.rb → ips/extract.rb} +11 -7
  45. data/lib/castle/logger.rb +19 -0
  46. data/lib/castle/payload/prepare.rb +26 -0
  47. data/lib/castle/secure_mode.rb +7 -2
  48. data/lib/castle/session.rb +18 -0
  49. data/lib/castle/singleton_configuration.rb +9 -0
  50. data/lib/castle/support/hanami.rb +2 -6
  51. data/lib/castle/support/rails.rb +1 -3
  52. data/lib/castle/utils/clean_invalid_chars.rb +22 -0
  53. data/lib/castle/utils/clone.rb +15 -0
  54. data/lib/castle/utils/deep_symbolize_keys.rb +45 -0
  55. data/lib/castle/utils/get_timestamp.rb +15 -0
  56. data/lib/castle/utils/{merger.rb → merge.rb} +3 -3
  57. data/lib/castle/utils/secure_compare.rb +22 -0
  58. data/lib/castle/validators/not_supported.rb +1 -0
  59. data/lib/castle/validators/present.rb +1 -0
  60. data/lib/castle/verdict.rb +15 -0
  61. data/lib/castle/version.rb +1 -1
  62. data/lib/castle/webhooks/verify.rb +45 -0
  63. data/spec/integration/rails/rails_spec.rb +42 -14
  64. data/spec/integration/rails/support/application.rb +3 -1
  65. data/spec/integration/rails/support/home_controller.rb +50 -6
  66. data/spec/lib/castle/api/approve_device_spec.rb +21 -0
  67. data/spec/lib/castle/api/authenticate_spec.rb +136 -0
  68. data/spec/lib/castle/api/end_impersonation_spec.rb +65 -0
  69. data/spec/lib/castle/api/filter_spec.rb +5 -0
  70. data/spec/lib/castle/api/get_device_spec.rb +19 -0
  71. data/spec/lib/castle/api/get_devices_for_user_spec.rb +19 -0
  72. data/spec/lib/castle/api/log_spec.rb +5 -0
  73. data/spec/lib/castle/api/report_device_spec.rb +21 -0
  74. data/spec/lib/castle/api/risk_spec.rb +5 -0
  75. data/spec/lib/castle/api/start_impersonation_spec.rb +65 -0
  76. data/spec/lib/castle/api/track_spec.rb +72 -0
  77. data/spec/lib/castle/api_spec.rb +14 -15
  78. data/spec/lib/castle/{extractors/client_id_spec.rb → client_id/extract_spec.rb} +6 -15
  79. data/spec/lib/castle/client_spec.rb +110 -92
  80. data/spec/lib/castle/commands/approve_device_spec.rb +24 -0
  81. data/spec/lib/castle/commands/authenticate_spec.rb +15 -31
  82. data/spec/lib/castle/commands/end_impersonation_spec.rb +79 -0
  83. data/spec/lib/castle/commands/filter_spec.rb +72 -0
  84. data/spec/lib/castle/commands/get_device_spec.rb +24 -0
  85. data/spec/lib/castle/commands/{review_spec.rb → get_devices_for_user_spec.rb} +7 -7
  86. data/spec/lib/castle/commands/log_spec.rb +73 -0
  87. data/spec/lib/castle/commands/report_device_spec.rb +24 -0
  88. data/spec/lib/castle/commands/risk_spec.rb +73 -0
  89. data/spec/lib/castle/commands/{impersonate_spec.rb → start_impersonation_spec.rb} +13 -41
  90. data/spec/lib/castle/commands/track_spec.rb +14 -34
  91. data/spec/lib/castle/configuration_spec.rb +8 -141
  92. data/spec/lib/castle/context/{default_spec.rb → get_default_spec.rb} +9 -10
  93. data/spec/lib/castle/context/{merger_spec.rb → merge_spec.rb} +1 -1
  94. data/spec/lib/castle/context/prepare_spec.rb +43 -0
  95. data/spec/lib/castle/context/{sanitizer_spec.rb → sanitize_spec.rb} +1 -1
  96. data/spec/lib/castle/core/get_connection_spec.rb +43 -0
  97. data/spec/lib/castle/{api/response_spec.rb → core/process_response_spec.rb} +49 -1
  98. data/spec/lib/castle/core/process_webhook_spec.rb +46 -0
  99. data/spec/lib/castle/{api/request_spec.rb → core/send_request_spec.rb} +16 -37
  100. data/spec/lib/castle/failover/strategy_spec.rb +12 -0
  101. data/spec/lib/castle/{extractors/headers_spec.rb → headers/extract_spec.rb} +7 -9
  102. data/spec/lib/castle/headers/filter_spec.rb +39 -0
  103. data/spec/lib/castle/headers/format_spec.rb +25 -0
  104. data/spec/lib/castle/{extractors/ip_spec.rb → ips/extract_spec.rb} +5 -14
  105. data/spec/lib/castle/logger_spec.rb +38 -0
  106. data/spec/lib/castle/payload/prepare_spec.rb +55 -0
  107. data/spec/lib/castle/session_spec.rb +65 -0
  108. data/spec/lib/castle/singleton_configuration_spec.rb +14 -0
  109. data/spec/lib/castle/utils/clean_invalid_chars_spec.rb +69 -0
  110. data/spec/lib/castle/utils/{cloner_spec.rb → clone_spec.rb} +3 -3
  111. data/spec/lib/castle/utils/deep_symbolize_keys_spec.rb +50 -0
  112. data/spec/lib/castle/utils/{timestamp_spec.rb → get_timestamp_spec.rb} +1 -1
  113. data/spec/lib/castle/utils/merge_spec.rb +15 -0
  114. data/spec/lib/castle/validators/present_spec.rb +5 -6
  115. data/spec/lib/castle/verdict_spec.rb +9 -0
  116. data/spec/lib/castle/webhooks/verify_spec.rb +53 -0
  117. data/spec/lib/castle_spec.rb +4 -10
  118. data/spec/spec_helper.rb +3 -3
  119. data/spec/support/shared_examples/action_request.rb +155 -0
  120. data/spec/support/shared_examples/configuration.rb +101 -0
  121. metadata +144 -67
  122. data/lib/castle/api/connection.rb +0 -24
  123. data/lib/castle/api/request.rb +0 -42
  124. data/lib/castle/api/session.rb +0 -20
  125. data/lib/castle/commands/identify.rb +0 -23
  126. data/lib/castle/commands/impersonate.rb +0 -26
  127. data/lib/castle/commands/review.rb +0 -14
  128. data/lib/castle/events.rb +0 -49
  129. data/lib/castle/failover_auth_response.rb +0 -21
  130. data/lib/castle/headers_filter.rb +0 -35
  131. data/lib/castle/headers_formatter.rb +0 -22
  132. data/lib/castle/review.rb +0 -11
  133. data/lib/castle/utils.rb +0 -55
  134. data/lib/castle/utils/cloner.rb +0 -11
  135. data/lib/castle/utils/timestamp.rb +0 -12
  136. data/spec/lib/castle/api/connection_spec.rb +0 -59
  137. data/spec/lib/castle/api/session_spec.rb +0 -86
  138. data/spec/lib/castle/commands/identify_spec.rb +0 -88
  139. data/spec/lib/castle/events_spec.rb +0 -5
  140. data/spec/lib/castle/headers_filter_spec.rb +0 -38
  141. data/spec/lib/castle/headers_formatter_spec.rb +0 -25
  142. data/spec/lib/castle/review_spec.rb +0 -19
  143. data/spec/lib/castle/utils/merger_spec.rb +0 -13
  144. data/spec/lib/castle/utils_spec.rb +0 -156
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Castle
4
+ module API
5
+ # Sends DELETE impersonate request
6
+ module EndImpersonation
7
+ class << self
8
+ # @param options [Hash]
9
+ def call(options = {})
10
+ unless options[:no_symbolize]
11
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
12
+ end
13
+ options.delete(:no_symbolize)
14
+ http = options.delete(:http)
15
+ config = options.delete(:config) || Castle.config
16
+
17
+ Castle::API
18
+ .call(Castle::Commands::EndImpersonation.build(options), {}, http, config)
19
+ .tap { |response| raise Castle::ImpersonationFailed unless response[:success] }
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Castle
4
+ module API
5
+ # Module for filter endpoint
6
+ module Filter
7
+ class << self
8
+ # @param options [Hash]
9
+ # return [Hash]
10
+ def call(options = {})
11
+ unless options[:no_symbolize]
12
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
13
+ end
14
+ options.delete(:no_symbolize)
15
+ http = options.delete(:http)
16
+ config = options.delete(:config) || Castle.config
17
+
18
+ response = Castle::API.call(Castle::Commands::Filter.build(options), {}, http, config)
19
+ response.merge(failover: false, failover_reason: nil)
20
+ rescue Castle::RequestError, Castle::InternalServerError => e
21
+ unless config.failover_strategy == :throw
22
+ strategy = (config || Castle.config).failover_strategy
23
+ return(
24
+ Castle::Failover::PrepareResponse.new(
25
+ options[:user][:id],
26
+ reason: e.to_s,
27
+ strategy: strategy
28
+ ).call
29
+ )
30
+ end
31
+
32
+ raise e
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Castle
4
+ module API
5
+ # Sends GET devices/#{device_token} request
6
+ module GetDevice
7
+ class << self
8
+ # @param options [Hash]
9
+ # return [Hash]
10
+ def call(options = {})
11
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
12
+ http = options.delete(:http)
13
+ config = options.delete(:config) || Castle.config
14
+
15
+ Castle::API.call(Castle::Commands::GetDevice.build(options), {}, http, config)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Castle
4
+ module API
5
+ # Sends GET users/#{user_id}/devices request
6
+ module GetDevicesForUser
7
+ class << self
8
+ # @param options [Hash]
9
+ # return [Hash]
10
+ def call(options = {})
11
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
12
+ http = options.delete(:http)
13
+ config = options.delete(:config) || Castle.config
14
+
15
+ Castle::API.call(Castle::Commands::GetDevicesForUser.build(options), {}, http, config)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Castle
4
+ module API
5
+ # Module for log endpoint
6
+ module Log
7
+ class << self
8
+ # @param options [Hash]
9
+ # return [Hash]
10
+ def call(options = {})
11
+ unless options[:no_symbolize]
12
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
13
+ end
14
+ options.delete(:no_symbolize)
15
+ http = options.delete(:http)
16
+ config = options.delete(:config) || Castle.config
17
+
18
+ response = Castle::API.call(Castle::Commands::Log.build(options), {}, http, config)
19
+ response.merge(failover: false, failover_reason: nil)
20
+ rescue Castle::RequestError, Castle::InternalServerError => e
21
+ unless config.failover_strategy == :throw
22
+ strategy = (config || Castle.config).failover_strategy
23
+ return(
24
+ Castle::Failover::PrepareResponse.new(
25
+ options[:user][:id],
26
+ reason: e.to_s,
27
+ strategy: strategy
28
+ ).call
29
+ )
30
+ end
31
+
32
+ raise e
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Castle
4
+ module API
5
+ # Sends PUT devices/#{device_token}/report request
6
+ module ReportDevice
7
+ class << self
8
+ # @param options [Hash]
9
+ # return [Hash]
10
+ def call(options = {})
11
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
12
+ http = options.delete(:http)
13
+ config = options.delete(:config) || Castle.config
14
+
15
+ Castle::API.call(Castle::Commands::ReportDevice.build(options), {}, http, config)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Castle
4
+ module API
5
+ # Module for risk endpoint
6
+ module Risk
7
+ class << self
8
+ # @param options [Hash]
9
+ # return [Hash]
10
+ def call(options = {})
11
+ unless options[:no_symbolize]
12
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
13
+ end
14
+ options.delete(:no_symbolize)
15
+ http = options.delete(:http)
16
+ config = options.delete(:config) || Castle.config
17
+
18
+ response = Castle::API.call(Castle::Commands::Risk.build(options), {}, http, config)
19
+ response.merge(failover: false, failover_reason: nil)
20
+ rescue Castle::RequestError, Castle::InternalServerError => e
21
+ unless config.failover_strategy == :throw
22
+ strategy = (config || Castle.config).failover_strategy
23
+ return(
24
+ Castle::Failover::PrepareResponse.new(
25
+ options[:user][:id],
26
+ reason: e.to_s,
27
+ strategy: strategy
28
+ ).call
29
+ )
30
+ end
31
+
32
+ raise e
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Castle
4
+ module API
5
+ # Sends POST impersonate request
6
+ module StartImpersonation
7
+ class << self
8
+ # @param options [Hash]
9
+ def call(options = {})
10
+ unless options[:no_symbolize]
11
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
12
+ end
13
+ options.delete(:no_symbolize)
14
+ http = options.delete(:http)
15
+ config = options.delete(:config) || Castle.config
16
+
17
+ Castle::API
18
+ .call(Castle::Commands::StartImpersonation.build(options), {}, http, config)
19
+ .tap { |response| raise Castle::ImpersonationFailed unless response[:success] }
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Castle
4
+ module API
5
+ module Track
6
+ class << self
7
+ # @param options [Hash]
8
+ def call(options = {})
9
+ unless options[:no_symbolize]
10
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
11
+ end
12
+ options.delete(:no_symbolize)
13
+ http = options.delete(:http)
14
+ config = options.delete(:config) || Castle.config
15
+
16
+ Castle::API.call(Castle::Commands::Track.build(options), {}, http, config)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
data/lib/castle/client.rb CHANGED
@@ -1,87 +1,109 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Castle
4
+ # Castle's client.
4
5
  class Client
5
6
  class << self
6
7
  def from_request(request, options = {})
7
- new(
8
- to_context(request, options),
9
- to_options(options)
10
- )
11
- end
12
-
13
- def to_context(request, options = {})
14
- default_context = Castle::Context::Default.new(request, options[:cookies]).call
15
- Castle::Context::Merger.call(default_context, options[:context])
16
- end
17
-
18
- def to_options(options = {})
19
- options[:timestamp] ||= Castle::Utils::Timestamp.call
20
- warn '[DEPRECATION] use user_traits instead of traits key' if options.key?(:traits)
21
- options
22
- end
23
-
24
- def failover_response_or_raise(failover_response, error)
25
- return failover_response.generate unless Castle.config.failover_strategy == :throw
26
-
27
- raise error
8
+ new(options.merge(context: Castle::Context::Prepare.call(request, options)))
28
9
  end
29
10
  end
30
11
 
31
12
  attr_accessor :context
32
13
 
33
- def initialize(context, options = {})
14
+ # @param options [Hash]
15
+ def initialize(options = {})
16
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
34
17
  @do_not_track = options.fetch(:do_not_track, false)
35
- @timestamp = options[:timestamp]
36
- @context = context
18
+ @timestamp = options.fetch(:timestamp) { Castle::Utils::GetTimestamp.call }
19
+ @context = options.fetch(:context) { {} }
37
20
  end
38
21
 
22
+ # @param options [Hash]
39
23
  def authenticate(options = {})
40
- options = Castle::Utils.deep_symbolize_keys(options || {})
24
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
41
25
 
42
26
  return generate_do_not_track_response(options[:user_id]) unless tracked?
43
27
 
44
28
  add_timestamp_if_necessary(options)
45
29
 
46
- begin
47
- Castle::API
48
- .call(authenticate_command(options), {}, options[:http])
49
- .merge(failover: false, failover_reason: nil)
50
- rescue Castle::RequestError, Castle::InternalServerError => e
51
- self.class.failover_response_or_raise(
52
- FailoverAuthResponse.new(options[:user_id], reason: e.to_s), e
53
- )
54
- end
30
+ new_context = Castle::Context::Merge.call(@context, options[:context])
31
+
32
+ Castle::API::Authenticate.call(options.merge(context: new_context, no_symbolize: true))
55
33
  end
56
34
 
57
- def identify(options = {})
58
- options = Castle::Utils.deep_symbolize_keys(options || {})
35
+ # @param options [Hash]
36
+ def track(options = {})
37
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
59
38
 
60
39
  return unless tracked?
61
40
 
62
41
  add_timestamp_if_necessary(options)
63
42
 
64
- Castle::API.call(identify_command(options), {}, options[:http])
43
+ new_context = Castle::Context::Merge.call(@context, options[:context])
44
+
45
+ Castle::API::Track.call(options.merge(context: new_context, no_symbolize: true))
65
46
  end
66
47
 
67
- def track(options = {})
68
- options = Castle::Utils.deep_symbolize_keys(options || {})
48
+ # @param options [Hash]
49
+ def filter(options = {})
50
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
69
51
 
70
- return unless tracked?
52
+ return generate_do_not_track_response(options[:user][:id]) unless tracked?
71
53
 
72
54
  add_timestamp_if_necessary(options)
73
55
 
74
- Castle::API.call(track_command(options), {}, options[:http])
56
+ new_context = Castle::Context::Merge.call(@context, options[:context])
57
+
58
+ Castle::API::Filter.call(options.merge(context: new_context, no_symbolize: true))
75
59
  end
76
60
 
77
- def impersonate(options = {})
78
- options = Castle::Utils.deep_symbolize_keys(options || {})
61
+ # @param options [Hash]
62
+ def risk(options = {})
63
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
64
+
65
+ return generate_do_not_track_response(options[:user][:id]) unless tracked?
79
66
 
80
67
  add_timestamp_if_necessary(options)
81
68
 
82
- Castle::API.call(impersonate_command(options), {}, options[:http]).tap do |response|
83
- raise Castle::ImpersonationFailed unless response[:success]
84
- end
69
+ new_context = Castle::Context::Merge.call(@context, options[:context])
70
+
71
+ Castle::API::Risk.call(options.merge(context: new_context, no_symbolize: true))
72
+ end
73
+
74
+ # @param options [Hash]
75
+ def log(options = {})
76
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
77
+
78
+ return generate_do_not_track_response(options[:user][:id]) unless tracked?
79
+
80
+ add_timestamp_if_necessary(options)
81
+
82
+ new_context = Castle::Context::Merge.call(@context, options[:context])
83
+
84
+ Castle::API::Log.call(options.merge(context: new_context, no_symbolize: true))
85
+ end
86
+
87
+ # @param options [Hash]
88
+ def start_impersonation(options = {})
89
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
90
+
91
+ add_timestamp_if_necessary(options)
92
+
93
+ new_context = Castle::Context::Merge.call(@context, options[:context])
94
+
95
+ Castle::API::StartImpersonation.call(options.merge(context: new_context, no_symbolize: true))
96
+ end
97
+
98
+ # @param options [Hash]
99
+ def end_impersonation(options = {})
100
+ options = Castle::Utils::DeepSymbolizeKeys.call(options || {})
101
+
102
+ add_timestamp_if_necessary(options)
103
+
104
+ new_context = Castle::Context::Merge.call(@context, options[:context])
105
+
106
+ Castle::API::EndImpersonation.call(options.merge(context: new_context, no_symbolize: true))
85
107
  end
86
108
 
87
109
  def disable_tracking
@@ -92,39 +114,23 @@ module Castle
92
114
  @do_not_track = false
93
115
  end
94
116
 
117
+ # @return [Boolean]
95
118
  def tracked?
96
119
  !@do_not_track
97
120
  end
98
121
 
99
122
  private
100
123
 
124
+ # @param user_id [String, Boolean]
101
125
  def generate_do_not_track_response(user_id)
102
- FailoverAuthResponse.new(
126
+ Castle::Failover::PrepareResponse.new(
103
127
  user_id,
104
- strategy: :allow, reason: 'Castle is set to do not track.'
105
- ).generate
128
+ strategy: :allow,
129
+ reason: 'Castle is set to do not track.'
130
+ ).call
106
131
  end
107
132
 
108
133
  # @param options [Hash]
109
- def authenticate_command(options)
110
- Castle::Commands::Authenticate.new(@context).build(options)
111
- end
112
-
113
- # @param options [Hash]
114
- def identify_command(options)
115
- Castle::Commands::Identify.new(@context).build(options)
116
- end
117
-
118
- # @param options [Hash]
119
- def impersonate_command(options)
120
- Castle::Commands::Impersonate.new(@context).build(options)
121
- end
122
-
123
- # @param options [Hash]
124
- def track_command(options)
125
- Castle::Commands::Track.new(@context).build(options)
126
- end
127
-
128
134
  def add_timestamp_if_necessary(options)
129
135
  options[:timestamp] ||= @timestamp if @timestamp
130
136
  end