···9999let extract_nsid req = (Dream.path [@warning "-3"]) req |> List.rev |> List.hd
100100101101let add_dpop_nonce_if_needed res =
102102- let nonce = Oauth.Dpop.next_nonce () in
103103- Dream.set_header res "DPoP-Nonce" nonce ;
104104- let expose_header = Dream.header res "Access-Control-Expose-Headers" in
105105- Dream.add_header res "Access-Control-Expose-Headers"
106106- ( match expose_header with
107107- | Some headers when not @@ Util.str_contains ~affix:"DPoP-Nonce" headers ->
108108- headers ^ ", DPoP-Nonce"
102102+ let () =
103103+ match Dream.header res "DPoP-Nonce" with
104104+ | Some _ ->
105105+ ()
106106+ | None ->
107107+ Dream.set_header res "DPoP-Nonce" (Oauth.Dpop.next_nonce ())
108108+ in
109109+ let () =
110110+ match Dream.header res "Access-Control-Expose-Headers" with
111111+ | Some header when Util.str_contains ~affix:"DPoP-Nonce" header ->
112112+ ()
113113+ | Some header ->
114114+ Dream.set_header res "Access-Control-Expose-Headers"
115115+ (header ^ ", DPoP-Nonce")
109116 | _ ->
110110- "DPoP-Nonce" ) ;
117117+ Dream.set_header res "Access-Control-Expose-Headers" "DPoP-Nonce"
118118+ in
111119 res
112120113121let handler ?(auth : Auth.Verifiers.t = Any)
···337345 Option.is_some dpop
338346 || Option.is_some www_auth
339347 && Option.get www_auth |> Util.str_contains ~affix:"DPoP"
340340- then begin
341341- Dream.set_header res "DPoP-Nonce" (Oauth.Dpop.next_nonce ()) ;
342342- Dream.add_header res "Access-Control-Expose-Headers"
343343- "DPoP-Nonce, WWW-Authenticate"
344344- end ;
345345- Lwt.return res
348348+ then Lwt.return @@ add_dpop_nonce_if_needed res
349349+ else Lwt.return res
346350347351let cors_middleware inner_handler req =
348352 let%lwt res = inner_handler req in