This is the reblocks-auth Reference Manual, version 0.11.0, generated automatically by Declt version 4.0 beta 2 "William Riker" on Sun Dec 08 19:27:04 2024 GMT+0.
reblocks-auth
reblocks-auth/core
reblocks-auth/button
reblocks-auth/auth
reblocks-auth/utils
reblocks-auth/conditions
reblocks-auth/models
reblocks-auth/errors
reblocks-auth/github
reblocks-auth/providers/email/processing
reblocks-auth/providers/email/models
reblocks-auth/providers/email/mailgun
reblocks-auth/reblocks-auth.asd
reblocks-auth/core/file-type.lisp
reblocks-auth/button/file-type.lisp
reblocks-auth/auth/file-type.lisp
reblocks-auth/utils/file-type.lisp
reblocks-auth/conditions/file-type.lisp
reblocks-auth/models/file-type.lisp
reblocks-auth/errors/file-type.lisp
reblocks-auth/github/file-type.lisp
reblocks-auth/providers/email/processing/file-type.lisp
reblocks-auth/providers/email/models/file-type.lisp
reblocks-auth/providers/email/mailgun/file-type.lisp
reblocks-auth/providers/email/processing
reblocks-auth/conditions
reblocks-auth/models
reblocks-auth/button
reblocks-auth/providers/email/mailgun
reblocks-auth/auth
reblocks-auth/github
reblocks-auth/errors
reblocks-auth/utils
reblocks-auth/providers/email/models
reblocks-auth/core
The main system appears first, followed by any subsystem dependency.
reblocks-auth
reblocks-auth/core
reblocks-auth/button
reblocks-auth/auth
reblocks-auth/utils
reblocks-auth/conditions
reblocks-auth/models
reblocks-auth/errors
reblocks-auth/github
reblocks-auth/providers/email/processing
reblocks-auth/providers/email/models
reblocks-auth/providers/email/mailgun
reblocks-auth
A system to add an authentication to the Reblocks based web-site.
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-40README-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
# reblocks-auth - A system to add an authentication to the Reblocks based web-site.
<a id="reblocks-auth-asdf-system-details"></a>
## REBLOCKS-AUTH ASDF System Details
* Description: A system to add an authentication to the Reblocks based web-site.
* Licence: Unlicense
* Author: Alexander Artemenko <svetlyak.40wt@gmail.com>
* Homepage: [https://40ants.com/reblocks-auth/][e462]
* Bug tracker: [https://github.com/40ants/reblocks-auth/issues][4f85]
* Source control: [GIT][1668]
* Depends on: [alexandria][8236], [cl-strings][2ecb], [dexador][8347], [jonathan][6dd8], [local-time][46a1], [log4cl][7f8b], [mailgun][ef16], [mito][5b70], [quri][2103], [reblocks][184b], [reblocks-lass][28e0], [reblocks-ui][4376], [secret-values][cd18], [serapeum][c41d], [uuid][d6b3], [yason][aba2]
[![](https://github-actions.40ants.com/40ants/reblocks-auth/matrix.svg?only=ci.run-tests)][2ba2]
![](http://quickdocs.org/badge/reblocks-auth.svg)
Reblocks-auth is a system for adding authentication for your Reblocks application. It allows users to login using multiple ways. Right now GitHub is only supported but the list will be extended.
This system uses [Mito][c7c4] as a storage to store data about users and their data from service providers. Each user has a unique nickname and an optional email. Also, one or more identity providers can be bound to each user account.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40INSTALLATION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
## Installation
You can install this library from Quicklisp, but you want to receive updates quickly, then install it from Ultralisp.org:
“‘
(ql-dist:install-dist "http://dist.ultralisp.org/"
:prompt nil)
(ql:quickload :reblocks-auth)
“‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40EXAMPLE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
## Example App
I’ve made an example application to demonstrate how does [‘reblocks-auth‘][ac3a] system work.
To start this example application, run this code in the ‘REPL‘:
“‘
(asdf:load-system :reblocks-auth-example)
(reblocks-auth-example/server:start :port 8080)
“‘
When you’ll open the http://localhost:8080/ you will see this simple website:
![](https://storage.yandexcloud.net/40ants-blog-images/reblocks-auth-example.gif)
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40USAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
## Usage
This system provides a way for user authentifications. Each user is represented in the database
using [‘reblocks-auth/models:user‘][05f7] model user can be bound to one or more "social profiles" -
[‘reblocks-auth/models:social-profile‘][d9d6]. For example, if user logged in via GitHub, then
database will store one "user" record and one "social-profile" record. Each social profile
can hold additional information in it’s metadata slot.
To use this system, you have to define two routes which will be responsible for login and logout.
On each route you have to render either [‘reblocks-auth:login-processor‘][0dc2] or [‘reblocks-auth:logout-processor‘][4d0d] widgets.
Usually you can define your routes like this ([‘reblocks-navigation-widget:defroutes‘][5f0d] is used here):
“‘
(defroutes routes
("/" (make-page-frame
(make-landing-page)))
("/login"
(make-page-frame
(reblocks-auth:make-login-processor)))
("/logout"
(make-page-frame
(reblocks-auth:make-logout-processor))))
“‘
This code will render a set up buttons to login through enabled service providers.
Enabled service providers are listed in [‘reblocks-auth:*enabled-services*‘][ac4c] variable.
Login processor does two things:
* renders buttons for enabled service providers calling [‘reblocks-auth/button:render‘][5d34] generic-function.
* service processor is executed when user clicks a "login" button. For example GitHub processor
redirects to https://github.com/login/oauth/authorize
* when user comes back to /login page, service processor gets or creates entries in the database
and stores current user in the session.
* after this, any code can retrieve current user by a call to [‘reblocks-auth/models:get-current-user‘][8c78].
Logout processor renders a "logout" button and when user clicks on it, removes user from the current session.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40API-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
## API
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FAUTH-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/AUTH
<a id="x-28-23A-28-2818-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FAUTH-22-29-20PACKAGE-29"></a>
#### [package](7bb8) ‘reblocks-auth/auth‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FAUTH-3FGenerics-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Generics
<a id="x-28REBLOCKS-AUTH-2FAUTH-3AAUTHENTICATE-20GENERIC-FUNCTION-29"></a>
##### [generic-function](0067) ‘reblocks-auth/auth:authenticate‘ service &rest params &key code
Called when user had authenticated in the service and returned
to our site.
All ‘GET‘ arguments are collected into a plist and passed as params.
Should return two values a user and a flag denotifing if user was just created.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FBUTTON-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/BUTTON
<a id="x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FBUTTON-22-29-20PACKAGE-29"></a>
#### [package](c6c8) ‘reblocks-auth/button‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FBUTTON-3FGenerics-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Generics
<a id="x-28REBLOCKS-AUTH-2FBUTTON-3ARENDER-20GENERIC-FUNCTION-29"></a>
##### [generic-function](2b0e) ‘reblocks-auth/button:render‘ service &key retpath
Renders a button for given service.
Service should be a keyword like :github or :facebook.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FCONDITIONS-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/CONDITIONS
<a id="x-28-23A-28-2824-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FCONDITIONS-22-29-20PACKAGE-29"></a>
#### [package](957c) ‘reblocks-auth/conditions‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FCONDITIONS-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Classes
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FCONDITIONS-24UNABLE-TO-AUTHENTICATE-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
##### UNABLE-TO-AUTHENTICATE
<a id="x-28REBLOCKS-AUTH-2FCONDITIONS-3AUNABLE-TO-AUTHENTICATE-20CONDITION-29"></a>
###### [condition](da77) ‘reblocks-auth/conditions:unable-to-authenticate‘ ()
**Readers**
<a id="x-28REBLOCKS-AUTH-2FCONDITIONS-3AGET-MESSAGE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FCONDITIONS-3AUNABLE-TO-AUTHENTICATE-29-29"></a>
###### [reader](da77) ‘reblocks-auth/conditions:get-message‘ (unable-to-authenticate) (:message)
<a id="x-28REBLOCKS-AUTH-2FCONDITIONS-3AGET-REASON-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FCONDITIONS-3AUNABLE-TO-AUTHENTICATE-29-29"></a>
###### [reader](da77) ‘reblocks-auth/conditions:get-reason‘ (unable-to-authenticate) (:reason = ’nil)
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FCORE-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/CORE
<a id="x-28-23A-28-2818-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FCORE-22-29-20PACKAGE-29"></a>
#### [package](8c4b) ‘reblocks-auth/core‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FCORE-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Classes
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FCORE-24LOGIN-PROCESSOR-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
##### LOGIN-PROCESSOR
<a id="x-28REBLOCKS-AUTH-2FCORE-3ALOGIN-PROCESSOR-20CLASS-29"></a>
###### [class](0603) ‘reblocks-auth/core:login-processor‘ (widget)
This widget should be rendered to process user’s login.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FCORE-24LOGOUT-PROCESSOR-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
##### LOGOUT-PROCESSOR
<a id="x-28REBLOCKS-AUTH-2FCORE-3ALOGOUT-PROCESSOR-20CLASS-29"></a>
###### [class](811c) ‘reblocks-auth/core:logout-processor‘ (widget)
This widget should be rendered to process user’s logout.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FCORE-3FGenerics-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Generics
<a id="x-28REBLOCKS-AUTH-2FCORE-3ARENDER-LOGIN-PAGE-20GENERIC-FUNCTION-29"></a>
##### [generic-function](a47a) ‘reblocks-auth/core:render-login-page‘ app &key retpath
By default, renders a list of buttons for each allowed authentication method.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FCORE-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Functions
<a id="x-28REBLOCKS-AUTH-2FCORE-3AMAKE-LOGIN-PROCESSOR-20FUNCTION-29"></a>
##### [function](7208) ‘reblocks-auth/core:make-login-processor‘
<a id="x-28REBLOCKS-AUTH-2FCORE-3AMAKE-LOGOUT-PROCESSOR-20FUNCTION-29"></a>
##### [function](9d8c) ‘reblocks-auth/core:make-logout-processor‘
<a id="x-28REBLOCKS-AUTH-2FCORE-3ARENDER-BUTTONS-20FUNCTION-29"></a>
##### [function](d46d) ‘reblocks-auth/core:render-buttons‘ &key retpath
Renders a row of buttons for enabled service providers.
Optionally you can specify ‘RETPATH‘ argument with an ‘URI‘ to return user
after login.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FCORE-3FVariables-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Variables
<a id="x-28REBLOCKS-AUTH-2FCORE-3A-2AALLOW-NEW-ACCOUNTS-CREATION-2A-20-28VARIABLE-29-29"></a>
##### [variable](52c4) ‘reblocks-auth/core:*allow-new-accounts-creation*‘ t
When True, a new account will be created. Otherwise only already existing users can log in.
<a id="x-28REBLOCKS-AUTH-2FCORE-3A-2AENABLED-SERVICES-2A-20-28VARIABLE-29-29"></a>
##### [variable](09e2) ‘reblocks-auth/core:*enabled-services*‘ (:github)
Set this variable to limit a services available to login through.
<a id="x-28REBLOCKS-AUTH-2FCORE-3A-2ALOGIN-HOOKS-2A-20-28VARIABLE-29-29"></a>
##### [variable](c9c9) ‘reblocks-auth/core:*login-hooks*‘ nil
Append a funcallable handlers which accept single argument - logged user.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FERRORS-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/ERRORS
<a id="x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FERRORS-22-29-20PACKAGE-29"></a>
#### [package](09d9) ‘reblocks-auth/errors‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FERRORS-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Classes
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FERRORS-24NICKNAME-IS-NOT-AVAILABLE-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
##### NICKNAME-IS-NOT-AVAILABLE
<a id="x-28REBLOCKS-AUTH-2FERRORS-3ANICKNAME-IS-NOT-AVAILABLE-20CONDITION-29"></a>
###### [condition](163d) ‘reblocks-auth/errors:nickname-is-not-available‘ (error)
Signalled when there is already a user with given nickname.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FGITHUB-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/GITHUB
<a id="x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FGITHUB-22-29-20PACKAGE-29"></a>
#### [package](b908) ‘reblocks-auth/github‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FGITHUB-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Functions
<a id="x-28REBLOCKS-AUTH-2FGITHUB-3AGET-SCOPES-20FUNCTION-29"></a>
##### [function](e341) ‘reblocks-auth/github:get-scopes‘
Returns current user’s scopes.
<a id="x-28REBLOCKS-AUTH-2FGITHUB-3AGET-TOKEN-20FUNCTION-29"></a>
##### [function](8cc0) ‘reblocks-auth/github:get-token‘
Returns current user’s GitHub token.
<a id="x-28REBLOCKS-AUTH-2FGITHUB-3ARENDER-BUTTON-20FUNCTION-29"></a>
##### [function](2c83) ‘reblocks-auth/github:render-button‘ &KEY (CLASS "button small") (SCOPES \*DEFAULT-SCOPES\*) (TEXT "Grant permissions") (RETPATH (GET-URI))
Renders a button to request more scopes.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FGITHUB-3FVariables-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Variables
<a id="x-28REBLOCKS-AUTH-2FGITHUB-3A-2ACLIENT-ID-2A-20-28VARIABLE-29-29"></a>
##### [variable](2dd0) ‘reblocks-auth/github:*client-id*‘ nil
‘OA‘uth client id
<a id="x-28REBLOCKS-AUTH-2FGITHUB-3A-2ADEFAULT-SCOPES-2A-20-28VARIABLE-29-29"></a>
##### [variable](dea4) ‘reblocks-auth/github:*default-scopes*‘ ("user:email")
A listo of default scopes to request from GitHub.
<a id="x-28REBLOCKS-AUTH-2FGITHUB-3A-2ASECRET-2A-20-28VARIABLE-29-29"></a>
##### [variable](1344) ‘reblocks-auth/github:*secret*‘ nil
‘OA‘uth secret. It might be a string or secret-values:secret-value.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FMODELS-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/MODELS
<a id="x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FMODELS-22-29-20PACKAGE-29"></a>
#### [package](f4b8) ‘reblocks-auth/models‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FMODELS-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Classes
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FMODELS-24SOCIAL-PROFILE-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
##### SOCIAL-PROFILE
<a id="x-28REBLOCKS-AUTH-2FMODELS-3ASOCIAL-PROFILE-20CLASS-29"></a>
###### [class](8a32) ‘reblocks-auth/models:social-profile‘ (serial-pk-mixin dao-class record-timestamps-mixin)
Represents a User’s link to a social service.
User can be bound to multiple social services.
**Readers**
<a id="x-28REBLOCKS-AUTH-2FMODELS-3APROFILE-METADATA-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FMODELS-3ASOCIAL-PROFILE-29-29"></a>
###### [reader](8d80) ‘reblocks-auth/models:profile-metadata‘ (social-profile) (:metadata :params)
<a id="x-28REBLOCKS-AUTH-2FMODELS-3APROFILE-SERVICE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FMODELS-3ASOCIAL-PROFILE-29-29"></a>
###### [reader](8673) ‘reblocks-auth/models:profile-service‘ (social-profile) (:service)
<a id="x-28REBLOCKS-AUTH-2FMODELS-3APROFILE-SERVICE-USER-ID-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FMODELS-3ASOCIAL-PROFILE-29-29"></a>
###### [reader](1119) ‘reblocks-auth/models:profile-service-user-id‘ (social-profile) (:service-user-id)
<a id="x-28REBLOCKS-AUTH-2FMODELS-3APROFILE-USER-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FMODELS-3ASOCIAL-PROFILE-29-29"></a>
###### [reader] ‘reblocks-auth/models:profile-user‘ (social-profile) (:user)
A [‘user‘][05f7] instance, bound to the [‘social-profile‘][d9d6].
**Accessors**
<a id="x-28REBLOCKS-AUTH-2FMODELS-3APROFILE-METADATA-20-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-20REBLOCKS-AUTH-2FMODELS-3ASOCIAL-PROFILE-29-29"></a>
###### [accessor](8d80) ‘reblocks-auth/models:profile-metadata‘ (social-profile) (:metadata :params)
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FMODELS-24USER-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
##### USER
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AUSER-20CLASS-29"></a>
###### [class](96a5) ‘reblocks-auth/models:user‘ (serial-pk-mixin dao-class record-timestamps-mixin)
This class stores basic information about user - it’s nickname and email.
Additional information is stored inside [‘social-profile‘][d9d6] instances.
**Readers**
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AGET-EMAIL-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FMODELS-3AUSER-29-29"></a>
###### [reader](4133) ‘reblocks-auth/models:get-email‘ (user) (:email = nil)
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AGET-NICKNAME-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FMODELS-3AUSER-29-29"></a>
###### [reader](4d04) ‘reblocks-auth/models:get-nickname‘ (user) (:nickname)
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FMODELS-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Functions
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AANONYMOUS-P-20FUNCTION-29"></a>
##### [function](6436) ‘reblocks-auth/models:anonymous-p‘ user
<a id="x-28REBLOCKS-AUTH-2FMODELS-3ACHANGE-EMAIL-20FUNCTION-29"></a>
##### [function](7835) ‘reblocks-auth/models:change-email‘ user email
<a id="x-28REBLOCKS-AUTH-2FMODELS-3ACHANGE-NICKNAME-20FUNCTION-29"></a>
##### [function](9aca) ‘reblocks-auth/models:change-nickname‘ new-nickname
Changes nickname of the current user.
<a id="x-28REBLOCKS-AUTH-2FMODELS-3ACREATE-SOCIAL-USER-20FUNCTION-29"></a>
##### [function](9a92) ‘reblocks-auth/models:create-social-user‘ service service-user-id &rest metadata &key email
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AFIND-SOCIAL-USER-20FUNCTION-29"></a>
##### [function](3bcf) ‘reblocks-auth/models:find-social-user‘ service service-user-id
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AGET-ALL-USERS-20FUNCTION-29"></a>
##### [function](704e) ‘reblocks-auth/models:get-all-users‘
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AGET-CURRENT-USER-20FUNCTION-29"></a>
##### [function](34e6) ‘reblocks-auth/models:get-current-user‘
Returns current user or ‘NIL‘.
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AGET-USER-BY-EMAIL-20FUNCTION-29"></a>
##### [function](2c50) ‘reblocks-auth/models:get-user-by-email‘ email
Returns a user with given email.
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AGET-USER-BY-NICKNAME-20FUNCTION-29"></a>
##### [function](6613) ‘reblocks-auth/models:get-user-by-nickname‘ nickname
Returns a user with given email.
<a id="x-28REBLOCKS-AUTH-2FMODELS-3AUSER-SOCIAL-PROFILES-20FUNCTION-29"></a>
##### [function](c696) ‘reblocks-auth/models:user-social-profiles‘ user
Returns a list of social profiles, bound to the user.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FMODELS-3FVariables-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Variables
<a id="x-28REBLOCKS-AUTH-2FMODELS-3A-2AUSER-CLASS-2A-20-28VARIABLE-29-29"></a>
##### [variable](9936) ‘reblocks-auth/models:*user-class*‘ user
Allows to redefine a model, for users to be created by the reblocks-auth.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMAILGUN-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/PROVIDERS/EMAIL/MAILGUN
<a id="x-28-23A-28-2837-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMAILGUN-22-29-20PACKAGE-29"></a>
#### [package](1c21) ‘reblocks-auth/providers/email/mailgun‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMAILGUN-3FMacros-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Macros
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMAILGUN-3ADEFINE-CODE-SENDER-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"></a>
##### [macro](6749) ‘reblocks-auth/providers/email/mailgun:define-code-sender‘ NAME (FROM-EMAIL URL-VAR &KEY (SUBJECT "Authentication code")) &BODY HTML-TEMPLATE-BODY
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/PROVIDERS/EMAIL/MODELS
<a id="x-28-23A-28-2836-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-22-29-20PACKAGE-29"></a>
#### [package](6c56) ‘reblocks-auth/providers/email/models‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Classes
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-24REGISTRATION-CODE-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
##### REGISTRATION-CODE
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3AREGISTRATION-CODE-20CLASS-29"></a>
###### [class](ab7d) ‘reblocks-auth/providers/email/models:registration-code‘ (serial-pk-mixin dao-class record-timestamps-mixin)
This model stores a code sent to an email for signup or log in.
**Readers**
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3AREGISTRATION-CODE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3AREGISTRATION-CODE-29-29"></a>
###### [reader](9bc4) ‘reblocks-auth/providers/email/models:registration-code‘ (registration-code) (:code)
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3AREGISTRATION-EMAIL-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3AREGISTRATION-CODE-29-29"></a>
###### [reader](4c67) ‘reblocks-auth/providers/email/models:registration-email‘ (registration-code) (:email)
User’s email.
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3AVALID-UNTIL-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3AREGISTRATION-CODE-29-29"></a>
###### [reader](0303) ‘reblocks-auth/providers/email/models:valid-until‘ (registration-code) (:valid-until)
Expiration time.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Functions
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3ASEND-CODE-20FUNCTION-29"></a>
##### [function](0874) ‘reblocks-auth/providers/email/models:send-code‘ email &key retpath send-callback
Usually you should define a global callback using
[‘reblocks-auth/providers/email/mailgun:define-code-sender‘][f455] macro,
but you can provide an alternative function to handle
email sending.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3FVariables-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Variables
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3A-2ASEND-CODE-CALLBACK-2A-20-28VARIABLE-29-29"></a>
##### [variable](3afd) ‘reblocks-auth/providers/email/models:*send-code-callback*‘ -unbound-
Set this variable to a function of one argument of class [‘registration-code‘][1573].
It should send a registration code using template, suitable for your website.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/PROVIDERS/EMAIL/PROCESSING
<a id="x-28-23A-28-2840-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-22-29-20PACKAGE-29"></a>
#### [package](08fb) ‘reblocks-auth/providers/email/processing‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Classes
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-24REQUEST-CODE-FORM-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
##### REQUEST-CODE-FORM
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3AREQUEST-CODE-FORM-20CLASS-29"></a>
###### [class](a659) ‘reblocks-auth/providers/email/processing:request-code-form‘ (widget)
**Readers**
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3ARETPATH-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3AREQUEST-CODE-FORM-29-29"></a>
###### [reader](a15a) ‘reblocks-auth/providers/email/processing:retpath‘ (request-code-form) (:retpath)
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3ASENT-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3AREQUEST-CODE-FORM-29-29"></a>
###### [reader](a2e3) ‘reblocks-auth/providers/email/processing:sent‘ (request-code-form) (= nil)
**Accessors**
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3ASENT-20-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-20REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3AREQUEST-CODE-FORM-29-29"></a>
###### [accessor](a2e3) ‘reblocks-auth/providers/email/processing:sent‘ (request-code-form) (= nil)
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3FGenerics-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Generics
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3AFORM-CSS-CLASSES-20GENERIC-FUNCTION-29"></a>
##### [generic-function](3f68) ‘reblocks-auth/providers/email/processing:form-css-classes‘ widget
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3ARENDER-EMAIL-INPUT-20GENERIC-FUNCTION-29"></a>
##### [generic-function](cfbb) ‘reblocks-auth/providers/email/processing:render-email-input‘ widget
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3ARENDER-SENT-MESSAGE-20GENERIC-FUNCTION-29"></a>
##### [generic-function](30f6) ‘reblocks-auth/providers/email/processing:render-sent-message‘ widget
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3ARENDER-SUBMIT-BUTTON-20GENERIC-FUNCTION-29"></a>
##### [generic-function](951e) ‘reblocks-auth/providers/email/processing:render-submit-button‘ widget
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3FVariables-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Variables
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3A-2ARECAPTCHA-SECRET-KEY-2A-20-28VARIABLE-29-29"></a>
##### [variable](1bb0) ‘reblocks-auth/providers/email/processing:*recaptcha-secret-key*‘ nil
Set this variable to a secret key, generated by Google reCaptcha.
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FPROCESSING-3A-2ARECAPTCHA-SITE-KEY-2A-20-28VARIABLE-29-29"></a>
##### [variable](10f5) ‘reblocks-auth/providers/email/processing:*recaptcha-site-key*‘ nil
Set this variable to a site key, generated by Google reCaptcha.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FRESEND-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
### REBLOCKS-AUTH/PROVIDERS/EMAIL/RESEND
<a id="x-28-23A-28-2836-29-20BASE-CHAR-20-2E-20-22REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FRESEND-22-29-20PACKAGE-29"></a>
#### [package](dfa3) ‘reblocks-auth/providers/email/resend‘
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FRESEND-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Functions
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FRESEND-3AMAKE-CODE-SENDER-20FUNCTION-29"></a>
##### [function](32d2) ‘reblocks-auth/providers/email/resend:make-code-sender‘ thunk &key base-uri
Makes a function which will prepare params and call ‘THUNK‘ function with email and ‘URL‘.
Usually you don’t need to call this function directly and you can use just [‘define-code-sender‘][fc31] macro.
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-7C-40REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FRESEND-3FMacros-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
#### Macros
<a id="x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FRESEND-3ADEFINE-CODE-SENDER-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"></a>
##### [macro](04c6) ‘reblocks-auth/providers/email/resend:define-code-sender‘ NAME (FROM-EMAIL URL-VAR &KEY (SUBJECT "Authentication code")) &BODY HTML-TEMPLATE-BODY
<a id="x-28REBLOCKS-AUTH-DOCS-2FINDEX-3A-3A-40ROADMAP-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
## Roadmap
* Add support for authentication by a link sent to the email.
* Add ability to bind multiple service providers to a single user.
[e462]: https://40ants.com/reblocks-auth/
[ac3a]: https://40ants.com/reblocks-auth/#x-28-23A-28-2813-29-20BASE-CHAR-20-2E-20-22reblocks-auth-22-29-20ASDF-2FSYSTEM-3ASYSTEM-29
[5d34]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FBUTTON-3ARENDER-20GENERIC-FUNCTION-29
[ac4c]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FCORE-3A-2AENABLED-SERVICES-2A-20-28VARIABLE-29-29
[0dc2]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FCORE-3ALOGIN-PROCESSOR-20CLASS-29
[4d0d]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FCORE-3ALOGOUT-PROCESSOR-20CLASS-29
[8c78]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FMODELS-3AGET-CURRENT-USER-20FUNCTION-29
[d9d6]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FMODELS-3ASOCIAL-PROFILE-20CLASS-29
[05f7]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FMODELS-3AUSER-20CLASS-29
[f455]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMAILGUN-3ADEFINE-CODE-SENDER-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29
[1573]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FMODELS-3AREGISTRATION-CODE-20CLASS-29
[fc31]: https://40ants.com/reblocks-auth/#x-28REBLOCKS-AUTH-2FPROVIDERS-2FEMAIL-2FRESEND-3ADEFINE-CODE-SENDER-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29
[5f0d]: https://40ants.com/reblocks-navigation-widget/#x-28REBLOCKS-NAVIGATION-WIDGET-3ADEFROUTES-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29
[1668]: https://github.com/40ants/reblocks-auth
[2ba2]: https://github.com/40ants/reblocks-auth/actions
[7bb8]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/auth.lisp#L1
[0067]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/auth.lisp#L8
[c6c8]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/button.lisp#L1
[2b0e]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/button.lisp#L10
[957c]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/conditions.lisp#L1
[da77]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/conditions.lisp#L10
[8c4b]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L1
[a47a]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L143
[09e2]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L43
[c9c9]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L47
[52c4]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L51
[0603]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L55
[811c]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L60
[7208]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L65
[9d8c]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L69
[d46d]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/core.lisp#L80
[09d9]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/errors.lisp#L1
[163d]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/errors.lisp#L7
[b908]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/github.lisp#L1
[8cc0]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/github.lisp#L144
[e341]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/github.lisp#L149
[2dd0]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/github.lisp#L36
[1344]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/github.lisp#L40
[dea4]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/github.lisp#L44
[2c83]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/github.lisp#L82
[f4b8]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L1
[704e]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L106
[3bcf]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L110
[9a92]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L119
[34e6]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L146
[c696]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L152
[6436]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L165
[2c50]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L169
[6613]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L174
[9aca]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L179
[7835]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L193
[96a5]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L37
[4d04]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L38
[4133]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L44
[9936]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L55
[8a32]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L59
[8673]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L68
[1119]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L74
[8d80]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/models.lisp#L77
[1c21]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/mailgun.lisp#L1
[6749]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/mailgun.lisp#L44
[6c56]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/models.lisp#L1
[3afd]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/models.lisp#L21
[ab7d]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/models.lisp#L43
[4c67]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/models.lisp#L44
[9bc4]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/models.lisp#L48
[0303]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/models.lisp#L52
[0874]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/models.lisp#L78
[08fb]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L1
[30f6]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L157
[cfbb]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L173
[951e]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L181
[3f68]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L189
[10f5]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L42
[1bb0]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L45
[a659]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L49
[a15a]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L50
[a2e3]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/processing.lisp#L52
[dfa3]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/resend.lisp#L1
[32d2]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/resend.lisp#L16
[04c6]: https://github.com/40ants/reblocks-auth/blob/8f371016e7c289fd2d78a7a2b530c8370e15575b/src/providers/email/resend.lisp#L44
[4f85]: https://github.com/40ants/reblocks-auth/issues
[c7c4]: https://github.com/fukamachi/mito
[8236]: https://quickdocs.org/alexandria
[2ecb]: https://quickdocs.org/cl-strings
[8347]: https://quickdocs.org/dexador
[6dd8]: https://quickdocs.org/jonathan
[46a1]: https://quickdocs.org/local-time
[7f8b]: https://quickdocs.org/log4cl
[ef16]: https://quickdocs.org/mailgun
[5b70]: https://quickdocs.org/mito
[2103]: https://quickdocs.org/quri
[184b]: https://quickdocs.org/reblocks
[28e0]: https://quickdocs.org/reblocks-lass
[4376]: https://quickdocs.org/reblocks-ui
[cd18]: https://quickdocs.org/secret-values
[c41d]: https://quickdocs.org/serapeum
[d6b3]: https://quickdocs.org/uuid
[aba2]: https://quickdocs.org/yason
* * *
###### [generated by [40ANTS-DOC](https://40ants.com/doc/)]
0.11.0
40ants-asdf-system
(system).
reblocks-auth/core
(system).
reblocks-auth/github
(system).
reblocks-auth/providers/email/processing
(system).
reblocks-auth/providers/email/mailgun
(system).
reblocks-auth/models
(system).
reblocks-auth/core
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
log4cl
(system).
reblocks-lass
(system).
reblocks-auth/button
(system).
reblocks-auth/auth
(system).
reblocks/response
(system).
reblocks/request
(system).
reblocks/widget
(system).
reblocks-auth/utils
(system).
reblocks-auth/conditions
(system).
reblocks/html
(system).
reblocks-auth/models
(system).
reblocks/dependencies
(system).
reblocks/app
(system).
reblocks/session
(system).
reblocks-auth/button
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
reblocks/html
(system).
reblocks-auth/auth
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
reblocks-auth/utils
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
alexandria
(system).
reblocks-auth/conditions
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
reblocks-auth/models
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
jonathan
(system).
reblocks/session
(system).
alexandria
(system).
mito
(system).
reblocks-auth/errors
(system).
reblocks-auth/errors
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
reblocks-auth/github
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
dexador
(system).
log4cl
(system).
jonathan
(system).
reblocks-auth/button
(system).
reblocks-auth/auth
(system).
reblocks/html
(system).
reblocks-auth/conditions
(system).
reblocks-auth/models
(system).
reblocks/response
(system).
cl-strings
(system).
quri
(system).
reblocks/request
(system).
secret-values
(system).
reblocks/session
(system).
reblocks-auth/providers/email/processing
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
reblocks-auth/providers/email/models
(system).
reblocks/html
(system).
dexador
(system).
log4cl
(system).
reblocks/widget
(system).
reblocks-auth/button
(system).
reblocks-ui/form
(system).
reblocks-ui/popup
(system).
reblocks-lass
(system).
reblocks/dependencies
(system).
reblocks-auth/core
(system).
reblocks-auth/models
(system).
serapeum
(system).
reblocks-auth/auth
(system).
reblocks/request
(system).
yason
(system).
reblocks-auth/providers/email/models
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
log4cl
(system).
local-time
(system).
uuid
(system).
mito
(system).
reblocks-auth/providers/email/mailgun
Alexander Artemenko <svetlyak.40wt@gmail.com>
(GIT https://github.com/40ants/reblocks-auth)
Unlicense
log4cl
(system).
mailgun
(system).
reblocks/response
(system).
alexandria
(system).
reblocks-auth/providers/email/models
(system).
quri
(system).
Files are sorted by type and then listed depth-first from the systems components trees.
reblocks-auth/reblocks-auth.asd
reblocks-auth/core/file-type.lisp
reblocks-auth/button/file-type.lisp
reblocks-auth/auth/file-type.lisp
reblocks-auth/utils/file-type.lisp
reblocks-auth/conditions/file-type.lisp
reblocks-auth/models/file-type.lisp
reblocks-auth/errors/file-type.lisp
reblocks-auth/github/file-type.lisp
reblocks-auth/providers/email/processing/file-type.lisp
reblocks-auth/providers/email/models/file-type.lisp
reblocks-auth/providers/email/mailgun/file-type.lisp
reblocks-auth/reblocks-auth.asd
reblocks-auth
(system).
reblocks-auth
.
reblocks-auth/core
.
reblocks-auth/button
.
reblocks-auth/auth
.
reblocks-auth/utils
.
reblocks-auth/conditions
.
reblocks-auth/models
.
reblocks-auth/errors
.
reblocks-auth/github
.
reblocks-auth/providers/email/processing
.
reblocks-auth/providers/email/models
.
reblocks-auth/providers/email/mailgun
.
reblocks-auth/core/file-type.lisp
reblocks-auth/core
(system).
*allow-new-accounts-creation*
(special variable).
*enabled-services*
(special variable).
*login-hooks*
(special variable).
get-dependencies
(method).
login-processor
(class).
logout-processor
(class).
make-login-processor
(function).
make-logout-processor
(function).
render
(method).
render
(method).
render-buttons
(function).
render-login-page
(generic function).
reach-goal
(generic function).
reblocks-auth/button/file-type.lisp
reblocks-auth/button
(system).
render
(generic function).
reblocks-auth/auth/file-type.lisp
reblocks-auth/auth
(system).
authenticate
(generic function).
reblocks-auth/utils/file-type.lisp
reblocks-auth/utils
(system).
keywordify
(function).
to-plist
(function).
reblocks-auth/conditions/file-type.lisp
reblocks-auth/conditions
(system).
get-message
(reader method).
get-reason
(reader method).
unable-to-authenticate
(condition).
reblocks-auth/models/file-type.lisp
reblocks-auth/models
(system).
*user-class*
(special variable).
anonymous-p
(function).
change-email
(function).
change-nickname
(function).
create-social-user
(function).
find-social-user
(function).
get-all-users
(function).
get-current-user
(function).
(setf get-current-user)
(function).
get-email
(reader method).
get-nickname
(reader method).
get-user-by-email
(function).
get-user-by-nickname
(function).
print-object
(method).
print-object
(method).
profile-metadata
(reader method).
(setf profile-metadata)
(writer method).
profile-service
(reader method).
profile-service-user-id
(reader method).
social-profile
(class).
user
(class).
user-social-profiles
(function).
reblocks-auth/errors/file-type.lisp
reblocks-auth/errors
(system).
nickname-is-not-available
(condition).
reblocks-auth/github/file-type.lisp
reblocks-auth/github
(system).
*client-id*
(special variable).
*default-scopes*
(special variable).
*secret*
(special variable).
authenticate
(method).
get-scopes
(function).
get-token
(function).
render
(method).
render-button
(function).
get-oauth-token-by
(function).
make-authentication-url
(function).
make-default-redirect-uri
(function).
reblocks-auth/providers/email/processing/file-type.lisp
reblocks-auth/providers/email/processing
(system).
*recaptcha-secret-key*
(special variable).
*recaptcha-site-key*
(special variable).
authenticate
(method).
form-css-classes
(generic function).
get-dependencies
(method).
render
(method).
render
(method).
render-email-input
(generic function).
render-popup-content
(method).
render-sent-message
(generic function).
render-submit-button
(generic function).
request-code-form
(class).
retpath
(reader method).
sent
(reader method).
(setf sent)
(writer method).
form
(reader method).
new-accounts-are-prohibited
(condition).
request-code-form-for-popup
(class).
request-code-popup
(class).
verify-recaptcha
(function).
reblocks-auth/providers/email/models/file-type.lisp
reblocks-auth/providers/email/models
(system).
*send-code-callback*
(special variable).
print-object
(method).
registration-code
(reader method).
registration-code
(class).
registration-email
(reader method).
send-code
(function).
valid-until
(reader method).
*code-ttl*
(special variable).
check-registration-code
(function).
code-expired
(condition).
code-unknown
(condition).
get-code
(reader method).
get-code
(reader method).
make-registration-code
(function).
reblocks-auth/providers/email/mailgun/file-type.lisp
reblocks-auth/providers/email/mailgun
(system).
define-code-sender
(macro).
make-code-sender
(function).
Packages are listed by definition order.
reblocks-auth/providers/email/processing
reblocks-auth/conditions
reblocks-auth/models
reblocks-auth/button
reblocks-auth/providers/email/mailgun
reblocks-auth/auth
reblocks-auth/github
reblocks-auth/errors
reblocks-auth/utils
reblocks-auth/providers/email/models
reblocks-auth/core
reblocks-auth/providers/email/processing
common-lisp
.
*recaptcha-secret-key*
(special variable).
*recaptcha-site-key*
(special variable).
form-css-classes
(generic function).
render-email-input
(generic function).
render-sent-message
(generic function).
render-submit-button
(generic function).
request-code-form
(class).
retpath
(generic reader).
sent
(generic reader).
(setf sent)
(generic writer).
form
(generic reader).
new-accounts-are-prohibited
(condition).
request-code-form-for-popup
(class).
request-code-popup
(class).
verify-recaptcha
(function).
reblocks-auth/conditions
common-lisp
.
get-message
(generic reader).
get-reason
(generic reader).
unable-to-authenticate
(condition).
reblocks-auth/models
common-lisp
.
*user-class*
(special variable).
anonymous-p
(function).
change-email
(function).
change-nickname
(function).
create-social-user
(function).
find-social-user
(function).
get-all-users
(function).
get-current-user
(function).
(setf get-current-user)
(function).
get-email
(generic reader).
get-nickname
(generic reader).
get-user-by-email
(function).
get-user-by-nickname
(function).
profile-metadata
(generic reader).
(setf profile-metadata)
(generic writer).
profile-service
(generic reader).
profile-service-user-id
(generic reader).
profile-user
(generic reader).
social-profile
(class).
user
(class).
user-social-profiles
(function).
reblocks-auth/providers/email/mailgun
common-lisp
.
define-code-sender
(macro).
make-code-sender
(function).
reblocks-auth/auth
common-lisp
.
authenticate
(generic function).
reblocks-auth/github
common-lisp
.
*client-id*
(special variable).
*default-scopes*
(special variable).
*secret*
(special variable).
get-scopes
(function).
get-token
(function).
render-button
(function).
get-oauth-token-by
(function).
make-authentication-url
(function).
make-default-redirect-uri
(function).
reblocks-auth/errors
common-lisp
.
nickname-is-not-available
(condition).
reblocks-auth/utils
common-lisp
.
keywordify
(function).
to-plist
(function).
reblocks-auth/providers/email/models
common-lisp
.
*send-code-callback*
(special variable).
registration-code
(generic reader).
registration-code
(class).
registration-email
(generic reader).
send-code
(function).
valid-until
(generic reader).
*code-ttl*
(special variable).
check-registration-code
(function).
code-expired
(condition).
code-unknown
(condition).
get-code
(generic reader).
make-registration-code
(function).
reblocks-auth/core
reblocks-auth
common-lisp
.
*allow-new-accounts-creation*
(special variable).
*enabled-services*
(special variable).
*login-hooks*
(special variable).
login-processor
(class).
logout-processor
(class).
make-login-processor
(function).
make-logout-processor
(function).
render-buttons
(function).
render-login-page
(generic function).
reach-goal
(generic function).
Definitions are sorted by export status, category, package, and then by lexicographic order.
When True, a new account will be created. Otherwise only already existing users can log in.
OAuth client id
A listo of default scopes to request from GitHub.
Set this variable to limit a services available to login through.
Append a funcallable handlers which accept single argument - logged user.
Set this variable to a secret key, generated by Google reCaptcha.
Set this variable to a site key, generated by Google reCaptcha.
OAuth secret. It might be a string or secret-values:secret-value.
Set this variable to a function of one argument of class REGISTRATION-CODE. It should send a registration code using template, suitable for your website.
Allows to redefine a model, for users to be created by the reblocks-auth.
Changes nickname of the current user.
Returns current user or NIL.
Returns current user’s scopes.
Returns current user’s GitHub token.
Returns a user with given email.
Returns a user with given email.
Renders a button to request more scopes.
Renders a row of buttons for enabled service providers.
Optionally you can specify RETPATH argument with an URI to return user after login.
Usually you should define a global callback using
REBLOCKS-AUTH/PROVIDERS/EMAIL/MAILGUN:DEFINE-CODE-SENDER macro,
but you can provide an alternative function to handle
email sending.
Returns a list of social profiles, bound to the user.
Called when user had authenticated in the service and returned
to our site.
All GET arguments are collected into a plist and passed as params.
Should return two values a user and a flag denotifing if user was just created.
request-code-form
)) ¶unable-to-authenticate
)) ¶unable-to-authenticate
)) ¶social-profile
)) ¶automatically generated reader method
social-profile
)) ¶automatically generated writer method
social-profile
)) ¶automatically generated reader method
social-profile
)) ¶automatically generated reader method
social-profile
)) ¶user
.
registration-code
)) ¶automatically generated reader method
code
.
registration-code
)) ¶User’s email.
Renders a button for given service.
Service should be a keyword like :github or :facebook.
request-code-form
)) ¶By default, renders a list of buttons for each allowed authentication method.
request-code-form
)) ¶request-code-form-for-popup
)) ¶request-code-form
)) ¶request-code-form
)) ¶automatically generated reader method
request-code-form
)) ¶automatically generated reader method
sent
.
request-code-form
)) ¶automatically generated writer method
sent
.
registration-code
)) ¶Expiration time.
request-code-popup
)) ¶reblocks/dependencies
.
login-processor
)) ¶reblocks/dependencies
.
social-profile
) stream) ¶registration-code
) stream) ¶request-code-form
)) ¶reblocks/widget
.
logout-processor
)) ¶reblocks/widget
.
login-processor
)) ¶reblocks/widget
.
request-code-popup
)) ¶reblocks-ui/popup
.
Signalled when there is already a user with given nickname.
error
.
This widget should be rendered to process user’s login.
widget
.
This widget should be rendered to process user’s logout.
widget
.
This model stores a code sent to an email for signup or log in.
dao-class
.
record-timestamps-mixin
.
serial-pk-mixin
.
User’s email.
:email
This slot is read-only.
:code
This slot is read-only.
Expiration time.
:valid-until
This slot is read-only.
Represents a User’s link to a social service.
User can be bound to multiple social services.
dao-class
.
record-timestamps-mixin
.
serial-pk-mixin
.
A USER instance, bound to the SOCIAL-PROFILE.
:user
This slot is read-only.
:user-id
:service
This slot is read-only.
:service-user-id
This slot is read-only.
:metadata
, :params
This class stores basic information about user - it’s nickname and email. Additional information is stored inside SOCIAL-PROFILE instances.
dao-class
.
record-timestamps-mixin
.
serial-pk-mixin
.
:nickname
This slot is read-only.
Time to live for authentication code.
Authenticates a user.
If code wasn’t found, then condition code-unknown will be raised.
If code is expired, then condition code-expired will be raised.
Возвращает пользователя, а вторым значением t если пользователь уже был
и nil если это новая учётка.
More about token verification:
https://developers.google.com/recaptcha/docs/verify
request-code-popup
)) ¶automatically generated reader method
form
.
code-expired
)) ¶code
.
code-unknown
)) ¶code
.
Signalled when code was found but already expired.
error
.
Signalled when code was not found in the database.
error
.
error
.
Jump to: | (
A C D F G K M P R S T U V |
---|
Jump to: | (
A C D F G K M P R S T U V |
---|
Jump to: | *
C E F M N R S U V |
---|
Jump to: | *
C E F M N R S U V |
---|
Jump to: | C F L N P R S U |
---|
Jump to: | C F L N P R S U |
---|