Skip to content

Commit c7f7c09

Browse files
authored
Merge pull request #74 from malthe/issue-57-cookie-encoding-issue
Do not use or assume Base 64 encoding of cookies
2 parents 2e30df1 + d517e6b commit c7f7c09

File tree

2 files changed

+6
-8
lines changed

2 files changed

+6
-8
lines changed

Diff for: opium_kernel/cookie.ml

+5-7
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@ open Sexplib.Std
44
module Co = Cohttp
55

66
let encode x =
7-
Uri.pct_encode ~component:`Query_key (B64.encode x)
7+
Uri.pct_encode ~component:`Query_key x
88

9-
let decode x =
10-
B64.decode (Uri.pct_decode x)
9+
let decode = Uri.pct_decode
1110

1211
module Env = struct
1312
type cookie = (string * string) list
@@ -39,7 +38,7 @@ let cookies req =
3938
|> cookies_raw
4039
|> List.filter_map ~f:(fun (k,v) ->
4140
(* ignore bad cookies *)
42-
Option.try_with (fun () -> (decode k, decode v)))
41+
Option.try_with (fun () -> (k, decode v)))
4342

4443
let get req ~key =
4544
let cookie1 =
@@ -50,10 +49,9 @@ let get req ~key =
5049
| Some cookie -> Some cookie
5150
| None ->
5251
let cookies = cookies_raw req in
53-
let encoded_key = encode key in
5452
cookies
5553
|> List.find_map ~f:(fun (k,v) ->
56-
if k = encoded_key then Some (decode v) else None)
54+
if k = key then Some (decode v) else None)
5755

5856
let set_cookies ?(expiration = `Session) resp cookies =
5957
let env = Rock.Response.env resp in
@@ -72,7 +70,7 @@ let m = (* TODO: "optimize" *)
7270
let cookie_headers =
7371
let module Cookie = Co.Cookie.Set_cookie_hdr in
7472
let f (k, v, expiration) =
75-
(encode k, encode v)
73+
(k, encode v)
7674
|> Cookie.make ~path:"/" ~expiration
7775
|> Cookie.serialize
7876
in

Diff for: opium_kernel/cookie.mli

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(** Simple cookie module. Cookies are base64'd and percent encoded. *)
1+
(** Simple cookie module. Cookie values are percent encoded. *)
22

33
(** Fetch all cookies from a rock request *)
44
val cookies : Rock.Request.t -> (string * string) list

0 commit comments

Comments
 (0)