Here's an example of a rails migration which modifies application configuration:
require 'fusionauth/fusionauth_client'
class ModifyApplicationToUseForm < ActiveRecord::Migration[6.1]
def up
client = FusionAuth::FusionAuthClient.new(ENV['FA_API_KEY'], Rails.configuration.x.oauth.idp_url)
request = {
"application": {
"registrationConfiguration": {
"enabled": true,
"type": "basic"
}
}
}
res = client.patch_application(Rails.configuration.x.oauth.client_id, request)
if res.status != 200
raise "did not succeed."
end
end
def down
client = FusionAuth::FusionAuthClient.new(ENV['FA_API_KEY'], Rails.configuration.x.oauth.idp_url)
request = {
"application": {
"registrationConfiguration": {
"enabled": false
}
}
}
res = client.patch_application(Rails.configuration.x.oauth.client_id, request)
if res.status != 200
raise "did not succeed."
end
end
end
Worth noting that I pull the API key from the environment and the location of the FusionAuth instance and the application id from a config file. Often you'll need to do a lookup if you are modifying other entities.
You'd run this via the normal migration process: rails db:migrate to roll forward and rails db:rollback to rollback.
You can also run more than one operation in a single migration, but there's no transaction surrounding these changes, so if you are making three changes and step number 2 fails, you'll have to back out step number manually.