* Add `nimble_totp`, `cloak` and `cloak_ecto` to project dependencies
* Setup Cloak-based secrets vault and create a dedicated Ecto type
* Add `totp_enabled|secret|last_used_at` fields to `User` schema
* Implement schema and stateless logic for TOTP recovery codes
* Implement core logic of TOTP auth
* Fix typos and improve style of doc comments
Co-authored-by: hq1 <hq@mtod.org>
* Fix moduledoc alignment
* Use more compact conditional expression
Co-authored-by: hq1 <hq@mtod.org>
* Disambiguate `I` as `7` when generating recovery codes (h/t @hq1)
* Fix a typo in runtime config error message
---------
Co-authored-by: hq1 <hq@mtod.org>