123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566(**************************************************************************)(* *)(* Copyright 2018-2023 OCamlPro *)(* *)(* All rights reserved. This file is distributed under the terms of the *)(* GNU Lesser General Public License version 2.1, with the special *)(* exception on linking described in the file LICENSE. *)(* *)(**************************************************************************)openMisctypeuninhabited=|typenone=[`Nosecurityofuninhabited]type'aapikey={ref_name:string;name:'a}typebearer_desc={bearer_name:string;format:stringoption}typebasic_desc={basic_name:string}typebearer=[`Bearerofbearer_desc]typebasic=[`Basicofbasic_desc]typeheader=[`Headerofstringapikey](* cookie name * max age atribute (defaults to 1 day) *)typecookie=[`Cookieofstringapikey*int64option]typequery=[`QueryofParam.tapikey]typescheme=[|none|basic|bearer|header|cookie|query]letunreachable=function(_:uninhabited)->.letref_name=function|`Nosecurityu->unreachableu|`Basic{basic_name=ref_name}|`Bearer{bearer_name=ref_name;format=_}|`Cookie({ref_name;name=_},_)|`Header{ref_name;name=_}|`Query{ref_name;name=_}->ref_nameletparams(l:[<scheme]list)=List.fold_left(funacc->function|`Query{name=param;_}->param::acc|`Nosecurity_|`Basic_|`Bearer_|`Header_|`Cookie_->acc)[]lletheaders(sec:[<scheme]list)=List.fold_left(funheaders->function|`Nosecurity_->headers|`Basic_|`Bearer_->StringSet.add"authorization"headers|`Query_->headers|`Header{name;_}->StringSet.addnameheaders|`Cookie_->StringSet.add"cookie"headers)StringSet.emptysecletmake_authorization_headers~kinds=["authorization",kind^" "^s]letmake_security(sec:scheme)s=matchsecwith|`Nosecurity_->[],[]|`Bearer_->make_authorization_headers~kind:"bearer"s,[]|`Basic_->make_authorization_headers~kind:"basic"s,[]|`Header{name;_}|`Cookie({name;_},_)->[name,s],[]|`Query{name;_}->[],[name,Param.TYPES.Ss]