# Ithibati v0.1.0 - Table of Contents

> Passkey authentication for Elixir applications: accounts, WebAuthn credentials, recovery codes and revocable sessions. It has no opinion about what an account may do. The web half is optional and built for Phoenix.

## GUIDES

- Guides
  - [Ithibati](overview.md)
  - [Getting started](getting_started.md)
  - [Registering and signing in](ceremonies.md)
  - [Passkeys](passkeys.md)
  - [Invitations, and the first account](invitations.md)
  - [Recovery codes](recovery.md)

- Tooling
  - [mix ithibati.doctor](doctor.md)
  - [Credo checks](credo.md)

- About
  - [Changelog](changelog.md)
  - [Licence](license.md)

## Modules

- [Ithibati](Ithibati.md): Passkey authentication: the account row, its WebAuthn credentials, its recovery codes and the
sessions it is signed in with.

- Identity
  - [Ithibati.Identity.Grant](Ithibati.Identity.Grant.md): The credential half of creating an account, as a fragment the application composes into its own
transaction.
  - [Ithibati.Identity.Instance](Ithibati.Identity.Instance.md): Setting a deployment up: the first account, and the record that it happened.
  - [Ithibati.Identity.Invitations](Ithibati.Identity.Invitations.md): Opening an invitation, and accepting one.
  - [Ithibati.Identity.Passkeys](Ithibati.Identity.Passkeys.md): The WebAuthn ceremony, both halves: enrolling a browser's credential as an account's passkey, and
proving possession of one afterwards. It also covers what an account can do with the credentials
it holds: list them, rename one, revoke one.
  - [Ithibati.Identity.RecoveryCodes](Ithibati.Identity.RecoveryCodes.md): Single-use codes, for the day a passkey is gone.
  - [Ithibati.Identity.Sessions](Ithibati.Identity.Sessions.md): The revocable half of being signed in: what an account is issued once it has proved who it is.

- Schemas
  - [Ithibati.Schema.Identifier](Ithibati.Schema.Identifier.md): What an identifier is, for every schema Ithibati injects one into.
  - [Ithibati.Schema.Invitation](Ithibati.Schema.Invitation.md): What Ithibati puts on an invitation, and what an invitation owes Ithibati.
  - [Ithibati.Schema.User](Ithibati.Schema.User.md): What Ithibati adds to the account schema an application already owns.

- Phoenix
  - [Ithibati.Web.Gate](Ithibati.Web.Gate.md): Who is signed in, on a connection and in a LiveView, from one place.
  - [Ithibati.Web.Handler](Ithibati.Web.Handler.md): The callbacks an application implements, so the ceremony can ask it what to decide.
  - [Ithibati.Web.Hooks](Ithibati.Web.Hooks.md): The colocated route for Ithibati's JavaScript.
  - [Ithibati.Web.PasskeyController](Ithibati.Web.PasskeyController.md): The two ceremonies and the recovery route, five actions, as JSON.
  - [Ithibati.Web.Router](Ithibati.Web.Router.md): The five routes the ceremonies need, wired in one call.

- Rows this library owns
  - [Ithibati.Bootstrap](Ithibati.Bootstrap.md): The record that an instance has been set up, and by whom.
  - [Ithibati.RecoveryCode](Ithibati.RecoveryCode.md): One single-use code, stored as a hash, for the day a passkey is gone.
  - [Ithibati.Session](Ithibati.Session.md): One signed-in session. The cookie carries the secret and this row carries only its sha256, so
the table is not a set of usable sessions. The row is what makes a sign-in revocable: deleting
it ends the session for new requests and new mounts.

  - [Ithibati.UserKey](Ithibati.UserKey.md): One WebAuthn credential: the public half of a passkey, and the label a person recognises it by.

- Setup and tooling
  - [Ithibati.Catalogue](Ithibati.Catalogue.md): What Postgres says about the tables an application owns.
  - [Ithibati.Config](Ithibati.Config.md): The handful of things the application decides and tells Ithibati.
  - [Ithibati.Doctor](Ithibati.Doctor.md): What an application has to get right before Ithibati works, asked one question at a time.
  - [Ithibati.Migration](Ithibati.Migration.md): Creates Ithibati's tables, as code rather than as a file to copy.

- Credo checks
  - [Ithibati.Credo.NoDirectTableAccess](Ithibati.Credo.NoDirectTableAccess.md): ## Basics
  - [Ithibati.Credo.NoInternalCalls](Ithibati.Credo.NoInternalCalls.md): ## Basics
  - [Ithibati.Credo.NoWaxConfiguration](Ithibati.Credo.NoWaxConfiguration.md): ## Basics

## Mix Tasks

- Setup and tooling
  - [mix ithibati.doctor](Mix.Tasks.Ithibati.Doctor.md): Prints what `Ithibati.Doctor` answers, and exits non-zero when something is wrong.

