Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/locaweb/elixir-cassette
Elixir library to create and validate CAS tickets
https://github.com/locaweb/elixir-cassette
hacktoberfest
Last synced: about 2 months ago
JSON representation
Elixir library to create and validate CAS tickets
- Host: GitHub
- URL: https://github.com/locaweb/elixir-cassette
- Owner: locaweb
- License: mit
- Created: 2016-03-02T22:06:25.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2022-10-04T17:30:10.000Z (over 2 years ago)
- Last Synced: 2024-04-16T18:21:21.501Z (9 months ago)
- Topics: hacktoberfest
- Language: Elixir
- Homepage:
- Size: 123 KB
- Stars: 15
- Watchers: 5
- Forks: 6
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Cassette
Library to generate and validate [CAS](http://jasig.github.io/cas/) TGTs/STs
[![Test and quality](https://github.com/locaweb/elixir-cassette/actions/workflows/main.yml/badge.svg)](https://github.com/locaweb/elixir-cassette/actions/workflows/main.yml)
## Installation
The package can be installed as:
1. Add cassette to your list of dependencies in `mix.exs`:
def deps do
[{:cassette, "~> 1.1"}]
end2. Ensure cassette is started before your application:
def application do
[applications: [:cassette]]
end## Usage with the default configuration
The module `Cassette` includes the functions to generate TGTs and STs
This will use the default configuration (in mix.config), please refer to `Cassete.Config` struct for the available keys (including expiration times).
```elixir
config :cassette, username: "example-user"
config :cassette, password: "topsecret"
config :cassette, base_url: "https://cas-server.example.org"
config :cassette, base_authority: "EXAMPLE"
config :cassette, service: "app.example.org"
````base_authority` helps on role validation and `service` is the default value used by `Cassette.validate/2`
This default configuration is returned by the `Cassette.Config.default` function.
Any of those values may be configured with a tuple, so configuration can be loaded using environment variables:
```elixir
config :cassette, password: {:system, "SOME_ENVIRONMENT_VARIABLE"}
```A round trip validation would look like this:
$ iex -S mix
iex> {:ok, tgt} = Cassette.tgt
{:ok, "TGT-11692539-ZIvKZ6TlGUBX5DBgR6egYnVvJeHyJpM2oxApxlsIYEaX2dUd9x"}iex> {:ok, st} = Cassette.st(Cassette.Config.default.service)
{:ok, "ST-16175889-oqcTdH041YZeeLcQtYCL"}iex> Cassette.validate(st, Cassette.Config.default.service)
{:ok, %Cassette.User{login: "sampleuser", authorities: ["ACME_ADMIN"...]}}You are not required to call `Cassette.tgt`, it will be generated (or re-generated in case of expiration) when creating a ST.
## Multiple configurations
If you want to use multiple cas services you can create your own module and `use` the `Cassette.Support` macro module, you can define the `GenServer` name and/or provide a configuration.
```elixir
defmodule MyCas do
use Cassette.Support, process_name: :MyCasServer, config: %Cassette.Config{...}
end
```This other Cas service must be started as well with `MyCas.start` before it can be used or it may be added to your supervision tree:
```elixir
defmodule YourApp do
def start(_type, _args) do
import Supervisor.Spec, warn: falsechildren = [
# some other apps,
MyCas.child_spec
]opts = [strategy: :one_for_one, name: MyApp.Supervisor]
Supervisor.started(children, opts)
end
end
```## Using self signed servers
If you really really want to use insecure/self-signed certificates, use a `Cassette.Config` struct with `insecure` set to true.
You can also define in your `mix/config.exs` like:```elixir
use Mix.Configconfig :cassette, :insecure, true
```## Contributing
Check out [Contributing](CONTRIBUTING.md) guide.