Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

custom_access_token_attributes breaks rails migrations #1642

Closed
raivil opened this issue Mar 8, 2023 · 0 comments · Fixed by #1649
Closed

custom_access_token_attributes breaks rails migrations #1642

raivil opened this issue Mar 8, 2023 · 0 comments · Fixed by #1649

Comments

@raivil
Copy link

raivil commented Mar 8, 2023

Steps to reproduce

The change from #1602 is causing rails database migrations to fail if custom_access_token_attributes are configured and table doesn't exist

Expected behavior

Rails migrations should not fail if specific table columns used by doorkeeper are not present.

Actual behavior

Migrations fails if doorkeeper is configured with custom_access_token_attributes and any of database/table/column don't exist.

If I comment out the custom_access_token_attributes config, migrations work as expected.

(database doesn't exist)
$ rails db:create

rails aborted!
ActiveRecord::NoDatabaseError: We could not find your database: main_database_dev_master. Which can be found in the database configuration file located at config/database.yml.

To resolve this issue:

- Did you create the database for this app, or delete it? You may need to create your database.
- Has the database name changed? Check your database.yml config has the correct database name.

To create your database, run:

        bin/rails db:create
/app-core/config/initializers/doorkeeper.rb:3:in `<main>'
/app-core/config/environment.rb:7:in `<main>'

(database exists but is empty)

** Invoke db:create (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
rails aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "oauth_access_tokens" does not exist
LINE 9:  WHERE a.attrelid = '"oauth_access_tokens"'::regclass
                            ^
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:19:in `exec'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:19:in `block (2 levels) in query'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activesupport-7.0.4.2/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activesupport-7.0.4.2/lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:18:in `block in query'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/abstract_adapter.rb:765:in `block in log'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activesupport-7.0.4.2/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/abstract_adapter.rb:756:in `log'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:17:in `query'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/postgresql_adapter.rb:916:in `column_definitions'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/abstract/schema_statements.rb:116:in `columns'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/schema_cache.rb:117:in `block in columns'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/schema_cache.rb:116:in `fetch'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/schema_cache.rb:116:in `columns'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/schema_cache.rb:125:in `block in columns_hash'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/schema_cache.rb:124:in `fetch'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/schema_cache.rb:124:in `columns_hash'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/model_schema.rb:580:in `load_schema!'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/attributes.rb:264:in `load_schema!'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/encryption/encryptable_record.rb:122:in `load_schema!'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/model_schema.rb:566:in `block in load_schema'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/model_schema.rb:563:in `synchronize'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/model_schema.rb:563:in `load_schema'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/model_schema.rb:429:in `attribute_types'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activerecord-7.0.4.2/lib/active_record/attribute_methods.rb:183:in `has_attribute?'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/doorkeeper-5.6.5/lib/doorkeeper/config/validations.rb:60:in `block (2 levels) in validate_custom_access_token_attributes'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/doorkeeper-5.6.5/lib/doorkeeper/config/validations.rb:59:in `each'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/doorkeeper-5.6.5/lib/doorkeeper/config/validations.rb:59:in `block in validate_custom_access_token_attributes'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/doorkeeper-5.6.5/lib/doorkeeper/config/validations.rb:58:in `each'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/doorkeeper-5.6.5/lib/doorkeeper/config/validations.rb:58:in `validate_custom_access_token_attributes'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/doorkeeper-5.6.5/lib/doorkeeper/config/validations.rb:14:in `validate!'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/doorkeeper-5.6.5/lib/doorkeeper/config/abstract_builder.rb:23:in `build'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/doorkeeper-5.6.5/lib/doorkeeper.rb:121:in `configure'
/app-core/config/initializers/doorkeeper.rb:3:in `<main>'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/engine.rb:667:in `load'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/engine.rb:667:in `block in load_config_initializer'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/activesupport-7.0.4.2/lib/active_support/notifications.rb:208:in `instrument'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/engine.rb:666:in `load_config_initializer'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/engine.rb:620:in `block (2 levels) in <class:Engine>'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/engine.rb:619:in `each'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/engine.rb:619:in `block in <class:Engine>'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/initializable.rb:32:in `instance_exec'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/initializable.rb:32:in `run'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/initializable.rb:61:in `block in run_initializers'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:228:in `block in tsort_each'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:422:in `block (2 levels) in each_strongly_connected_component_from'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:431:in `each_strongly_connected_component_from'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:421:in `block in each_strongly_connected_component_from'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/initializable.rb:50:in `each'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/initializable.rb:50:in `tsort_each_child'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:415:in `call'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:415:in `each_strongly_connected_component_from'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:349:in `block in each_strongly_connected_component'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:347:in `each'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:347:in `call'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:347:in `each_strongly_connected_component'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:226:in `tsort_each'
/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/tsort.rb:205:in `tsort_each'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/initializable.rb:60:in `run_initializers'
/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/railties-7.0.4.2/lib/rails/application.rb:372:in `initialize!'
/app-core/config/environment.rb:7:in `<main>'

System configuration

Doorkeeper initializer:

# config/initializers/doorkeeper.rb
# frozen_string_literal: true

Doorkeeper.configure do
  # Change the ORM that doorkeeper will use (needs plugins)
  orm :active_record

  # This block will be called to check whether the resource owner is authenticated or not.
  # oidc --> This callback needs to returns a falsey value if the current user can't be determined:
  resource_owner_authenticator do
    if current_user
      current_user
    else
      warden.authenticate!(scope: :user)
      nil
    end
  end

  # If you didn't skip applications controller from Doorkeeper routes in your application routes.rb
  # file then you need to declare this block in order to restrict access to the web interface for
  # adding oauth authorized applications. In other case it will return 403 Forbidden response
  # every time somebody will try to access the admin web interface.
  #
  # admin_authenticator do
  #   # Put your admin authentication logic here.
  #   # Example implementation:
  #
  #   if current_user
  #     head :forbidden unless current_user.admin?
  #   else
  #     redirect_to sign_in_url
  #   end
  # end
  # admin_authenticator do
  #   current_user || warden.authenticate!(scope: :user)
  # end

  # If you are planning to use Doorkeeper in Rails 5 API-only application, then you might
  # want to use API mode that will skip all the views management and change the way how
  # Doorkeeper responds to a requests.
  #
  # api_only

  # Enforce token request content type to application/x-www-form-urlencoded.
  # It is not enabled by default to not break prior versions of the gem.
  #
  # enforce_content_type

  # Authorization Code expiration time (default 10 minutes).
  #
  # authorization_code_expires_in 10.minutes

  # Access token expiration time (default 2 hours).
  # If you want to disable expiration, set this to nil.
  #
  # access_token_expires_in 2.hours

  # Assign custom TTL for access tokens. Will be used instead of access_token_expires_in
  # option if defined. `context` has the following properties available
  #
  # `client` - the OAuth client application (see Doorkeeper::OAuth::Client)
  # `grant_type` - the grant type of the request (see Doorkeeper::OAuth)
  # `scopes` - the requested scopes (see Doorkeeper::OAuth::Scopes)
  #
  # custom_access_token_expires_in do |context|
  #   context.client.application.additional_settings.implicit_oauth_expiration
  # end

  # Use a custom class for generating the access token.
  # See https://github.com/doorkeeper-gem/doorkeeper#custom-access-token-generator
  #
  # access_token_generator '::Doorkeeper::JWT'

  # The controller Doorkeeper::ApplicationController inherits from.
  # Defaults to ActionController::Base.
  # See https://doorkeeper.gitbook.io/guides/configuration/other-configurations#custom-base-controller
  #
  base_controller "CustomDoorkeeper::BaseController"
  base_metal_controller "CustomDoorkeeper::MetalController"

  # Reuse access token for the same resource owner within an application (disabled by default).
  #
  # This option protects your application from creating new tokens before old valid one becomes
  # expired so your database doesn't bloat. Keep in mind that when this option is `on` Doorkeeper
  # doesn't updates existing token expiration time, it will create a new token instead.
  # Rationale: https://github.com/doorkeeper-gem/doorkeeper/issues/383
  #
  # You can not enable this option together with +hash_token_secrets+.
  #
  # reuse_access_token

  # Set a limit for token_reuse if using reuse_access_token option
  #
  # This option limits token_reusability to some extent.
  # If not set then access_token will be reused unless it expires.
  # Rationale: https://github.com/doorkeeper-gem/doorkeeper/issues/1189
  #
  # This option should be a percentage(i.e. (0,100])
  #
  # token_reuse_limit 100

  # Hash access and refresh tokens before persisting them.
  # This will disable the possibility to use +reuse_access_token+
  # since plain values can no longer be retrieved.
  #
  # Note: If you are already a user of doorkeeper and have existing tokens
  # in your installation, they will be invalid without enabling the additional
  # setting `fallback_to_plain_secrets` below.
  #
  # hash_token_secrets
  # By default, token secrets will be hashed using the
  # +Doorkeeper::Hashing::SHA256+ strategy.
  #
  # If you wish to use another hashing implementation, you can override
  # this strategy as follows:
  #
  # hash_token_secrets using: '::Doorkeeper::Hashing::MyCustomHashImpl'
  #
  # Keep in mind that changing the hashing function will invalidate all existing
  # secrets, if there are any.

  # Hash application secrets before persisting them.
  #
  # hash_application_secrets
  #
  # By default, applications will be hashed
  # with the +Doorkeeper::SecretStoring::SHA256+ strategy.
  #
  # If you wish to use bcrypt for application secret hashing, uncomment
  # this line instead:
  #
  # hash_application_secrets using: '::Doorkeeper::SecretStoring::BCrypt'

  # When the above option is enabled,
  # and a hashed token or secret is not found,
  # you can allow to fall back to another strategy.
  # For users upgrading doorkeeper and wishing to enable hashing,
  # you will probably want to enable the fallback to plain tokens.
  #
  # This will ensure that old access tokens and secrets
  # will remain valid even if the hashing above is enabled.
  #
  # fallback_to_plain_secrets

  # Issue access tokens with refresh token (disabled by default), you may also
  # pass a block which accepts `context` to customize when to give a refresh
  # token or not. Similar to `custom_access_token_expires_in`, `context` has
  # the properties:
  #
  # `client` - the OAuth client application (see Doorkeeper::OAuth::Client)
  # `grant_type` - the grant type of the request (see Doorkeeper::OAuth)
  # `scopes` - the requested scopes (see Doorkeeper::OAuth::Scopes)
  #
  use_refresh_token

  # Provide support for an owner to be assigned to each registered application (disabled by default)
  # Optional parameter confirmation: true (default false) if you want to enforce ownership of
  # a registered application
  # Note: you must also run the rails g doorkeeper:application_owner generator to provide the necessary support
  #
  enable_application_owner confirmation: true

  # Define access token scopes for your provider
  # For more information go to
  # https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Scopes
  #
  default_scopes :openid
  optional_scopes :email, :full_name

  # Define scopes_by_grant_type to restrict only certain scopes for grant_type
  # By default, all the scopes will be available for all the grant types.
  #
  # Keys to this hash should be the name of grant_type and
  # values should be the array of scopes for that grant type.
  # Note: scopes should be from configured_scopes(i.e. deafult or optional)
  #
  # scopes_by_grant_type password: [:write], client_credentials: [:update]

  # Forbids creating/updating applications with arbitrary scopes that are
  # not in configuration, i.e. `default_scopes` or `optional_scopes`.
  # (disabled by default)
  #
  enforce_configured_scopes

  # Change the way client credentials are retrieved from the request object.
  # By default it retrieves first from the `HTTP_AUTHORIZATION` header, then
  # falls back to the `:client_id` and `:client_secret` params from the `params` object.
  # Check out https://github.com/doorkeeper-gem/doorkeeper/wiki/Changing-how-clients-are-authenticated
  # for more information on customization
  #
  # client_credentials :from_basic, :from_params

  # Change the way access token is authenticated from the request object.
  # By default it retrieves first from the `HTTP_AUTHORIZATION` header, then
  # falls back to the `:access_token` or `:bearer_token` params from the `params` object.
  # Check out https://github.com/doorkeeper-gem/doorkeeper/wiki/Changing-how-clients-are-authenticated
  # for more information on customization
  #
  # access_token_methods :from_bearer_authorization, :from_access_token_param, :from_bearer_param

  # Change the native redirect uri for client apps
  # When clients register with the following redirect uri, they won't be redirected to any server and
  # the authorizationcode will be displayed within the provider
  # The value can be any string. Use nil to disable this feature. When disabled, clients must provide a valid URL
  # (Similar behaviour: https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi)
  #
  # native_redirect_uri 'urn:ietf:wg:oauth:2.0:oob'

  # Forces the usage of the HTTPS protocol in non-native redirect uris (enabled
  # by default in non-development environments). OAuth2 delegates security in
  # communication to the HTTPS protocol so it is wise to keep this enabled.
  #
  # Callable objects such as proc, lambda, block or any object that responds to
  # #call can be used in order to allow conditional checks (to allow non-SSL
  # redirects to localhost for example).
  #
  force_ssl_in_redirect_uri { !(Rails.env.development? || Rails.env.test?) }
  #
  # force_ssl_in_redirect_uri { |uri| uri.host != 'localhost' }

  # Specify what redirect URI's you want to block during Application creation.
  # Any redirect URI is whitelisted by default.
  #
  # You can use this option in order to forbid URI's with 'javascript' scheme
  # for example.
  #
  # forbid_redirect_uri { |uri| uri.scheme.to_s.downcase == 'javascript' }

  # Specify how authorization errors should be handled.
  # By default, doorkeeper renders json errors when access token
  # is invalid, expired, revoked or has invalid scopes.
  #
  # If you want to render error response yourself (i.e. rescue exceptions),
  # set  handle_auth_errors to `:raise` and rescue Doorkeeper::Errors::InvalidToken
  # or following specific errors:
  #
  #   Doorkeeper::Errors::TokenForbidden, Doorkeeper::Errors::TokenExpired,
  #   Doorkeeper::Errors::TokenRevoked, Doorkeeper::Errors::TokenUnknown
  #
  # handle_auth_errors :raise

  # Customize token introspection response.
  # Allows to add your own fields to default one that are required by the OAuth spec
  # for the introspection response. It could be `sub`, `aud` and so on.
  # This configuration option can be a proc, lambda or any Ruby object responds
  # to `.call` method and result of it's invocation must be a Hash.
  #
  # custom_introspection_response do |token, context|
  #   {
  #     "sub": "Z5O3upPC88QrAjx00dis",
  #     "aud": "https://protected.example.net/resource",
  #     "username": User.find(token.resource_owner_id).username
  #   }
  # end
  #
  # or
  #
  # custom_introspection_response CustomIntrospectionResponder

  # Specify what grant flows are enabled in array of Strings. The valid
  # strings and the flows they enable are:
  #
  # "authorization_code" => Authorization Code Grant Flow
  # "implicit"           => Implicit Grant Flow
  # "password"           => Resource Owner Password Credentials Grant Flow
  # "client_credentials" => Client Credentials Grant Flow
  #
  # If not specified, Doorkeeper enables authorization_code and
  # client_credentials.
  #
  # implicit and password grant flows have risks that you should understand
  # before enabling:
  #   http://tools.ietf.org/html/rfc6819#section-4.4.2
  #   http://tools.ietf.org/html/rfc6819#section-4.4.3
  #
  grant_flows %w(authorization_code implicit_oidc)

  # Hook into the strategies' request & response life-cycle in case your
  # application needs advanced customization or logging:
  #
  # before_successful_strategy_response do |request|
  #   puts "BEFORE HOOK FIRED! #{request}"
  # end
  #
  # after_successful_strategy_response do |request, response|
  #   puts "AFTER HOOK FIRED! #{request}, #{response}"
  # end

  # Hook into Authorization flow in order to implement Single Sign Out
  # or add any other functionality.
  #
  # before_successful_authorization do |controller|
  #   Rails.logger.info(params.inspect)
  # end
  #
  # after_successful_authorization do |controller|
  #   controller.session[:logout_urls] <<
  #     Doorkeeper::Application
  #       .find_by(controller.request.params.slice(:redirect_uri))
  #       .logout_uri
  # end

  # Under some circumstances you might want to have applications auto-approved,
  # so that the user skips the authorization step.
  # For example if dealing with a trusted application.
  #
  # skip_authorization do |resource_owner, client|
  #   client.superapp? or resource_owner.admin?
  # end

  # UNCOMMENT WHEN POC IS STABLE.
  skip_authorization do
    false
  end

  # WWW-Authenticate Realm (default "Doorkeeper").
  #
  # realm "Doorkeeper"

  custom_access_token_attributes %i(act_as)
end

Ruby version:
ruby 3.1.2p20

Gemfile.lock:

Gemfile.lock content
GEM
  remote: https://rubygems.org/
  specs:
    Ascii85 (1.1.0)
    accept_language (2.0.3)
    action_policy (0.6.5)
      ruby-next-core (>= 0.14.0)
    actioncable (7.0.4.2)
      actionpack (= 7.0.4.2)
      activesupport (= 7.0.4.2)
      nio4r (~> 2.0)
      websocket-driver (>= 0.6.1)
    actionmailbox (7.0.4.2)
      actionpack (= 7.0.4.2)
      activejob (= 7.0.4.2)
      activerecord (= 7.0.4.2)
      activestorage (= 7.0.4.2)
      activesupport (= 7.0.4.2)
      mail (>= 2.7.1)
      net-imap
      net-pop
      net-smtp
    actionmailer (7.0.4.2)
      actionpack (= 7.0.4.2)
      actionview (= 7.0.4.2)
      activejob (= 7.0.4.2)
      activesupport (= 7.0.4.2)
      mail (~> 2.5, >= 2.5.4)
      net-imap
      net-pop
      net-smtp
      rails-dom-testing (~> 2.0)
    actionpack (7.0.4.2)
      actionview (= 7.0.4.2)
      activesupport (= 7.0.4.2)
      rack (~> 2.0, >= 2.2.0)
      rack-test (>= 0.6.3)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.2.0)
    actiontext (7.0.4.2)
      actionpack (= 7.0.4.2)
      activerecord (= 7.0.4.2)
      activestorage (= 7.0.4.2)
      activesupport (= 7.0.4.2)
      globalid (>= 0.6.0)
      nokogiri (>= 1.8.5)
    actionview (7.0.4.2)
      activesupport (= 7.0.4.2)
      builder (~> 3.1)
      erubi (~> 1.4)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.1, >= 1.2.0)
    active_record_doctor (1.10.0)
      activerecord (>= 4.2.0)
    activejob (7.0.4.2)
      activesupport (= 7.0.4.2)
      globalid (>= 0.3.6)
    activemodel (7.0.4.2)
      activesupport (= 7.0.4.2)
    activerecord (7.0.4.2)
      activemodel (= 7.0.4.2)
      activesupport (= 7.0.4.2)
    activerecord-multi-tenant (2.2.0)
      rails (>= 6)
    activestorage (7.0.4.2)
      actionpack (= 7.0.4.2)
      activejob (= 7.0.4.2)
      activerecord (= 7.0.4.2)
      activesupport (= 7.0.4.2)
      marcel (~> 1.0)
      mini_mime (>= 1.1.0)
    activesupport (7.0.4.2)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (>= 1.6, < 2)
      minitest (>= 5.1)
      tzinfo (~> 2.0)
    acts-as-taggable-on (9.0.1)
      activerecord (>= 6.0, < 7.1)
    acts_as_list (1.1.0)
      activerecord (>= 4.2)
    addressable (2.8.1)
      public_suffix (>= 2.0.2, < 6.0)
    aes_key_wrap (1.1.0)
    afm (0.2.2)
    after_commit_everywhere (1.3.0)
      activerecord (>= 4.2)
      activesupport
    ahoy_matey (4.2.0)
      activesupport (>= 5.2)
      device_detector
      safely_block (>= 0.2.1)
    amazing_print (1.4.0)
    anycable (1.2.5)
      anycable-core (= 1.2.5)
      grpc (~> 1.37)
    anycable-core (1.2.5)
      anyway_config (>= 2.1.0)
      google-protobuf (>= 3.13)
    anycable-rails (1.3.5)
      actioncable (>= 6.0)
      anycable (~> 1.2.0)
      globalid
    anycable-rails-jwt (0.1.0)
      anycable-rails (~> 1.1)
      jwt (~> 2.2)
    anyway_config (2.3.1)
      ruby-next-core (>= 0.14.0)
    ar_transaction_changes (1.1.9)
      activerecord (>= 5.2.0)
    argon2 (2.2.0)
      ffi (~> 1.15)
      ffi-compiler (~> 1.0)
    ast (2.4.2)
    attr_extras (7.0.0)
    attr_required (1.0.1)
    authtrail (0.4.3)
      activerecord (>= 5.2)
      railties (>= 5.2)
      warden
    auto_strip_attributes (2.6.0)
      activerecord (>= 4.0)
    aws-eventstream (1.2.0)
    aws-partitions (1.711.0)
    aws-sdk-core (3.170.0)
      aws-eventstream (~> 1, >= 1.0.2)
      aws-partitions (~> 1, >= 1.651.0)
      aws-sigv4 (~> 1.5)
      jmespath (~> 1, >= 1.6.1)
    aws-sdk-kms (1.62.0)
      aws-sdk-core (~> 3, >= 3.165.0)
      aws-sigv4 (~> 1.1)
    aws-sdk-s3 (1.119.1)
      aws-sdk-core (~> 3, >= 3.165.0)
      aws-sdk-kms (~> 1)
      aws-sigv4 (~> 1.4)
    aws-sigv4 (1.5.2)
      aws-eventstream (~> 1, >= 1.0.2)
    backport (1.2.0)
    bcrypt (3.1.18)
    benchmark (0.2.1)
    better_html (2.0.1)
      actionview (>= 6.0)
      activesupport (>= 6.0)
      ast (~> 2.0)
      erubi (~> 1.4)
      parser (>= 2.4)
      smart_properties
    bindata (2.4.15)
    bindex (0.8.1)
    bootsnap (1.16.0)
      msgpack (~> 1.2)
    builder (3.2.4)
    capybara (3.38.0)
      addressable
      matrix
      mini_mime (>= 0.1.3)
      nokogiri (~> 1.8)
      rack (>= 1.6.0)
      rack-test (>= 0.6.3)
      regexp_parser (>= 1.5, < 3.0)
      xpath (~> 3.2)
    carmen (1.1.3)
      activesupport (>= 3.0.0)
    cityhash (0.9.0)
    closure_tree (7.4.0)
      activerecord (>= 4.2.10)
      with_advisory_lock (>= 4.0.0)
    cloudflare-rails (3.0.0)
      actionpack (>= 6.0, < 7.1.0)
      activesupport (>= 6.0, < 7.1.0)
      railties (>= 6.0, < 7.1.0)
    cmdstan (0.2.1)
    combine_pdf (1.0.22)
      matrix
      ruby-rc4 (>= 0.1.5)
    concurrent-ruby (1.2.2)
    connection_pool (2.3.0)
    content_disposition (1.0.0)
    counter_culture (3.3.0)
      activerecord (>= 4.2)
      activesupport (>= 4.2)
    cpf_cnpj (0.5.0)
    crack (0.4.5)
      rexml
    crass (1.0.6)
    css_parser (1.14.0)
      addressable
    dalli (3.2.3)
    database_validations (1.1.1)
      activerecord (>= 4.2.0)
    date (3.3.3)
    debug (1.7.1)
      irb (>= 1.5.0)
      reline (>= 0.3.1)
    declarative (0.0.20)
    device_detector (1.1.0)
    devise (4.8.1)
      bcrypt (~> 3.0)
      orm_adapter (~> 0.1)
      railties (>= 4.1.0)
      responders
      warden (~> 1.2.3)
    devise-security (0.17.0)
      devise (>= 4.3.0)
    diff-lcs (1.5.0)
    discard (1.2.1)
      activerecord (>= 4.2, < 8)
    dns_mock (1.5.15)
      simpleidn (~> 0.2.1)
    docile (1.4.0)
    domain_name (0.5.20190701)
      unf (>= 0.0.5, < 1.0.0)
    doorkeeper (5.6.5)
      railties (>= 5)
    doorkeeper-openid_connect (1.8.5)
      doorkeeper (>= 5.5, < 5.7)
      jwt (>= 2.5)
    down (5.4.0)
      addressable (~> 2.8)
    dry-initializer (3.1.1)
    e2mmap (0.1.0)
    email_validator (2.2.4)
      activemodel
    erb_lint (0.3.1)
      activesupport
      better_html (>= 2.0.1)
      parser (>= 2.7.1.4)
      rainbow
      rubocop
      smart_properties
    erblint-github (0.1.3)
    errbase (0.2.2)
    erubi (1.12.0)
    et-orbi (1.2.7)
      tzinfo
    factory_bot (6.2.1)
      activesupport (>= 5.0.0)
    factory_bot_rails (6.2.0)
      factory_bot (~> 6.2.0)
      railties (>= 5.0.0)
    faker (3.1.1)
      i18n (>= 1.8.11, < 2)
    faraday (2.7.4)
      faraday-net_http (>= 2.0, < 3.1)
      ruby2_keywords (>= 0.0.4)
    faraday-follow_redirects (0.3.0)
      faraday (>= 1, < 3)
    faraday-net_http (3.0.2)
    fast_blank (1.0.1)
    fastimage (2.2.6)
    ffi (1.15.5)
    ffi-compiler (1.0.1)
      ffi (>= 1.0.0)
      rake
    flamegraph (0.9.5)
    friendly_id (5.5.0)
      activerecord (>= 4.0.0)
    fugit (1.8.1)
      et-orbi (~> 1, >= 1.2.7)
      raabro (~> 1.4)
    fuubar (2.5.1)
      rspec-core (~> 3.0)
      ruby-progressbar (~> 1.4)
    gitlab-sidekiq-fetcher (0.9.0)
      json (>= 2.5)
      sidekiq (~> 6.1)
    globalid (1.1.0)
      activesupport (>= 5.0)
    google-apis-core (0.10.0)
      addressable (~> 2.5, >= 2.5.1)
      googleauth (>= 0.16.2, < 2.a)
      httpclient (>= 2.8.1, < 3.a)
      mini_mime (~> 1.0)
      representable (~> 3.0)
      retriable (>= 2.0, < 4.a)
      rexml
      webrick
    google-apis-youtube_v3 (0.26.0)
      google-apis-core (>= 0.9.1, < 2.a)
    google-protobuf (3.22.0)
    googleapis-common-protos-types (1.5.0)
      google-protobuf (~> 3.14)
    googleauth (1.3.0)
      faraday (>= 0.17.3, < 3.a)
      jwt (>= 1.4, < 3.0)
      memoist (~> 0.16)
      multi_json (~> 1.11)
      os (>= 0.9, < 2.0)
      signet (>= 0.16, < 2.a)
    groupdate (6.2.0)
      activesupport (>= 5.2)
    grpc (1.50.0)
      google-protobuf (~> 3.21)
      googleapis-common-protos-types (~> 1.0)
    hairtrigger (1.0.0)
      activerecord (>= 6.0, < 8)
      ruby2ruby (~> 2.4)
      ruby_parser (~> 3.10)
    hashdiff (1.0.1)
    hashery (2.1.2)
    hashie (5.0.0)
    health-monitor-rails (10.2.0)
      railties (>= 6.1)
    heroicon (1.0.0)
      rails (>= 5.2)
    highline (2.0.3)
    hiredis (0.6.3)
    hiredis-client (0.13.0)
      redis-client (= 0.13.0)
    htmlbeautifier (1.4.2)
    htmlentities (4.3.4)
    http (5.1.0)
      addressable (~> 2.8)
      http-cookie (~> 1.0)
      http-form_data (~> 2.2)
      llhttp-ffi (~> 0.4.0)
    http-cookie (1.0.5)
      domain_name (~> 0.5)
    http-form_data (2.3.0)
    httpclient (2.8.3)
    i18n (1.12.0)
      concurrent-ruby (~> 1.0)
    i18n-tasks (1.0.12)
      activesupport (>= 4.0.2)
      ast (>= 2.1.0)
      better_html (>= 1.0, < 3.0)
      erubi
      highline (>= 2.0.0)
      i18n
      parser (>= 2.2.3.0)
      rails-i18n
      rainbow (>= 2.2.2, < 4.0)
      terminal-table (>= 1.5.1)
    identity_cache (1.3.0)
      activerecord (>= 5.2)
      ar_transaction_changes (~> 1.1)
    imgproxy (2.1.0)
      anyway_config (>= 2.0.0)
    io-console (0.6.0)
    irb (1.6.2)
      reline (>= 0.3.0)
    isolator (0.8.0)
      sniffer (>= 0.3.1)
    jaro_winkler (1.5.4)
    jmespath (1.6.2)
    job-iteration (1.3.6)
      activejob (>= 5.2)
    json (2.6.3)
    json-jwt (1.16.3)
      activesupport (>= 4.2)
      aes_key_wrap
      bindata
      faraday (~> 2.0)
      faraday-follow_redirects
    jwt (2.6.0)
    kramdown (2.4.0)
      rexml
    kramdown-parser-gfm (1.1.0)
      kramdown (~> 2.0)
    kredis (1.3.0)
      activesupport (>= 6.0.0)
      redis (>= 4.2, < 6)
    listen (3.8.0)
      rb-fsevent (~> 0.10, >= 0.10.3)
      rb-inotify (~> 0.9, >= 0.9.10)
    llhttp-ffi (0.4.0)
      ffi-compiler (~> 1.0)
      rake (~> 13.0)
    loofah (2.19.1)
      crass (~> 1.0.2)
      nokogiri (>= 1.5.9)
    lookbook (1.5.3)
      actioncable
      activemodel
      css_parser
      htmlbeautifier (~> 1.3)
      htmlentities (~> 4.3.4)
      listen (~> 3.0)
      railties (>= 5.0)
      redcarpet (~> 3.5)
      rouge (>= 3.26, < 5.0)
      view_component (> 2.0, < 4)
      yard (~> 0.9.25)
      zeitwerk (~> 2.5)
    mail (2.8.1)
      mini_mime (>= 0.1.1)
      net-imap
      net-pop
      net-smtp
    maintenance_tasks (2.0.0)
      actionpack (>= 6.0)
      activejob (>= 6.0)
      activerecord (>= 6.0)
      job-iteration (~> 1.3.6)
      railties (>= 6.0)
    marcel (1.0.2)
    matrix (0.4.2)
    memoist (0.16.2)
    memory_profiler (1.0.1)
    method_source (1.0.0)
    mini_mime (1.1.2)
    mini_portile2 (2.8.1)
    minitest (5.18.0)
    monetize (1.12.0)
      money (~> 6.12)
    money (6.16.0)
      i18n (>= 0.6.4, <= 2)
    money-rails (1.15.0)
      activesupport (>= 3.0)
      monetize (~> 1.9)
      money (~> 6.13)
      railties (>= 3.0)
    msgpack (1.6.0)
    multi_json (1.15.0)
    multi_xml (0.6.0)
    net-imap (0.3.4)
      date
      net-protocol
    net-pop (0.1.2)
      net-protocol
    net-protocol (0.2.1)
      timeout
    net-smtp (0.3.3)
      net-protocol
    net-telnet (0.2.0)
    newrelic_rpm (8.16.0)
    nio4r (2.5.8)
    nokogiri (1.14.2)
      mini_portile2 (~> 2.8.0)
      racc (~> 1.4)
    noticed (1.6.0)
      http (>= 4.0.0)
      rails (>= 5.2.0)
    numo-narray (0.9.2.1)
    oauth2 (2.0.9)
      faraday (>= 0.17.3, < 3.0)
      jwt (>= 1.0, < 3.0)
      multi_xml (~> 0.5)
      rack (>= 1.2, < 4)
      snaky_hash (~> 2.0)
      version_gem (~> 1.1)
    octicons (17.11.1)
    oj (3.14.2)
    omniauth (2.1.1)
      hashie (>= 3.4.6)
      rack (>= 2.2.3)
      rack-protection
    omniauth-oauth2 (1.8.0)
      oauth2 (>= 1.4, < 3)
      omniauth (~> 2.0)
    omniauth-rails_csrf_protection (1.0.1)
      actionpack (>= 4.2)
      omniauth (~> 2.0)
    omniauth_openid_connect (0.6.0)
      omniauth (>= 1.9, < 3)
      openid_connect (~> 1.1)
    openid_connect (1.4.2)
      activemodel
      attr_required (>= 1.0.0)
      json-jwt (>= 1.15.0)
      net-smtp
      rack-oauth2 (~> 1.21)
      swd (~> 1.3)
      tzinfo
      validate_email
      validate_url
      webfinger (~> 1.2)
    optimist (3.0.1)
    orm_adapter (0.5.0)
    os (1.1.4)
    pagy (6.0.1)
    panko_serializer (0.7.9)
      activesupport
      oj (> 3.11.0, < 4.0.0)
    paper_trail (14.0.0)
      activerecord (>= 6.0)
      request_store (~> 1.4)
    parallel (1.22.1)
    parser (3.2.0.0)
      ast (~> 2.4.1)
    patience_diff (1.2.0)
      optimist (~> 3.0)
    pdf-core (0.9.0)
    pdf-inspector (1.3.0)
      pdf-reader (>= 1.0, < 3.0.a)
    pdf-reader (2.11.0)
      Ascii85 (~> 1.0)
      afm (~> 0.2.1)
      hashery (~> 2.0)
      ruby-rc4
      ttfunk
    pg (1.4.6)
    pg_party (1.6.0)
      activerecord (>= 5.2, < 7.1)
      parallel (~> 1.0)
      ruby2_keywords (~> 0.0.2)
    pg_query (4.2.0)
      google-protobuf (>= 3.19.2)
    prawn (2.4.0)
      pdf-core (~> 0.9.0)
      ttfunk (~> 1.7)
    pretender (0.4.0)
      actionpack (>= 5.2)
    primer_view_components (0.0.121)
      actionview (>= 5.0.0)
      activesupport (>= 5.0.0)
      octicons (>= 17.0.0)
      view_component (> 2.0, < 4.0)
    prophet-rb (0.4.2)
      cmdstan (>= 0.2)
      numo-narray (>= 0.9.1.7)
      rover-df
    propshaft (0.6.4)
      actionpack (>= 7.0.0)
      activesupport (>= 7.0.0)
      rack
      railties (>= 7.0.0)
    prosopite (1.3.0)
    public_suffix (5.0.1)
    puma (6.1.0)
      nio4r (~> 2.0)
    raabro (1.4.0)
    racc (1.6.2)
    rack (2.2.6.3)
    rack-attack (6.6.1)
      rack (>= 1.0, < 3)
    rack-mini-profiler (3.0.0)
      rack (>= 1.2.0)
    rack-oauth2 (1.21.3)
      activesupport
      attr_required
      httpclient
      json-jwt (>= 1.11.0)
      rack (>= 2.1.0)
    rack-protection (3.0.5)
      rack
    rack-proxy (0.7.6)
      rack
    rack-test (2.0.2)
      rack (>= 1.3)
    rack-timeout (0.6.3)
    rails (7.0.4.2)
      actioncable (= 7.0.4.2)
      actionmailbox (= 7.0.4.2)
      actionmailer (= 7.0.4.2)
      actionpack (= 7.0.4.2)
      actiontext (= 7.0.4.2)
      actionview (= 7.0.4.2)
      activejob (= 7.0.4.2)
      activemodel (= 7.0.4.2)
      activerecord (= 7.0.4.2)
      activestorage (= 7.0.4.2)
      activesupport (= 7.0.4.2)
      bundler (>= 1.15.0)
      railties (= 7.0.4.2)
    rails-dom-testing (2.0.3)
      activesupport (>= 4.2.0)
      nokogiri (>= 1.6)
    rails-html-sanitizer (1.5.0)
      loofah (~> 2.19, >= 2.19.1)
    rails-i18n (7.0.6)
      i18n (>= 0.7, < 2)
      railties (>= 6.0.0, < 8)
    rails_real_favicon (0.1.1)
      json (>= 1.7, < 3)
      rails
      rubyzip (~> 2)
    rails_semantic_logger (4.11.0)
      rack
      railties (>= 5.1)
      semantic_logger (~> 4.9)
    railties (7.0.4.2)
      actionpack (= 7.0.4.2)
      activesupport (= 7.0.4.2)
      method_source
      rake (>= 12.2)
      thor (~> 1.0)
      zeitwerk (~> 2.5)
    rainbow (3.1.1)
    rake (13.0.6)
    rb-fsevent (0.11.2)
    rb-inotify (0.10.1)
      ffi (~> 1.0)
    redcarpet (3.6.0)
    redis (5.0.6)
      redis-client (>= 0.9.0)
    redis-client (0.13.0)
      connection_pool
    regexp-examples (1.5.1)
    regexp_parser (2.7.0)
    reline (0.3.2)
      io-console (~> 0.5)
    representable (3.2.0)
      declarative (< 0.1.0)
      trailblazer-option (>= 0.1.1, < 0.2.0)
      uber (< 0.2.0)
    request_store (1.5.1)
      rack (>= 1.4)
    requestjs-rails (0.0.10)
      rails (>= 6.0.0)
    responders (3.0.1)
      actionpack (>= 5.0)
      railties (>= 5.0)
    retriable (3.1.2)
    reverse_markdown (2.1.1)
      nokogiri
    rexml (3.2.5)
    rollups (0.2.0)
      activesupport (>= 5.2)
      groupdate (>= 6.1)
    rouge (4.1.0)
    rover-df (0.3.4)
      numo-narray (>= 0.9.1.9)
    rspec-core (3.12.0)
      rspec-support (~> 3.12.0)
    rspec-expectations (3.12.0)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.12.0)
    rspec-mocks (3.12.0)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.12.0)
    rspec-rails (6.0.1)
      actionpack (>= 6.1)
      activesupport (>= 6.1)
      railties (>= 6.1)
      rspec-core (~> 3.11)
      rspec-expectations (~> 3.11)
      rspec-mocks (~> 3.11)
      rspec-support (~> 3.11)
    rspec-sidekiq (3.1.0)
      rspec-core (~> 3.0, >= 3.0.0)
      sidekiq (>= 2.4.0)
    rspec-support (3.12.0)
    rspec_junit_formatter (0.6.0)
      rspec-core (>= 2, < 4, != 2.12.0)
    rubocop (1.45.1)
      json (~> 2.3)
      parallel (~> 1.10)
      parser (>= 3.2.0.0)
      rainbow (>= 2.2.2, < 4.0)
      regexp_parser (>= 1.8, < 3.0)
      rexml (>= 3.2.5, < 4.0)
      rubocop-ast (>= 1.24.1, < 2.0)
      ruby-progressbar (~> 1.7)
      unicode-display_width (>= 2.4.0, < 3.0)
    rubocop-ast (1.24.1)
      parser (>= 3.1.1.0)
    rubocop-capybara (2.17.0)
      rubocop (~> 1.41)
    rubocop-performance (1.16.0)
      rubocop (>= 1.7.0, < 2.0)
      rubocop-ast (>= 0.4.0)
    rubocop-rails (2.17.4)
      activesupport (>= 4.2.0)
      rack (>= 1.1)
      rubocop (>= 1.33.0, < 2.0)
    rubocop-rspec (2.18.1)
      rubocop (~> 1.33)
      rubocop-capybara (~> 2.17)
    ruby-next-core (0.15.3)
    ruby-oembed (0.16.1)
    ruby-progressbar (1.11.0)
    ruby-rc4 (0.1.5)
    ruby2_keywords (0.0.5)
    ruby2ruby (2.5.0)
      ruby_parser (~> 3.1)
      sexp_processor (~> 4.6)
    ruby_parser (3.19.2)
      sexp_processor (~> 4.16)
    rubyzip (2.3.2)
    rufus-scheduler (3.8.2)
      fugit (~> 1.1, >= 1.1.6)
    safely_block (0.3.0)
      errbase (>= 0.1.1)
    sanitize (6.0.1)
      crass (~> 1.0.2)
      nokogiri (>= 1.12.0)
    scatter_swap (0.0.3)
    scenic (1.7.0)
      activerecord (>= 4.0.0)
      railties (>= 4.0.0)
    semantic_logger (4.12.0)
      concurrent-ruby (~> 1.0)
    semantic_range (3.0.0)
    sexp_processor (4.16.1)
    shakapacker (6.5.5)
      activesupport (>= 5.2)
      rack-proxy (>= 0.6.1)
      railties (>= 5.2)
      semantic_range (>= 2.3.0)
    shoulda-matchers (5.3.0)
      activesupport (>= 5.2.0)
    shrine (3.4.0)
      content_disposition (~> 1.0)
      down (~> 5.1)
    sidekiq (6.5.5)
      connection_pool (>= 2.2.2)
      rack (~> 2.0)
      redis (>= 4.5.0)
    sidekiq-bulk (0.2.0)
      sidekiq
    sidekiq-scheduler (5.0.1)
      rufus-scheduler (~> 3.2)
      sidekiq (>= 4, < 8)
      tilt (>= 1.4.0)
    signet (0.17.0)
      addressable (~> 2.8)
      faraday (>= 0.17.5, < 3.a)
      jwt (>= 1.5, < 3.0)
      multi_json (~> 1.10)
    simplecov (0.22.0)
      docile (~> 1.1)
      simplecov-html (~> 0.11)
      simplecov_json_formatter (~> 0.1)
    simplecov-html (0.12.3)
    simplecov_json_formatter (0.1.4)
    simpleidn (0.2.1)
      unf (~> 0.1.4)
    smart_properties (1.17.0)
    snaky_hash (2.0.1)
      hashie
      version_gem (~> 1.1, >= 1.1.1)
    sniffer (0.5.0)
      anyway_config (>= 1.0)
      dry-initializer (~> 3)
    solargraph (0.48.0)
      backport (~> 1.2)
      benchmark
      bundler (>= 1.17.2)
      diff-lcs (~> 1.4)
      e2mmap
      jaro_winkler (~> 1.5)
      kramdown (~> 2.3)
      kramdown-parser-gfm (~> 1.1)
      parser (~> 3.0)
      reverse_markdown (>= 1.0.5, < 3)
      rubocop (>= 0.52)
      thor (~> 1.0)
      tilt (~> 2.0)
      yard (~> 0.9, >= 0.9.24)
    stackprof (0.2.23)
    stimulus-rails (1.2.1)
      railties (>= 6.0.0)
    store_model (1.5.1)
      activerecord (>= 5.2)
    streamio-ffmpeg (3.0.2)
      multi_json (~> 1.8)
    strong_migrations (1.4.3)
      activerecord (>= 5.2)
    super_diff (0.9.0)
      attr_extras (>= 6.2.4)
      diff-lcs
      patience_diff
    swd (1.3.0)
      activesupport (>= 3)
      attr_required (>= 0.0.5)
      httpclient (>= 2.4)
    terminal-table (3.0.2)
      unicode-display_width (>= 1.1.1, < 3)
    test-prof (1.0.11)
    thor (1.2.1)
    tilt (2.0.11)
    timecop (0.9.6)
    timeout (0.3.1)
    trailblazer-option (0.1.2)
    ttfunk (1.7.0)
    turbo-rails (1.4.0)
      actionpack (>= 6.0.0)
      activejob (>= 6.0.0)
      railties (>= 6.0.0)
    tzinfo (2.0.6)
      concurrent-ruby (~> 1.0)
    uber (0.1.0)
    unf (0.1.4)
      unf_ext
    unf_ext (0.0.8.2)
    unicode-display_width (2.4.2)
    valid_email2 (4.0.5)
      activemodel (>= 3.2)
      mail (~> 2.5)
    validate_email (0.1.6)
      activemodel (>= 3.0)
      mail (>= 2.2.5)
    validate_url (1.0.15)
      activemodel (>= 3.0.0)
      public_suffix
    validates_zipcode (0.5.2)
      activemodel (>= 4.2.0)
    vcr (6.1.0)
    version_gem (1.1.1)
    view_component (2.82.0)
      activesupport (>= 5.2.0, < 8.0)
      concurrent-ruby (~> 1.0)
      method_source (~> 1.0)
    view_component-contrib (0.1.3)
      ruby-next-core (>= 0.12.0)
      view_component
    warden (1.2.9)
      rack (>= 2.0.9)
    web-console (4.2.0)
      actionview (>= 6.0.0)
      activemodel (>= 6.0.0)
      bindex (>= 0.4.0)
      railties (>= 6.0.0)
    webfinger (1.2.0)
      activesupport
      httpclient (>= 2.4)
    webmock (3.18.1)
      addressable (>= 2.8.0)
      crack (>= 0.3.2)
      hashdiff (>= 0.4.0, < 2.0.0)
    webrick (1.7.0)
    websocket-driver (0.7.5)
      websocket-extensions (>= 0.1.0)
    websocket-extensions (0.1.5)
    with_advisory_lock (4.6.0)
      activerecord (>= 4.2)
    xpath (3.2.0)
      nokogiri (~> 1.8)
    yard (0.9.28)
      webrick (~> 1.7.0)
    zeitwerk (2.6.7)
    zonebie (0.6.1)

