8 Commits

  1. 23
      CHANGELOG.md
  2. 3
      assets/css/_cards.scss
  3. 80
      assets/static/docs/.build
  4. 121
      assets/static/docs/404.html
  5. 369
      assets/static/docs/Mirage.Accounts.User.html
  6. 250
      assets/static/docs/Mirage.Accounts.UserNotifier.html
  7. 381
      assets/static/docs/Mirage.Accounts.UserToken.html
  8. 922
      assets/static/docs/Mirage.Accounts.html
  9. 126
      assets/static/docs/Mirage.Links.Link.html
  10. 126
      assets/static/docs/Mirage.Links.LinkTopic.html
  11. 479
      assets/static/docs/Mirage.Links.html
  12. 126
      assets/static/docs/Mirage.Lists.List.html
  13. 451
      assets/static/docs/Mirage.Lists.html
  14. 244
      assets/static/docs/Mirage.Markdown.html
  15. 126
      assets/static/docs/Mirage.Notes.Note.html
  16. 126
      assets/static/docs/Mirage.Notes.NoteLink.html
  17. 126
      assets/static/docs/Mirage.Notes.NoteNote.html
  18. 126
      assets/static/docs/Mirage.Notes.NoteTopic.html
  19. 720
      assets/static/docs/Mirage.Notes.html
  20. 215
      assets/static/docs/Mirage.Release.html
  21. 1532
      assets/static/docs/Mirage.Repo.html
  22. 126
      assets/static/docs/Mirage.Settings.Setting.html
  23. 461
      assets/static/docs/Mirage.Settings.html
  24. 188
      assets/static/docs/Mirage.Slug.html
  25. 348
      assets/static/docs/Mirage.Tags.html
  26. 126
      assets/static/docs/Mirage.Topics.Topic.html
  27. 418
      assets/static/docs/Mirage.Topics.html
  28. BIN
      assets/static/docs/Mirage.epub
  29. 132
      assets/static/docs/Mirage.html
  30. 188
      assets/static/docs/MirageWeb.BlogLive.html
  31. 886
      assets/static/docs/MirageWeb.Endpoint.html
  32. 223
      assets/static/docs/MirageWeb.ErrorHelpers.html
  33. 263
      assets/static/docs/MirageWeb.ErrorView.html
  34. 897
      assets/static/docs/MirageWeb.Gettext.html
  35. 188
      assets/static/docs/MirageWeb.GotoAnythingLive.html
  36. 188
      assets/static/docs/MirageWeb.HomeLive.html
  37. 188
      assets/static/docs/MirageWeb.InboxLive.Index.html
  38. 188
      assets/static/docs/MirageWeb.InboxLive.ItemComponent.html
  39. 350
      assets/static/docs/MirageWeb.LayoutView.html
  40. 188
      assets/static/docs/MirageWeb.LinkLive.FormComponent.html
  41. 188
      assets/static/docs/MirageWeb.LinkLive.Index.html
  42. 188
      assets/static/docs/MirageWeb.LinkLive.Show.html
  43. 188
      assets/static/docs/MirageWeb.ListLive.FormComponent.html
  44. 188
      assets/static/docs/MirageWeb.ListLive.Index.html
  45. 188
      assets/static/docs/MirageWeb.ListLive.Show.html
  46. 226
      assets/static/docs/MirageWeb.LiveHelpers.html
  47. 188
      assets/static/docs/MirageWeb.ModalComponent.html
  48. 188
      assets/static/docs/MirageWeb.NoteLive.FormComponent.html
  49. 188
      assets/static/docs/MirageWeb.NoteLive.Index.html
  50. 188
      assets/static/docs/MirageWeb.NoteLive.Show.html
  51. 2868
      assets/static/docs/MirageWeb.Router.Helpers.html
  52. 308
      assets/static/docs/MirageWeb.Router.html
  53. 273
      assets/static/docs/MirageWeb.SettingController.html
  54. 263
      assets/static/docs/MirageWeb.SettingView.html
  55. 263
      assets/static/docs/MirageWeb.SharedView.html
  56. 246
      assets/static/docs/MirageWeb.Telemetry.html
  57. 360
      assets/static/docs/MirageWeb.TopicController.html
  58. 263
      assets/static/docs/MirageWeb.TopicView.html
  59. 322
      assets/static/docs/MirageWeb.UserAuth.html
  60. 244
      assets/static/docs/MirageWeb.UserConfirmationController.html
  61. 263
      assets/static/docs/MirageWeb.UserConfirmationView.html
  62. 215
      assets/static/docs/MirageWeb.UserRegistrationController.html
  63. 263
      assets/static/docs/MirageWeb.UserRegistrationView.html
  64. 273
      assets/static/docs/MirageWeb.UserResetPasswordController.html
  65. 263
      assets/static/docs/MirageWeb.UserResetPasswordView.html
  66. 244
      assets/static/docs/MirageWeb.UserSessionController.html
  67. 263
      assets/static/docs/MirageWeb.UserSessionView.html
  68. 244
      assets/static/docs/MirageWeb.UserSettingsController.html
  69. 263
      assets/static/docs/MirageWeb.UserSettingsView.html
  70. 126
      assets/static/docs/MirageWeb.UserSocket.html
  71. 263
      assets/static/docs/MirageWeb.UserView.html
  72. 374
      assets/static/docs/MirageWeb.html
  73. 620
      assets/static/docs/api-reference.html
  74. 2
      assets/static/docs/dist/app-60a0c9f10e9e52eae31f.js
  75. 3
      assets/static/docs/dist/elixir-9f91ebe876dc01d67920.css
  76. BIN
      assets/static/docs/dist/html/fonts/icomoon.eot
  77. 19
      assets/static/docs/dist/html/fonts/icomoon.svg
  78. BIN
      assets/static/docs/dist/html/fonts/icomoon.ttf
  79. BIN
      assets/static/docs/dist/html/fonts/icomoon.woff
  80. 1
      assets/static/docs/dist/search_items-25ed0032d3.js
  81. 1
      assets/static/docs/dist/sidebar_items-86ebe4f0ec.js
  82. 10
      assets/static/docs/index.html
  83. 114
      assets/static/docs/readme.html
  84. 118
      assets/static/docs/search.html
  85. 21
      lib/mirage/links.ex
  86. 21
      lib/mirage/links/link.ex
  87. 2
      lib/mirage/lists.ex
  88. 2
      lib/mirage_web/endpoint.ex
  89. 4
      lib/mirage_web/live/blog_live.ex
  90. 23
      lib/mirage_web/live/goto_anything_live.ex
  91. 7
      lib/mirage_web/live/list_live/show.ex
  92. 8
      lib/mirage_web/live/note_live/show.ex
  93. 30
      mix.exs
  94. 5
      mix.lock
  95. 7
      priv/repo/migrations/20210313231739_make_link_url_unique.exs
  96. 2
      test/mirage/lists_test.exs
  97. 2
      test/mirage/notes_test.exs
  98. 2
      test/mirage_web/controllers/setting_controller_test.exs

