My agentic slop goes here. Not intended for anyone else!
1let src = Logs.Src.create "requests.auth" ~doc:"HTTP Authentication"
2module Log = (val Logs.src_log src : Logs.LOG)
3
4type t =
5 | None
6 | Basic of { username : string; password : string }
7 | Bearer of { token : string }
8 | Digest of { username : string; password : string }
9 | Custom of (Headers.t -> Headers.t)
10
11let none = None
12
13let basic ~username ~password = Basic { username; password }
14
15let bearer ~token = Bearer { token }
16
17let digest ~username ~password = Digest { username; password }
18
19let custom f = Custom f
20
21let apply auth headers =
22 match auth with
23 | None -> headers
24 | Basic { username; password } ->
25 Log.debug (fun m -> m "Applying basic authentication for user: %s" username);
26 Headers.basic ~username ~password headers
27 | Bearer { token } ->
28 Log.debug (fun m -> m "Applying bearer token authentication");
29 Headers.bearer token headers
30 | Digest { username; password = _ } ->
31 Log.debug (fun m -> m "Digest auth configured for user: %s (requires server challenge)" username);
32 (* Digest auth requires server challenge first, handled elsewhere *)
33 headers
34 | Custom f ->
35 Log.debug (fun m -> m "Applying custom authentication handler");
36 f headers