···8080 let scopes = String.split_on_char ' ' req.scope in
8181 let csrf_token = Dream.csrf_token ctx.req in
8282 let client_id_uri =
8383- Uri.of_string metadata.client_id
8383+ Option.map Uri.of_string metadata.client_id
8484 in
8585 let host, path =
8686- ( Uri.host_with_default client_id_uri
8787- ~default:"unknown"
8888- , Uri.path client_id_uri )
8686+ match client_id_uri with
8787+ | None ->
8888+ ("unknown", "/")
8989+ | Some uri ->
9090+ ( Uri.host_with_default uri ~default:"unknown"
9191+ , Uri.path uri )
8992 in
9093 let client_url = (host, path) in
9194 let client_name = metadata.client_name in
+4-2
pegasus/lib/oauth/client.ml
···1717 | Error err ->
1818 failwith err
1919 in
2020- if metadata.client_id <> client_id then failwith "client_id mismatch"
2020+ if metadata.client_id <> Some client_id then failwith "client_id mismatch"
2121 else
2222- let scopes = String.split_on_char ' ' metadata.scope in
2222+ let scopes =
2323+ String.split_on_char ' ' (Option.value metadata.scope ~default:"")
2424+ in
2325 if not (List.mem "atproto" scopes) then
2426 failwith "scope must include 'atproto'"
2527 else