ol.clave.ext.common

Common utilities for clave server extensions.

This namespace provides server-agnostic helpers for working with clave’s automation layer, including keystore creation and event processing.

These functions can be used by any server extension (Jetty, http-kit, etc.).

create-keystore

(create-keystore bundle)
(create-keystore bundle password)

Create an in-memory PKCS12 KeyStore from a clave certificate bundle.

No disk I/O - purely in-memory operation suitable for TLS handshakes.

key description

bundle

Certificate bundle from ol.clave.automation/lookup-cert

password

Optional keystore password (default "changeit")

Returns a java.security.KeyStore ready for use with TLS servers. Returns nil if bundle is nil (no certificate available yet).

(create-keystore (auto/lookup-cert system "example.com"))
;; => #object[java.security.KeyStore ...]

certificate-event?

(certificate-event? evt)

Check if an event indicates a certificate change.

Returns true for :certificate-obtained, :certificate-renewed, and :certificate-loaded events.

key description

evt

Event from ol.clave.automation/get-event-queue

(when (certificate-event? evt)
  (log/info "Certificate updated for" (event-domain evt)))

event-domain

(event-domain evt)

Extract the domain name from a certificate event.

Returns the domain string or nil if event has no domain.

key description

evt

Event map


wrap-redirect-https

(wrap-redirect-https handler)
(wrap-redirect-https handler {:keys [ssl-port] :or {ssl-port 443}})

Ring middleware that redirects HTTP requests to HTTPS.

key description

handler

Ring handler to wrap

opts

Options map with :ssl-port

Options: - :ssl-port - HTTPS port for redirect URL. Defaults to 443 (implicit, no port in URL). Use a custom port like 8443 to include it explicitly.

Passes through requests that are already HTTPS (by :scheme or x-forwarded-proto header).

(wrap-redirect-https handler {:ssl-port 8443})

no-op-solver

(no-op-solver)

Create a no-op ACME solver for testing.

Returns a solver that does nothing. Useful with PEBBLE_VA_ALWAYS_VALID=1 where challenge validation is skipped.

{:solvers {:http-01 (no-op-solver)}}

wait-for-certificates

(wait-for-certificates system domains)

Wait for certificates to be available for all domains.

Polls ol.clave.automation/lookup-cert once per second until certificates are available for every domain. Blocks indefinitely until the automation system obtains all certificates or throws an error.

key description

system

clave automation system

domains

Vector of domains to wait for

Returns nil once all certificates are available.

(wait-for-certificate system ["example.com" "www.example.com"])
(create-keystore (auto/lookup-cert system "example.com"))