README.md

# Blossom

[![Hex.pm Version](https://img.shields.io/hexpm/v/blossom?style=flat&link=https%3A%2F%2Fhex.pm%2Fpackages%2Fkiln)](https://hex.pm/packages/blossom)
[![builds.sr.ht status](https://builds.sr.ht/~nomorepanic/blossom/commits/main/test-current.yaml.svg)](https://builds.sr.ht/~nomorepanic/blossom/commits/main/test-current.yaml?)

Easy identity for easy authentication

## Usage

1. Add to your config:

```elixir
config :myapp,
  ecto_repos: [MyApp.Repo],
  db_url: "ecto://postgres:postgres@localhost/myapp"

config :myapp, Blossom,
  secret: "your-secret",
  audience: "localhost",
  expiration: 43200,
  issuer: "myapp",
  realm: "myapp",
  jwt_key: :jwt,
  user_key: :user,
  users_controller: MyApp.Controllers.Users

```

2. Add to your migrations:

```elixir
defmodule MyApp.Repo.Migrations.Init do
  use Ecto.Migration

  def up do
    Blossom.Migrations.up()
  end

  def down do 
    Blossom.Migrations.down()
  end
end
```

3. Create an auth module

```elixir
defmodule MyApp.Auth do
  use Blossom.Auth
end
```

4. Create controllers, models, and schemas:

```elixir 
defmodule MyApp.Schemas.Users do
  use Blossom.Schemas.Users
end

defmodule MyApp.Models.Users do
  use Blossom.Models.Users
end

defmodule MyApp.Controllers.Users do
  use Blossom.Controllers.Users
end

defmodule MyApp.Schemas.Organizations do
  use Blossom.Schemas.Organizations
end

defmodule MyApp.Models.Organizations do
  use Blossom.Models.Organizations
end

defmodule MyApp.Controllers.Organizations do
  use Blossom.Controllers.Organizations
end
defmodule MyApp.Schemas.OrganizationsRoles do
  use Blossom.Schemas.OrganizationsRoles
end

defmodule MyApp.Models.OrganizationsRoles do
  use Blossom.Models.OrganizationsRoles
end

defmodule MyApp.Controllers.OrganizationsRoles do
  use Blossom.Controllers.OrganizationsRoles
end
```

5. Plug the AuthPlug in your private router or pipeline:

```elixir
plug(Blossom.AuthPlug, config: Application.compile_env(:myapp, Blossom))
```