···107107 Dream.set_header res "DPoP-Nonce" (Oauth.Dpop.next_nonce ())
108108 in
109109 let () =
110110+ let to_expose =
111111+ (* see comments on UseDpopNonce____Error in errors.ml *)
112112+ if Dream.status res = `Unauthorized then "DPoP-Nonce, WWW-Authenticate"
113113+ else if Dream.status res = `Bad_Request then "DPoP-Nonce"
114114+ else ""
115115+ in
110116 match Dream.header res "Access-Control-Expose-Headers" with
111117 | Some header when Util.str_contains ~affix:"DPoP-Nonce" header ->
112118 ()
113119 | Some header ->
114120 Dream.set_header res "Access-Control-Expose-Headers"
115115- (header ^ ", DPoP-Nonce")
121121+ (header ^ ", " ^ to_expose)
116122 | _ ->
117117- Dream.set_header res "Access-Control-Expose-Headers" "DPoP-Nonce"
123123+ Dream.set_header res "Access-Control-Expose-Headers" to_expose
118124 in
119125 res
120126···140146 let%lwt res = exn_to_response e in
141147 Lwt.return
142148 ( match e with
143143- | UseDpopNonceError ->
149149+ | UseDpopNonceAuthError | UseDpopNonceResourceError ->
144150 add_dpop_nonce_if_needed res
145151 | _ ->
146152 res )
···149155 Dream.redirect init.req r
150156 | Rate_limiter.Rate_limit_exceeded status ->
151157 rate_limit_response status
152152- | UseDpopNonceError as e ->
158158+ | (UseDpopNonceAuthError | UseDpopNonceResourceError) as e ->
153159 let%lwt res = exn_to_response e in
154160 Lwt.return (add_dpop_nonce_if_needed res)
155161 | e ->