PLATFORMS
  ruby

DEPENDENCIES
  accept_language (~> 2.0.3)
  action_policy (~> 0.6.5)
  active_record_doctor (~> 1.10.0)
  activerecord-multi-tenant (~> 2.2.0)
  acts-as-taggable-on (~> 9.0)
  acts_as_list (~> 1.1.0)
  addressable (~> 2.8.1)
  after_commit_everywhere (~> 1.3.0)
  ahoy_matey (~> 4.2.0)
  amazing_print (~> 1.4.0)
  anycable-rails (~> 1.3.5)
  anycable-rails-jwt (~> 0.1.0)
  anyway_config (~> 2.3)
  argon2 (~> 2.2.0)
  authtrail (~> 0.4.3)
  auto_strip_attributes (~> 2.6)
  aws-sdk-s3 (~> 1.119.1)
  better_html (~> 2.0.1)
  bootsnap (~> 1.16.0)
  capybara (~> 3.38.0)
  carmen (~> 1.1.3)
  cityhash (~> 0.9.0)
  closure_tree (~> 7.4.0)
  cloudflare-rails (~> 3.0.0)
  combine_pdf (~> 1.0.22)
  counter_culture (~> 3.3.0)
  cpf_cnpj (~> 0.5.0)
  dalli (~> 3.2.3)
  database_validations (~> 1.1.1)
  debug (~> 1.7.1)
  devise (~> 4.8.1)
  devise-security (~> 0.17.0)
  discard (~> 1.2.1)
  dns_mock (~> 1.5.15)
  doorkeeper (~> 5.6.5)
  doorkeeper-openid_connect (~> 1.8.4)
  down (~> 5.4.0)
  dry-initializer (~> 3.1)
  email_validator (~> 2.2.4)
  erb_lint (~> 0.3.1)
  erblint-github (~> 0.1.3)
  factory_bot_rails (~> 6.2.0)
  faker (~> 3.1.1)
  faraday (~> 2.7.4)
  fast_blank (~> 1.0.1)
  fastimage (~> 2.2.6)
  flamegraph (~> 0.9.5)
  friendly_id (~> 5.5.0)
  fuubar (~> 2.5.1)
  gitlab-sidekiq-fetcher (~> 0.9.0)
  google-apis-youtube_v3 (~> 0.26.0)
  groupdate (~> 6.2.0)
  hairtrigger (~> 1.0.0)
  health-monitor-rails (~> 10.2.0)
  heroicon (~> 1.0.0)
  hiredis (~> 0.6.3)
  hiredis-client (~> 0.13.0)
  i18n-tasks (~> 1.0.12)
  identity_cache (~> 1.3)
  imgproxy (~> 2.1.0)
  isolator (~> 0.8.0)
  job-iteration (~> 1.3.6)
  kredis (~> 1.3.0)
  lookbook (~> 1.5.3)
  maintenance_tasks (~> 2.0.0)
  marcel (~> 1.0.2)
  memory_profiler (~> 1.0.1)
  money-rails (~> 1.12)
  net-telnet (~> 0.2.0)
  newrelic_rpm (~> 8.16.0)
  noticed (~> 1.6.0)
  oj (~> 3.14.2)
  omniauth (~> 2.1.1)
  omniauth-oauth2 (~> 1.8.0)
  omniauth-rails_csrf_protection (~> 1.0.1)
  omniauth_openid_connect (~> 0.6.0)
  pagy (~> 6.0.1)
  panko_serializer (~> 0.7.9)
  paper_trail (~> 14.0.0)
  pdf-inspector (~> 1.3.0)
  pdf-reader (~> 2.11.0)
  pg (~> 1.4.6)
  pg_party (~> 1.6.0)
  pg_query (~> 4.2.0)
  prawn (~> 2.4.0)
  pretender (~> 0.4.0)
  primer_view_components (~> 0.0.121)
  prophet-rb (~> 0.4.2)
  propshaft (= 0.6.4)
  prosopite (~> 1.3.0)
  puma (~> 6.1)
  rack-attack (~> 6.6.1)
  rack-mini-profiler (~> 3.0.0)
  rack-timeout (~> 0.6.3)
  rails (~> 7.0.4)
  rails-i18n (~> 7.0.6)
  rails_real_favicon (~> 0.1.1)
  rails_semantic_logger (~> 4.11.0)
  redis (~> 5.0)
  regexp-examples (~> 1.5.1)
  requestjs-rails (~> 0.0.10)
  retriable (~> 3.1)
  rollups (~> 0.2.0)
  rspec-rails (~> 6.0.1)
  rspec-sidekiq (~> 3.1.0)
  rspec_junit_formatter (~> 0.6.0)
  rubocop (~> 1.45)
  rubocop-performance (~> 1.16.0)
  rubocop-rails (~> 2.17.4)
  rubocop-rspec (~> 2.18.1)
  ruby-oembed (~> 0.16.1)
  sanitize (~> 6.0.1)
  scatter_swap (~> 0.0.3)
  scenic (~> 1.7.0)
  shakapacker (= 6.5.5)
  shoulda-matchers (~> 5.3.0)
  shrine (~> 3.4.0)
  sidekiq (~> 6.5.5)
  sidekiq-bulk (~> 0.2.0)
  sidekiq-scheduler (~> 5.0.1)
  simplecov (~> 0.22.0)
  simplecov_json_formatter (~> 0.1.4)
  solargraph (~> 0.48.0)
  stackprof (~> 0.2.23)
  stimulus-rails (~> 1.2.1)
  store_model (~> 1.5.1)
  streamio-ffmpeg (~> 3.0.2)
  strong_migrations (~> 1.4.3)
  super_diff (~> 0.9.0)
  test-prof (~> 1.0)
  timecop (~> 0.9.6)
  turbo-rails (~> 1.4.0)
  tzinfo-data (~> 2.0.4)
  valid_email2 (~> 4.0.5)
  validate_url (~> 1.0.15)
  validates_zipcode (~> 0.5.2)
  vcr (~> 6.1.0)
  view_component (~> 2.82.0)
  view_component-contrib (~> 0.1.3)
  web-console (~> 4.2.0)
  webmock (~> 3.18.1)
  zonebie (= 0.6.1)

RUBY VERSION
   ruby 3.1.2p20

BUNDLED WITH
   2.3.22

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant