Current section

Files

Jump to
boruta priv repo migrations 20240126125129_insert_public_client.exs
Raw

priv/repo/migrations/20240126125129_insert_public_client.exs

defmodule Boruta.Repo.Migrations.InsertPublicClient do
use Ecto.Migration
import Boruta.Config,
only: [token_generator: 0, issuer: 0]
def up do
private_key = JOSE.JWK.generate_key({:ec, "P-256"})
public_key = JOSE.JWK.to_public(private_key)
{_type, public_pem} = JOSE.JWK.to_pem(public_key)
{_type, private_pem} = JOSE.JWK.to_pem(private_key)
alter table(:oauth_clients) do
add(:public_client_id, :string)
end
execute("""
INSERT INTO oauth_clients (
id,
public_client_id,
name,
secret,
confidential,
access_token_ttl,
authorization_code_ttl,
refresh_token_ttl,
id_token_ttl,
redirect_uris,
authorize_scope,
supported_grant_types,
id_token_signature_alg,
public_key,
private_key,
inserted_at,
updated_at
) VALUES (
gen_random_uuid(),
'#{issuer()}',
'public client',
'#{token_generator().secret(struct(Boruta.Ecto.Client))}',
true,
86400,
60,
86400,
86400,
'{}',
false,
'{"client_credentials", "password", "authorization_code", "preauthorized_code", "refresh_token", "implicit", "revoke", "introspect"}',
'ES256',
'#{public_pem}',
'#{private_pem}',
current_timestamp,
current_timestamp
)
""")
end
def down do
alter table(:oauth_clients) do
remove(:public_client_id, :string)
end
end
end