43 lines
1.4 KiB
Ruby
43 lines
1.4 KiB
Ruby
class AddTokenPrefixToTokens < ActiveRecord::Migration[8.1]
|
|
def up
|
|
add_column :oidc_access_tokens, :token_prefix, :string, limit: 8
|
|
add_column :oidc_refresh_tokens, :token_prefix, :string, limit: 8
|
|
|
|
# Backfill existing tokens with prefix and digest
|
|
say_with_time "Backfilling token prefixes and digests..." do
|
|
[OidcAccessToken, OidcRefreshToken].each do |klass|
|
|
klass.reset_column_information # Ensure Rails knows about new column
|
|
|
|
klass.where(token_prefix: nil).find_each do |token|
|
|
next unless token.token.present?
|
|
|
|
updates = {}
|
|
|
|
# Compute HMAC prefix
|
|
prefix = klass.compute_token_prefix(token.token)
|
|
updates[:token_prefix] = prefix if prefix.present?
|
|
|
|
# Backfill digest if missing
|
|
if token.token_digest.nil?
|
|
updates[:token_digest] = BCrypt::Password.create(token.token)
|
|
end
|
|
|
|
token.update_columns(updates) if updates.any?
|
|
end
|
|
|
|
say " #{klass.name}: #{klass.where.not(token_prefix: nil).count} tokens backfilled"
|
|
end
|
|
end
|
|
|
|
add_index :oidc_access_tokens, :token_prefix
|
|
add_index :oidc_refresh_tokens, :token_prefix
|
|
end
|
|
|
|
def down
|
|
remove_index :oidc_access_tokens, :token_prefix
|
|
remove_index :oidc_refresh_tokens, :token_prefix
|
|
remove_column :oidc_access_tokens, :token_prefix
|
|
remove_column :oidc_refresh_tokens, :token_prefix
|
|
end
|
|
end
|