···129129 let$! () =
130130 [%rapper
131131 execute
132132- {sql| CREATE INDEX oauth_requests_expires_idx ON oauth_requests(expires_at);
133133- CREATE INDEX oauth_codes_expires_idx ON oauth_codes(expires_at);
134134- CREATE INDEX oauth_tokens_refresh_idx ON oauth_tokens(refresh_token);
132132+ {sql| CREATE INDEX IF NOT EXISTS oauth_requests_expires_idx ON oauth_requests(expires_at);
133133+ CREATE INDEX IF NOT EXISTS oauth_codes_expires_idx ON oauth_codes(expires_at);
134134+ CREATE INDEX IF NOT EXISTS oauth_tokens_refresh_idx ON oauth_tokens(refresh_token);
135135 |sql}]
136136 () conn
137137 in
+14-8
pegasus/lib/env.ml
···11+let getenv name =
22+ try Sys.getenv name
33+ with Not_found -> failwith ("Missing environment variable " ^ name)
44+15let data_dir = Option.value ~default:"./data" @@ Sys.getenv_opt "DATA_DIR"
2633-let hostname = Sys.getenv "PDS_HOSTNAME"
77+let hostname = getenv "PDS_HOSTNAME"
4859let did =
610 Option.value ~default:("did:web:" ^ hostname) @@ Sys.getenv_opt "PDS_DID"
71188-let invite_required = Sys.getenv "INVITE_CODE_REQUIRED" = "true"
1212+let invite_required = getenv "INVITE_CODE_REQUIRED" = "true"
9131010-let rotation_key =
1111- Sys.getenv "ROTATION_KEY_MULTIBASE" |> Kleidos.parse_multikey_str
1414+let rotation_key = getenv "ROTATION_KEY_MULTIBASE" |> Kleidos.parse_multikey_str
12151313-let jwt_key = Sys.getenv "JWK_MULTIBASE" |> Kleidos.parse_multikey_str
1616+let jwt_key = getenv "JWK_MULTIBASE" |> Kleidos.parse_multikey_str
14171515-let admin_password = Sys.getenv "ADMIN_PASSWORD"
1818+let admin_password = getenv "ADMIN_PASSWORD"
16191720let dpop_nonce_secret =
1821 match Sys.getenv_opt "DPOP_NONCE_SECRET" with
1922 | Some sec ->
2020- let secret = Base64.decode_exn sec |> Bytes.of_string in
2323+ let secret =
2424+ Base64.(decode_exn ~alphabet:uri_safe_alphabet) sec |> Bytes.of_string
2525+ in
2126 if Bytes.length secret = 32 then secret
2227 else failwith "DPOP_NONCE_SECRET must be 32 bytes in base64"
2328 | None ->
2429 let secret = Mirage_crypto_rng_unix.getrandom 32 in
2530 Dream.warning (fun log ->
2631 log "DPOP_NONCE_SECRET not set; using DPOP_NONCE_SECRET=%s"
2727- (Base64.encode secret |> Result.get_ok) ) ;
3232+ ( Base64.(encode ~alphabet:uri_safe_alphabet ~pad:false) secret
3333+ |> Result.get_ok ) ) ;
2834 Bytes.of_string secret