23
CHANGELOG.md

@ -5,6 +5,29 @@ See [Conventional Commits](Https://conventionalcommits.org) for commit guideline
<!-- changelog -->
## [v0.71.0](https://git.inhji.de/inhji/mirage/compare/v0.70.1...v0.71.0) (2021-03-14)
### Chores:
* clean up
### Features:
* allow docs in static directory
* make links unique
* add credo and ex_doc, include static documentation
### Bug Fixes:
* close popup before redirecting
* card styles improved
## [v0.70.1](https://git.inhji.de/inhji/mirage/compare/v0.70.0...v0.70.1) (2021-03-13)

3
assets/css/_cards.scss

@ -8,7 +8,6 @@
.card {
flex: 1;
flex-basis: 100%;
border-width: 1px;
border-style: solid;
@ -33,8 +32,10 @@
&.list {
gap: 0;
border-radius: 3px;
.card {
flex-basis: 100%;
border-radius: 0;
border-bottom: none;

80
assets/static/docs/.build

@ -0,0 +1,80 @@
404.html
Mirage.Accounts.User.html
Mirage.Accounts.UserNotifier.html
Mirage.Accounts.UserToken.html
Mirage.Accounts.html
Mirage.Links.Link.html
Mirage.Links.LinkTopic.html
Mirage.Links.html
Mirage.Lists.List.html
Mirage.Lists.html
Mirage.Markdown.html
Mirage.Notes.Note.html
Mirage.Notes.NoteLink.html
Mirage.Notes.NoteNote.html
Mirage.Notes.NoteTopic.html
Mirage.Notes.html
Mirage.Release.html
Mirage.Repo.html
Mirage.Settings.Setting.html
Mirage.Settings.html
Mirage.Slug.html
Mirage.Tags.html
Mirage.Topics.Topic.html
Mirage.Topics.html
Mirage.html
MirageWeb.BlogLive.html
MirageWeb.Endpoint.html
MirageWeb.ErrorHelpers.html
MirageWeb.ErrorView.html
MirageWeb.Gettext.html
MirageWeb.GotoAnythingLive.html
MirageWeb.HomeLive.html
MirageWeb.InboxLive.Index.html
MirageWeb.InboxLive.ItemComponent.html
MirageWeb.LayoutView.html
MirageWeb.LinkLive.FormComponent.html
MirageWeb.LinkLive.Index.html
MirageWeb.LinkLive.Show.html
MirageWeb.ListLive.FormComponent.html
MirageWeb.ListLive.Index.html
MirageWeb.ListLive.Show.html
MirageWeb.LiveHelpers.html
MirageWeb.ModalComponent.html
MirageWeb.NoteLive.FormComponent.html
MirageWeb.NoteLive.Index.html
MirageWeb.NoteLive.Show.html
MirageWeb.Router.Helpers.html
MirageWeb.Router.html
MirageWeb.SettingController.html
MirageWeb.SettingView.html
MirageWeb.SharedView.html
MirageWeb.Telemetry.html
MirageWeb.TopicController.html
MirageWeb.TopicView.html
MirageWeb.UserAuth.html
MirageWeb.UserConfirmationController.html
MirageWeb.UserConfirmationView.html
MirageWeb.UserRegistrationController.html
MirageWeb.UserRegistrationView.html
MirageWeb.UserResetPasswordController.html
MirageWeb.UserResetPasswordView.html
MirageWeb.UserSessionController.html
MirageWeb.UserSessionView.html
MirageWeb.UserSettingsController.html
MirageWeb.UserSettingsView.html
MirageWeb.UserSocket.html
MirageWeb.UserView.html
MirageWeb.html
api-reference.html
dist/app-60a0c9f10e9e52eae31f.js
dist/elixir-9f91ebe876dc01d67920.css
dist/html/fonts/icomoon.eot
dist/html/fonts/icomoon.svg
dist/html/fonts/icomoon.ttf
dist/html/fonts/icomoon.woff
dist/search_items-25ed0032d3.js
dist/sidebar_items-86ebe4f0ec.js
index.html
readme.html
search.html

121
assets/static/docs/404.html

@ -0,0 +1,121 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="ExDoc v0.23.0">
<meta name="project" content="Mirage v0.70.1">
<meta name="author" content="Inhji">
<title>404 — Mirage v0.70.1</title>
<link rel="stylesheet" href="dist/elixir-9f91ebe876dc01d67920.css" />
<script src="dist/sidebar_items-86ebe4f0ec.js"></script>
<script src="docs_config.js"></script>
<script async src="dist/app-60a0c9f10e9e52eae31f.js"></script>
</head>
<body data-type="extras">
<script>try { if(localStorage.getItem('night-mode') === 'true') document.body.className += ' night-mode'; } catch (e) { }</script>
<div class="main">
<button class="sidebar-button sidebar-toggle">
<span class="icon-menu" title="Collapse/expand sidebar"></span>
</button>
<section class="sidebar">
<form class="sidebar-search" action="search.html">
<button type="submit" class="search-button" aria-label="Submit Search">
<span class="icon-search" aria-hidden="true" title="Submit search"></span>
</button>
<button type="button" tabindex="-1" class="search-close-button" aria-label="Cancel Search">
<span class="icon-cross" aria-hidden="true" title="Cancel search"></span>
</button>
<label class="search-label">
<input name="q" type="text" id="search-list" class="search-input" placeholder="Search..." aria-label="Input your search terms" autocomplete="off" />
</label>
</form>
<div class="autocomplete">
<div class="autocomplete-results">
</div>
</div>
<div class="sidebar-header">
<div class="sidebar-projectDetails">
<a href="https://git.inhji.de/inhji/mirage" class="sidebar-projectName">
Mirage
</a>
<strong class="sidebar-projectVersion">
v0.70.1
</strong>
</div>
</div>
<ul class="sidebar-listNav">
<li><a id="extras-list" href="#full-list">Pages</a></li>
<li><a id="modules-list" href="#full-list">Modules</a></li>
</ul>
<div class="gradient"></div>
<ul id="full-list" class="sidebar-fullList"></ul>
</section>
<section class="content">
<div class="content-outer">
<div id="content" class="content-inner">
<h2>Page not found</h2>
<p>Sorry, but the page you were trying to get to, does not exist. You
may want to try searching this site using the sidebar
or using our <a href="api-reference.html">API Reference</a> page
to find what you were looking for.</p>
<footer class="footer">
<p>
<span class="line">
Built using
<a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener">ExDoc</a> (v0.23.0) for the
<a href="https://elixir-lang.org" title="Elixir" target="_blank">Elixir programming language</a>.
</span>
<span class="line">
Designed by
<a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire">Friedel Ziegelmayer</a>.
</span>
</p>
<p>
<a href="api-reference.html" title="API reference" class="line footer-button">API Reference</a>
<button class="line footer-button display-shortcuts-help">
Display keyboard shortcuts
</button>
<button class="line footer-button night-mode-toggle">
Toggle night mode
</button>
<button class="line footer-button display-quick-switch">
Go to a HexDocs package
</button>
<button class="line footer-button tooltips-toggle">
<span class="tooltips-option-disable">Disable tooltips</span>
<span class="tooltips-option-enable">Enable tooltips</span>
</button>
</p>
</footer>
</div>
</div>
</section>
</div>
</body>
</html>

369
assets/static/docs/Mirage.Accounts.User.html

@ -0,0 +1,369 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="ExDoc v0.23.0">
<meta name="project" content="Mirage v0.70.1">
<meta name="author" content="Inhji">
<title>Mirage.Accounts.User — Mirage v0.70.1</title>
<link rel="stylesheet" href="dist/elixir-9f91ebe876dc01d67920.css" />
<script src="dist/sidebar_items-86ebe4f0ec.js"></script>
<script src="docs_config.js"></script>
<script async src="dist/app-60a0c9f10e9e52eae31f.js"></script>
</head>
<body data-type="modules">
<script>try { if(localStorage.getItem('night-mode') === 'true') document.body.className += ' night-mode'; } catch (e) { }</script>
<div class="main">
<button class="sidebar-button sidebar-toggle">
<span class="icon-menu" title="Collapse/expand sidebar"></span>
</button>
<section class="sidebar">
<form class="sidebar-search" action="search.html">
<button type="submit" class="search-button" aria-label="Submit Search">
<span class="icon-search" aria-hidden="true" title="Submit search"></span>
</button>
<button type="button" tabindex="-1" class="search-close-button" aria-label="Cancel Search">
<span class="icon-cross" aria-hidden="true" title="Cancel search"></span>
</button>
<label class="search-label">
<input name="q" type="text" id="search-list" class="search-input" placeholder="Search..." aria-label="Input your search terms" autocomplete="off" />
</label>
</form>
<div class="autocomplete">
<div class="autocomplete-results">
</div>
</div>
<div class="sidebar-header">
<div class="sidebar-projectDetails">
<a href="https://git.inhji.de/inhji/mirage" class="sidebar-projectName">
Mirage
</a>
<strong class="sidebar-projectVersion">
v0.70.1
</strong>
</div>
</div>
<ul class="sidebar-listNav">
<li><a id="extras-list" href="#full-list">Pages</a></li>
<li><a id="modules-list" href="#full-list">Modules</a></li>
</ul>
<div class="gradient"></div>
<ul id="full-list" class="sidebar-fullList"></ul>
</section>
<section class="content">
<div class="content-outer">
<div id="content" class="content-inner">
<h1>
Mirage.Accounts.User <small class="app-vsn">(Mirage v0.70.1)</small>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user.ex#L1" title="View Source" class="view-source" rel="help">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</h1>
<section id="summary" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#summary">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this section</span>
</a>
Summary
</h1>
<div class="summary-functions summary">
<h2>
<a href="#functions">Functions</a>
</h2>
<div class="summary-row">
<div class="summary-signature">
<a href="#confirm_changeset/1">confirm_changeset(user)</a>
</div>
<div class="summary-synopsis"><p>Confirms the account by setting <code class="inline">confirmed_at</code>.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#email_changeset/2">email_changeset(user, attrs)</a>
</div>
<div class="summary-synopsis"><p>A user changeset for changing the email.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#password_changeset/3">password_changeset(user, attrs, opts \\ [])</a>
</div>
<div class="summary-synopsis"><p>A user changeset for changing the password.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#registration_changeset/3">registration_changeset(user, attrs, opts \\ [])</a>
</div>
<div class="summary-synopsis"><p>A user changeset for registration.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#valid_password?/2">valid_password?(arg1, password)</a>
</div>
<div class="summary-synopsis"><p>Verifies the password.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#validate_current_password/2">validate_current_password(changeset, password)</a>
</div>
<div class="summary-synopsis"><p>Validates the current password otherwise adds an error to the changeset.</p></div>
</div>
</div>
</section>
<section id="functions" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#functions">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this section</span>
</a>
Functions
</h1>
<div class="functions-list">
<section class="detail" id="confirm_changeset/1">
<div class="detail-header">
<a href="#confirm_changeset/1" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">confirm_changeset(user)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user.ex#L108" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Confirms the account by setting <code class="inline">confirmed_at</code>.</p>
</section>
</section>
<section class="detail" id="email_changeset/2">
<div class="detail-header">
<a href="#email_changeset/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">email_changeset(user, attrs)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user.ex#L76" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>A user changeset for changing the email.</p><p>It requires the email to change otherwise an error is added.</p>
</section>
</section>
<section class="detail" id="password_changeset/3">
<span id="password_changeset/2"></span>
<div class="detail-header">
<a href="#password_changeset/3" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">password_changeset(user, attrs, opts \\ [])</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user.ex#L98" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>A user changeset for changing the password.</p><h2 id="password_changeset/3-options" class="section-heading">
<a href="#password_changeset/3-options" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
Options
</h2>
<ul><li><code class="inline">:hash_password</code> - Hashes the password so it can be stored securely
in the database and ensures the password field is cleared to prevent
leaks in the logs. If password hashing is not needed and clearing the
password field is not desired (like when using this changeset for
validations on a LiveView form), this option can be set to <code class="inline">false</code>.
Defaults to <code class="inline">true</code>.</li></ul>
</section>
</section>
<section class="detail" id="registration_changeset/3">
<span id="registration_changeset/2"></span>
<div class="detail-header">
<a href="#registration_changeset/3" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">registration_changeset(user, attrs, opts \\ [])</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user.ex#L32" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>A user changeset for registration.</p><p>It is important to validate the length of both email and password.
Otherwise databases may truncate the email without warnings, which
could lead to unpredictable or insecure behaviour. Long passwords may
also be very expensive to hash for certain algorithms.</p><h2 id="registration_changeset/3-options" class="section-heading">
<a href="#registration_changeset/3-options" class="hover-link"><span class="icon-link" aria-hidden="true"></span></a>
Options
</h2>
<ul><li><code class="inline">:hash_password</code> - Hashes the password so it can be stored securely
in the database and ensures the password field is cleared to prevent
leaks in the logs. If password hashing is not needed and clearing the
password field is not desired (like when using this changeset for
validations on a LiveView form), this option can be set to <code class="inline">false</code>.
Defaults to <code class="inline">true</code>.</li></ul>
</section>
</section>
<section class="detail" id="valid_password?/2">
<div class="detail-header">
<a href="#valid_password?/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">valid_password?(arg1, password)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user.ex#L119" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Verifies the password.</p><p>If there is no user or the user doesn't have a password, we call
<a href="https://hexdocs.pm/bcrypt_elixir/2.3.0/Bcrypt.html#no_user_verify/0"><code class="inline">Bcrypt.no_user_verify/0</code></a> to avoid timing attacks.</p>
</section>
</section>
<section class="detail" id="validate_current_password/2">
<div class="detail-header">
<a href="#validate_current_password/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">validate_current_password(changeset, password)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user.ex#L132" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Validates the current password otherwise adds an error to the changeset.</p>
</section>
</section>
</div>
</section>
<footer class="footer">
<p>
<span class="line">
Built using
<a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener">ExDoc</a> (v0.23.0) for the
<a href="https://elixir-lang.org" title="Elixir" target="_blank">Elixir programming language</a>.
</span>
<span class="line">
Designed by
<a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire">Friedel Ziegelmayer</a>.
</span>
</p>
<p>
<a href="api-reference.html" title="API reference" class="line footer-button">API Reference</a>
<button class="line footer-button display-shortcuts-help">
Display keyboard shortcuts
</button>
<button class="line footer-button night-mode-toggle">
Toggle night mode
</button>
<button class="line footer-button display-quick-switch">
Go to a HexDocs package
</button>
<button class="line footer-button tooltips-toggle">
<span class="tooltips-option-disable">Disable tooltips</span>
<span class="tooltips-option-enable">Enable tooltips</span>
</button>
</p>
</footer>
</div>
</div>
</section>
</div>
</body>
</html>

250
assets/static/docs/Mirage.Accounts.UserNotifier.html

@ -0,0 +1,250 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="ExDoc v0.23.0">
<meta name="project" content="Mirage v0.70.1">
<meta name="author" content="Inhji">
<title>Mirage.Accounts.UserNotifier — Mirage v0.70.1</title>
<link rel="stylesheet" href="dist/elixir-9f91ebe876dc01d67920.css" />
<script src="dist/sidebar_items-86ebe4f0ec.js"></script>
<script src="docs_config.js"></script>
<script async src="dist/app-60a0c9f10e9e52eae31f.js"></script>
</head>
<body data-type="modules">
<script>try { if(localStorage.getItem('night-mode') === 'true') document.body.className += ' night-mode'; } catch (e) { }</script>
<div class="main">
<button class="sidebar-button sidebar-toggle">
<span class="icon-menu" title="Collapse/expand sidebar"></span>
</button>
<section class="sidebar">
<form class="sidebar-search" action="search.html">
<button type="submit" class="search-button" aria-label="Submit Search">
<span class="icon-search" aria-hidden="true" title="Submit search"></span>
</button>
<button type="button" tabindex="-1" class="search-close-button" aria-label="Cancel Search">
<span class="icon-cross" aria-hidden="true" title="Cancel search"></span>
</button>
<label class="search-label">
<input name="q" type="text" id="search-list" class="search-input" placeholder="Search..." aria-label="Input your search terms" autocomplete="off" />
</label>
</form>
<div class="autocomplete">
<div class="autocomplete-results">
</div>
</div>
<div class="sidebar-header">
<div class="sidebar-projectDetails">
<a href="https://git.inhji.de/inhji/mirage" class="sidebar-projectName">
Mirage
</a>
<strong class="sidebar-projectVersion">
v0.70.1
</strong>
</div>
</div>
<ul class="sidebar-listNav">
<li><a id="extras-list" href="#full-list">Pages</a></li>
<li><a id="modules-list" href="#full-list">Modules</a></li>
</ul>
<div class="gradient"></div>
<ul id="full-list" class="sidebar-fullList"></ul>
</section>
<section class="content">
<div class="content-outer">
<div id="content" class="content-inner">
<h1>
Mirage.Accounts.UserNotifier <small class="app-vsn">(Mirage v0.70.1)</small>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_notifier.ex#L1" title="View Source" class="view-source" rel="help">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</h1>
<section id="summary" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#summary">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this section</span>
</a>
Summary
</h1>
<div class="summary-functions summary">
<h2>
<a href="#functions">Functions</a>
</h2>
<div class="summary-row">
<div class="summary-signature">
<a href="#deliver_confirmation_instructions/2">deliver_confirmation_instructions(user, url)</a>
</div>
<div class="summary-synopsis"><p>Deliver instructions to confirm account.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#deliver_reset_password_instructions/2">deliver_reset_password_instructions(user, url)</a>
</div>
<div class="summary-synopsis"><p>Deliver instructions to reset a user password.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#deliver_update_email_instructions/2">deliver_update_email_instructions(user, url)</a>
</div>
<div class="summary-synopsis"><p>Deliver instructions to update a user email.</p></div>
</div>
</div>
</section>
<section id="functions" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#functions">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this section</span>
</a>
Functions
</h1>
<div class="functions-list">
<section class="detail" id="deliver_confirmation_instructions/2">
<div class="detail-header">
<a href="#deliver_confirmation_instructions/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">deliver_confirmation_instructions(user, url)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_notifier.ex#L17" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Deliver instructions to confirm account.</p>
</section>
</section>
<section class="detail" id="deliver_reset_password_instructions/2">
<div class="detail-header">
<a href="#deliver_reset_password_instructions/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">deliver_reset_password_instructions(user, url)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_notifier.ex#L37" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Deliver instructions to reset a user password.</p>
</section>
</section>
<section class="detail" id="deliver_update_email_instructions/2">
<div class="detail-header">
<a href="#deliver_update_email_instructions/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">deliver_update_email_instructions(user, url)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_notifier.ex#L57" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Deliver instructions to update a user email.</p>
</section>
</section>
</div>
</section>
<footer class="footer">
<p>
<span class="line">
Built using
<a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener">ExDoc</a> (v0.23.0) for the
<a href="https://elixir-lang.org" title="Elixir" target="_blank">Elixir programming language</a>.
</span>
<span class="line">
Designed by
<a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire">Friedel Ziegelmayer</a>.
</span>
</p>
<p>
<a href="api-reference.html" title="API reference" class="line footer-button">API Reference</a>
<button class="line footer-button display-shortcuts-help">
Display keyboard shortcuts
</button>
<button class="line footer-button night-mode-toggle">
Toggle night mode
</button>
<button class="line footer-button display-quick-switch">
Go to a HexDocs package
</button>
<button class="line footer-button tooltips-toggle">
<span class="tooltips-option-disable">Disable tooltips</span>
<span class="tooltips-option-enable">Enable tooltips</span>
</button>
</p>
</footer>
</div>
</div>
</section>
</div>
</body>
</html>

381
assets/static/docs/Mirage.Accounts.UserToken.html

@ -0,0 +1,381 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="ExDoc v0.23.0">
<meta name="project" content="Mirage v0.70.1">
<meta name="author" content="Inhji">
<title>Mirage.Accounts.UserToken — Mirage v0.70.1</title>
<link rel="stylesheet" href="dist/elixir-9f91ebe876dc01d67920.css" />
<script src="dist/sidebar_items-86ebe4f0ec.js"></script>
<script src="docs_config.js"></script>
<script async src="dist/app-60a0c9f10e9e52eae31f.js"></script>
</head>
<body data-type="modules">
<script>try { if(localStorage.getItem('night-mode') === 'true') document.body.className += ' night-mode'; } catch (e) { }</script>
<div class="main">
<button class="sidebar-button sidebar-toggle">
<span class="icon-menu" title="Collapse/expand sidebar"></span>
</button>
<section class="sidebar">
<form class="sidebar-search" action="search.html">
<button type="submit" class="search-button" aria-label="Submit Search">
<span class="icon-search" aria-hidden="true" title="Submit search"></span>
</button>
<button type="button" tabindex="-1" class="search-close-button" aria-label="Cancel Search">
<span class="icon-cross" aria-hidden="true" title="Cancel search"></span>
</button>
<label class="search-label">
<input name="q" type="text" id="search-list" class="search-input" placeholder="Search..." aria-label="Input your search terms" autocomplete="off" />
</label>
</form>
<div class="autocomplete">
<div class="autocomplete-results">
</div>
</div>
<div class="sidebar-header">
<div class="sidebar-projectDetails">
<a href="https://git.inhji.de/inhji/mirage" class="sidebar-projectName">
Mirage
</a>
<strong class="sidebar-projectVersion">
v0.70.1
</strong>
</div>
</div>
<ul class="sidebar-listNav">
<li><a id="extras-list" href="#full-list">Pages</a></li>
<li><a id="modules-list" href="#full-list">Modules</a></li>
</ul>
<div class="gradient"></div>
<ul id="full-list" class="sidebar-fullList"></ul>
</section>
<section class="content">
<div class="content-outer">
<div id="content" class="content-inner">
<h1>
Mirage.Accounts.UserToken <small class="app-vsn">(Mirage v0.70.1)</small>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_token.ex#L1" title="View Source" class="view-source" rel="help">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</h1>
<section id="summary" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#summary">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this section</span>
</a>
Summary
</h1>
<div class="summary-functions summary">
<h2>
<a href="#functions">Functions</a>
</h2>
<div class="summary-row">
<div class="summary-signature">
<a href="#build_email_token/2">build_email_token(user, context)</a>
</div>
<div class="summary-synopsis"><p>Builds a token with a hashed counter part.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#build_session_token/1">build_session_token(user)</a>
</div>
<div class="summary-synopsis"><p>Generates a token that will be stored in a signed place,
such as session or cookie. As they are signed, those
tokens do not need to be hashed.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#token_and_context_query/2">token_and_context_query(token, context)</a>
</div>
<div class="summary-synopsis"><p>Returns the given token with the given context.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#user_and_contexts_query/2">user_and_contexts_query(user, contexts)</a>
</div>
<div class="summary-synopsis"><p>Gets all tokens for the given user for the given contexts.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#verify_change_email_token_query/2">verify_change_email_token_query(token, context)</a>
</div>
<div class="summary-synopsis"><p>Checks if the token is valid and returns its underlying lookup query.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#verify_email_token_query/2">verify_email_token_query(token, context)</a>
</div>
<div class="summary-synopsis"><p>Checks if the token is valid and returns its underlying lookup query.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#verify_session_token_query/1">verify_session_token_query(token)</a>
</div>
<div class="summary-synopsis"><p>Checks if the token is valid and returns its underlying lookup query.</p></div>
</div>
</div>
</section>
<section id="functions" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#functions">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this section</span>
</a>
Functions
</h1>
<div class="functions-list">
<section class="detail" id="build_email_token/2">
<div class="detail-header">
<a href="#build_email_token/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">build_email_token(user, context)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_token.ex#L57" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Builds a token with a hashed counter part.</p><p>The non-hashed token is sent to the user email while the
hashed part is stored in the database, to avoid reconstruction.
The token is valid for a week as long as users don't change
their email.</p>
</section>
</section>
<section class="detail" id="build_session_token/1">
<div class="detail-header">
<a href="#build_session_token/1" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">build_session_token(user)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_token.ex#L29" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Generates a token that will be stored in a signed place,
such as session or cookie. As they are signed, those
tokens do not need to be hashed.</p>
</section>
</section>
<section class="detail" id="token_and_context_query/2">
<div class="detail-header">
<a href="#token_and_context_query/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">token_and_context_query(token, context)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_token.ex#L125" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Returns the given token with the given context.</p>
</section>
</section>
<section class="detail" id="user_and_contexts_query/2">
<div class="detail-header">
<a href="#user_and_contexts_query/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">user_and_contexts_query(user, contexts)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_token.ex#L132" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Gets all tokens for the given user for the given contexts.</p>
</section>
</section>
<section class="detail" id="verify_change_email_token_query/2">
<div class="detail-header">
<a href="#verify_change_email_token_query/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">verify_change_email_token_query(token, context)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_token.ex#L106" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Checks if the token is valid and returns its underlying lookup query.</p><p>The query returns the user token record.</p>
</section>
</section>
<section class="detail" id="verify_email_token_query/2">
<div class="detail-header">
<a href="#verify_email_token_query/2" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">verify_email_token_query(token, context)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_token.ex#L79" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Checks if the token is valid and returns its underlying lookup query.</p><p>The query returns the user found by the token.</p>
</section>
</section>
<section class="detail" id="verify_session_token_query/1">
<div class="detail-header">
<a href="#verify_session_token_query/1" class="detail-link" title="Link to this function">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature">verify_session_token_query(token)</h1>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts/user_token.ex#L39" class="view-source" rel="help" title="View Source">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
<p>Checks if the token is valid and returns its underlying lookup query.</p><p>The query returns the user found by the token.</p>
</section>
</section>
</div>
</section>
<footer class="footer">
<p>
<span class="line">
Built using
<a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener">ExDoc</a> (v0.23.0) for the
<a href="https://elixir-lang.org" title="Elixir" target="_blank">Elixir programming language</a>.
</span>
<span class="line">
Designed by
<a href="https://twitter.com/dignifiedquire" target="_blank" rel="noopener" title="@dignifiedquire">Friedel Ziegelmayer</a>.
</span>
</p>
<p>
<a href="api-reference.html" title="API reference" class="line footer-button">API Reference</a>
<button class="line footer-button display-shortcuts-help">
Display keyboard shortcuts
</button>
<button class="line footer-button night-mode-toggle">
Toggle night mode
</button>
<button class="line footer-button display-quick-switch">
Go to a HexDocs package
</button>
<button class="line footer-button tooltips-toggle">
<span class="tooltips-option-disable">Disable tooltips</span>
<span class="tooltips-option-enable">Enable tooltips</span>
</button>
</p>
</footer>
</div>
</div>
</section>
</div>
</body>
</html>

922
assets/static/docs/Mirage.Accounts.html

@ -0,0 +1,922 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="ExDoc v0.23.0">
<meta name="project" content="Mirage v0.70.1">
<meta name="author" content="Inhji">
<title>Mirage.Accounts — Mirage v0.70.1</title>
<link rel="stylesheet" href="dist/elixir-9f91ebe876dc01d67920.css" />
<script src="dist/sidebar_items-86ebe4f0ec.js"></script>
<script src="docs_config.js"></script>
<script async src="dist/app-60a0c9f10e9e52eae31f.js"></script>
</head>
<body data-type="modules">
<script>try { if(localStorage.getItem('night-mode') === 'true') document.body.className += ' night-mode'; } catch (e) { }</script>
<div class="main">
<button class="sidebar-button sidebar-toggle">
<span class="icon-menu" title="Collapse/expand sidebar"></span>
</button>
<section class="sidebar">
<form class="sidebar-search" action="search.html">
<button type="submit" class="search-button" aria-label="Submit Search">
<span class="icon-search" aria-hidden="true" title="Submit search"></span>
</button>
<button type="button" tabindex="-1" class="search-close-button" aria-label="Cancel Search">
<span class="icon-cross" aria-hidden="true" title="Cancel search"></span>
</button>
<label class="search-label">
<input name="q" type="text" id="search-list" class="search-input" placeholder="Search..." aria-label="Input your search terms" autocomplete="off" />
</label>
</form>
<div class="autocomplete">
<div class="autocomplete-results">
</div>
</div>
<div class="sidebar-header">
<div class="sidebar-projectDetails">
<a href="https://git.inhji.de/inhji/mirage" class="sidebar-projectName">
Mirage
</a>
<strong class="sidebar-projectVersion">
v0.70.1
</strong>
</div>
</div>
<ul class="sidebar-listNav">
<li><a id="extras-list" href="#full-list">Pages</a></li>
<li><a id="modules-list" href="#full-list">Modules</a></li>
</ul>
<div class="gradient"></div>
<ul id="full-list" class="sidebar-fullList"></ul>
</section>
<section class="content">
<div class="content-outer">
<div id="content" class="content-inner">
<h1>
Mirage.Accounts <small class="app-vsn">(Mirage v0.70.1)</small>
<a href="https://git.inhji.de/inhji/mirage/src/branch/master/lib/mirage/accounts.ex#L1" title="View Source" class="view-source" rel="help">
<span class="icon-code" aria-hidden="true"></span>
<span class="sr-only">View Source</span>
</a>
</h1>
<section id="moduledoc">
<p>The Accounts context.</p>
</section>
<section id="summary" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#summary">
<span class="icon-link" aria-hidden="true"></span>
<span class="sr-only">Link to this section</span>
</a>
Summary
</h1>
<div class="summary-functions summary">
<h2>
<a href="#functions">Functions</a>
</h2>
<div class="summary-row">
<div class="summary-signature">
<a href="#apply_user_email/3">apply_user_email(user, password, attrs)</a>
</div>
<div class="summary-synopsis"><p>Emulates that the email will change without actually changing
it in the database.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#change_user_email/2">change_user_email(user, attrs \\ %{})</a>
</div>
<div class="summary-synopsis"><p>Returns an <code class="inline">%Ecto.Changeset{}</code> for changing the user email.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#change_user_password/2">change_user_password(user, attrs \\ %{})</a>
</div>
<div class="summary-synopsis"><p>Returns an <code class="inline">%Ecto.Changeset{}</code> for changing the user password.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#change_user_registration/2">change_user_registration(user, attrs \\ %{})</a>
</div>
<div class="summary-synopsis"><p>Returns an <code class="inline">%Ecto.Changeset{}</code> for tracking user changes.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#confirm_user/1">confirm_user(token)</a>
</div>
<div class="summary-synopsis"><p>Confirms a user by the given token.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#delete_session_token/1">delete_session_token(token)</a>
</div>
<div class="summary-synopsis"><p>Deletes the signed token with the given context.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#deliver_update_email_instructions/3">deliver_update_email_instructions(user, current_email, update_email_url_fun)</a>
</div>
<div class="summary-synopsis"><p>Delivers the update email instructions to the given user.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#deliver_user_confirmation_instructions/2">deliver_user_confirmation_instructions(user, confirmation_url_fun)</a>
</div>
<div class="summary-synopsis"><p>Delivers the confirmation email instructions to the given user.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#deliver_user_reset_password_instructions/2">deliver_user_reset_password_instructions(user, reset_password_url_fun)</a>
</div>
<div class="summary-synopsis"><p>Delivers the reset password email to the given user.</p></div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#generate_user_session_token/1">generate_user_session_token(user)</a>
</div>
<div class="summary-synopsis"><p>Generates a session token.</p></div>
</div>
<div<