Class: Workato::Connector::Sdk::Connection::Authorization
- Inherits:
-
Object
- Object
- Workato::Connector::Sdk::Connection::Authorization
- Extended by:
- T::Sig
- Defined in:
- lib/workato/connector/sdk/connection.rb
Instance Method Summary collapse
- #acquire(settings = nil, oauth2_code = nil, redirect_url = nil, pkce_verifier = nil, query_params = nil) ⇒ SorbetTypes::AcquireOutput?
- #authorization_url(settings = nil) ⇒ String?
- #client_id(settings = nil) ⇒ String?
- #client_secret(settings = nil) ⇒ String?
- #detect_on ⇒ Array<String, Symbol, Regexp, Integer>
- #initialize(connection:, authorization:, methods:) ⇒ void constructor
- #multi? ⇒ Boolean
- #oauth2? ⇒ Boolean
- #reauthorizable? ⇒ Boolean
- #refresh(settings = nil, refresh_token = nil) ⇒ SorbetTypes::RefreshOutput
- #refresh!(settings) ⇒ ActiveSupport::HashWithIndifferentAccess? private
- #refresh?(http_code, http_body, exception) ⇒ Boolean
- #refresh_on ⇒ Array<String, Symbol, Regexp, Integer>
- #source ⇒ ActiveSupport::HashWithIndifferentAccess private
- #token_url(settings = nil) ⇒ String?
- #type ⇒ String
Constructor Details
#initialize(connection:, authorization:, methods:) ⇒ void
177 178 179 180 181 182 |
# File 'lib/workato/connector/sdk/connection.rb', line 177 def initialize(connection:, authorization:, methods:) @connection = T.let(connection, Connection) @connection_source = T.let(connection.source, ActiveSupport::HashWithIndifferentAccess) @source = T.let(, ActiveSupport::HashWithIndifferentAccess) @methods_source = T.let(methods, ActiveSupport::HashWithIndifferentAccess) end |
Instance Method Details
#acquire(settings = nil, oauth2_code = nil, redirect_url = nil, pkce_verifier = nil, query_params = nil) ⇒ SorbetTypes::AcquireOutput?
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 |
# File 'lib/workato/connector/sdk/connection.rb', line 258 def acquire(settings = nil, oauth2_code = nil, redirect_url = nil, pkce_verifier = nil, query_params = nil) @connection.merge_settings!(settings) if settings acquire_proc = source[:acquire] raise InvalidDefinitionError, "Expect 'acquire' block" unless acquire_proc Workato::Connector::Sdk::Operation.new( connection: Connection.new( connection: connection_source.merge( authorization: source.merge( apply: nil # only skip apply authorization for re-authorization request, but don't skip detect_on ) ), methods: methods_source, settings: @connection.settings! ), methods: methods_source ).execute( settings, { auth_code: oauth2_code, redirect_url: redirect_url, pkce_verifier: pkce_verifier, query_params: query_params || {} } ) do |connection, input| instance_exec( connection, input[:auth_code], input[:redirect_url], input[:pkce_verifier], input[:query_params], &acquire_proc ) end end |
#authorization_url(settings = nil) ⇒ String?
234 235 236 237 238 239 |
# File 'lib/workato/connector/sdk/connection.rb', line 234 def (settings = nil) @connection.merge_settings!(settings) if settings return unless source[:authorization_url] global_dsl_context.execute(@connection.settings, &source[:authorization_url]) end |
#client_id(settings = nil) ⇒ String?
210 211 212 213 214 215 216 217 218 219 |
# File 'lib/workato/connector/sdk/connection.rb', line 210 def client_id(settings = nil) @connection.merge_settings!(settings) if settings client_id = source[:client_id] if client_id.is_a?(Proc) global_dsl_context.execute(@connection.settings, &client_id) else client_id end end |
#client_secret(settings = nil) ⇒ String?
222 223 224 225 226 227 228 229 230 231 |
# File 'lib/workato/connector/sdk/connection.rb', line 222 def client_secret(settings = nil) @connection.merge_settings!(settings) if settings client_secret_source = source[:client_secret] if client_secret_source.is_a?(Proc) global_dsl_context.execute(@connection.settings, &client_secret_source) else client_secret_source end end |
#detect_on ⇒ Array<String, Symbol, Regexp, Integer>
205 206 207 |
# File 'lib/workato/connector/sdk/connection.rb', line 205 def detect_on Array.wrap(source[:detect_on]).compact end |
#multi? ⇒ Boolean
195 196 197 |
# File 'lib/workato/connector/sdk/connection.rb', line 195 def multi? @source[:type].to_s == 'multi' end |
#oauth2? ⇒ Boolean
190 191 192 |
# File 'lib/workato/connector/sdk/connection.rb', line 190 def oauth2? !!(/oauth2/i =~ type) end |
#reauthorizable? ⇒ Boolean
295 296 297 |
# File 'lib/workato/connector/sdk/connection.rb', line 295 def oauth2? || source[:acquire].present? end |
#refresh(settings = nil, refresh_token = nil) ⇒ SorbetTypes::RefreshOutput
337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 |
# File 'lib/workato/connector/sdk/connection.rb', line 337 def refresh(settings = nil, refresh_token = nil) @connection.merge_settings!(settings) if settings refresh_proc = source[:refresh] raise InvalidDefinitionError, "Expect 'refresh' block" unless refresh_proc Workato::Connector::Sdk::Operation.new( connection: Connection.new( methods: methods_source, settings: @connection.settings! ), methods: methods_source ).execute(settings, { refresh_token: refresh_token }) do |connection, input| instance_exec(connection, input[:refresh_token], &refresh_proc) end end |
#refresh!(settings) ⇒ ActiveSupport::HashWithIndifferentAccess?
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
323 324 325 326 327 328 329 |
# File 'lib/workato/connector/sdk/connection.rb', line 323 def refresh!(settings) if oauth2? refresh_oauth2_token(settings) elsif source[:acquire].present? T.cast(acquire(settings), T.nilable(ActiveSupport::HashWithIndifferentAccess)) end end |
#refresh?(http_code, http_body, exception) ⇒ Boolean
306 307 308 309 310 311 312 313 314 315 |
# File 'lib/workato/connector/sdk/connection.rb', line 306 def refresh?(http_code, http_body, exception) return false unless refresh_on = self.refresh_on refresh_on.blank? || refresh_on.any? do |pattern| (pattern.is_a?(::Integer) && pattern == http_code) || pattern === exception&.to_s || pattern === http_body end end |
#refresh_on ⇒ Array<String, Symbol, Regexp, Integer>
200 201 202 |
# File 'lib/workato/connector/sdk/connection.rb', line 200 def refresh_on Array.wrap(source[:refresh_on]).compact end |
#source ⇒ ActiveSupport::HashWithIndifferentAccess
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 |
# File 'lib/workato/connector/sdk/connection.rb', line 355 def source return @source unless multi? unless @source[:selected] raise InvalidMultiAuthDefinition, "Multi-auth connection must define 'selected' block" end if @source[:options].blank? raise InvalidMultiAuthDefinition, "Multi-auth connection must define 'options' list" end selected_auth_key = @source[:selected].call(@connection.settings) selected_auth_key ||= @connection.multi_auth_selected_fallback&.call(@source[:options]) selected_auth_value = @source.dig(:options, selected_auth_key) raise UnresolvedMultiAuthOptionError, selected_auth_key unless selected_auth_value selected_auth_value end |
#token_url(settings = nil) ⇒ String?
242 243 244 245 246 247 |
# File 'lib/workato/connector/sdk/connection.rb', line 242 def token_url(settings = nil) @connection.merge_settings!(settings) if settings return unless source[:token_url] global_dsl_context.execute(@connection.settings, &source[:token_url]) end |
#type ⇒ String
185 186 187 |
# File 'lib/workato/connector/sdk/connection.rb', line 185 def type (source[:type].presence || 'none').to_s end |