ChangeLog

0.15.1 (2026-03-15)

Fixed

Fixed metadata dictionary saving.

0.15.0 (2026-03-15)

Backward incompatible changes

Metadata serialization was fixed for cases when some strings are having umlauts. Also, Yason library now is used instead of Jonathon for handling JSON. As the result, metadata now is returned as a hash-table with string keys.

Another backward incompatiblity is that now all metadata keys are lowercased on saving. To update old records in the database, use such SQL query:

UPDATE social_profile
SET metadata = 
    (metadata - 'EMAIL') || 
    jsonb_build_object(
        'email', 
        CASE 
            WHEN metadata->'EMAIL' = '[]'::jsonb THEN NULL
            ELSE metadata->'EMAIL'
        END
    )
WHERE metadata ? 'EMAIL';

0.14.0 (2026-03-14)

Added

0.13.0 (2026-03-08)

Added

0.12.0 (2025-06-13)

Fixed

0.11.1 (2025-02-15)

Fixed

0.11.0 (2023-12-18)

Added

Changed

0.10.0 (2023-10-22)

Experimental reCaptcha support was added into email provider.

Set reblocks-auth/providers/email/processing:*recaptcha-site-key* and reblocks-auth/providers/email/processing:*recaptcha-secret-key* variables to try it.

Note: this version requires a new Reblocks, where was added get-remote-ip function.

0.9.0 (2023-10-01)

Email authentication provider now is able to use Resend API. Load reblocks-auth/providers/email/resend ASDF system to enable this feature.

0.8.0 (2023-08-04)

New authentication provider was added. It will send an authentication URL to user's email.

To make it work, you'll need to add this table to the database:

CREATE TABLE registration_code (
    id BIGSERIAL NOT NULL PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    code VARCHAR(255) NOT NULL,
    valid_until TIMESTAMP NOT NULL,
    created_at TIMESTAMPTZ,
    updated_at TIMESTAMPTZ
);

After that, do this to enable the auth provider:

(pushnew :email reblocks-auth:*enabled-services*)

Also, you'll need to provide credentials for working with Mailgun service. At the moment sending email works only via this service, but other methods can be implemented.

If you decide to go with default sending method, define email template like this:

(define-code-sender send-code ("Ultralisp.org <noreply@ultralisp.org>" url)
  (:p ("To log into [Ultralisp.org](~A), follow [this link](~A)."
       url
       url))
  (:p "Hurry up! This link will expire in one hour."))

Here is how to provide credentials to make sending work:

(setf mailgun:*domain* "mg.ultralisp.org")

(setf mailgun:*api-key*
      (secret-values:conceal-value
       "********************************-*********-*********"))

To supply an alternative sending method, define a function of two arguments: email and url. Set reblocks-auth/providers/email/models:*send-code-callback* variable to the value of this function.

0.7.0 (2022-06-07)

0.6.0 (2021-01-24)

0.5.1 (2019-06-24)

0.5.0 (2019-06-22)

0.4.0 (2019-06-20)

0.3.0 (2019-04-18)

0.2.0 (2019-04-17)

0.1.0 (2019-03-31)