diff options
Diffstat (limited to 'src/server.ml')
-rw-r--r-- | src/server.ml | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/server.ml b/src/server.ml index bedc9a0..287a416 100644 --- a/src/server.ml +++ b/src/server.ml @@ -96,12 +96,15 @@ let get_link ?(args=[]) base_url kind id = else "?" ^ Uri.encoded_of_query args in base_url ^ "/ics/" ^ kind_to_url kind ^ "/" ^ id ^ ".ics" ^ args -let respond_link ?(args=[]) base_url kind id = +let respond_link ?(groups=[]) base_url kind id = + let page_args, args = match groups with + | [] -> None, [] + | groups -> Some (id, groups), ["groups", groups] in get_link ~args base_url kind id - |> Pages.link + |> Pages.link ?args:page_args |> respond -let get_module_link base_url body = +let get_module_and_groups_from_request body found not_found = Cohttp_lwt.Body.to_string body >>= fun body -> let data = Uri.query_of_encoded body in let groups, module_id, valid = List.fold_right (fun (k, v) (groups, module_id, valid) -> @@ -114,12 +117,14 @@ let get_module_link base_url body = | _, _, _, _ -> groups, None, false) data ([], None, true) in match module_id, valid with | Some module_id, true -> - let args = - if groups = [] then [] - else ["groups", groups] in - respond_link ~args base_url Module module_id - | _, _ -> - bad_request () + found module_id groups + | _, _ -> not_found () + +let get_module_link base_url body = + get_module_and_groups_from_request body + (fun module_id groups -> + respond_link ~groups base_url Module module_id) + bad_request let check_ics = Astring.String.is_suffix ~affix:".ics" |