Class: Workato::Connector::Sdk::Connection::Authorization

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/workato/connector/sdk/connection.rb

Instance Method Summary collapse

Constructor Details

#initialize(connection:, authorization:, methods:) ⇒ void

Parameters:

  • connection (Connection)
  • authorization (ActiveSupport::HashWithIndifferentAccess)
  • methods (ActiveSupport::HashWithIndifferentAccess)


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(authorization, 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?

Parameters:

  • settings (SorbetTypes::SettingsHash, nil) (defaults to: nil)
  • oauth2_code (String, nil) (defaults to: nil)
  • redirect_url (String, nil) (defaults to: nil)
  • pkce_verifier (String, nil) (defaults to: nil)
  • query_params (Hash{T.untyped => T.untyped}, nil) (defaults to: nil)

Returns:

Raises:



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?

Parameters:

Returns:

  • (String, nil)


234
235
236
237
238
239
# File 'lib/workato/connector/sdk/connection.rb', line 234

def authorization_url(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?

Parameters:

Returns:

  • (String, nil)


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?

Parameters:

Returns:

  • (String, nil)


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_onArray<String, Symbol, Regexp, Integer>

Returns:

  • (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

Returns:

  • (Boolean)


195
196
197
# File 'lib/workato/connector/sdk/connection.rb', line 195

def multi?
  @source[:type].to_s == 'multi'
end

#oauth2?Boolean

Returns:

  • (Boolean)


190
191
192
# File 'lib/workato/connector/sdk/connection.rb', line 190

def oauth2?
  !!(/oauth2/i =~ type)
end

#reauthorizable?Boolean

Returns:

  • (Boolean)


295
296
297
# File 'lib/workato/connector/sdk/connection.rb', line 295

def reauthorizable?
  oauth2? || source[:acquire].present?
end

#refresh(settings = nil, refresh_token = nil) ⇒ SorbetTypes::RefreshOutput

Parameters:

Returns:

Raises:



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.

Parameters:

  • settings (ActiveSupport::HashWithIndifferentAccess)

Returns:

  • (ActiveSupport::HashWithIndifferentAccess, nil)


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

Parameters:

  • http_code (Integer, nil)
  • http_body (String, nil)
  • exception (String, nil)

Returns:

  • (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 reauthorizable?

  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_onArray<String, Symbol, Regexp, Integer>

Returns:

  • (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

#sourceActiveSupport::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.

Returns:

  • (ActiveSupport::HashWithIndifferentAccess)

Raises:



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?

Parameters:

Returns:

  • (String, nil)


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

#typeString

Returns:

  • (String)


185
186
187
# File 'lib/workato/connector/sdk/connection.rb', line 185

def type
  (source[:type].presence || 'none').to_s
end