adamc@764: (* Copyright (c) 2008-2009, Adam Chlipala adamc@764: * All rights reserved. adamc@764: * adamc@764: * Redistribution and use in source and binary forms, with or without adamc@764: * modification, are permitted provided that the following conditions are met: adamc@764: * adamc@764: * - Redistributions of source code must retain the above copyright notice, adamc@764: * this list of conditions and the following disclaimer. adamc@764: * - Redistributions in binary form must reproduce the above copyright notice, adamc@764: * this list of conditions and the following disclaimer in the documentation adamc@764: * and/or other materials provided with the distribution. adamc@764: * - The names of contributors may not be used to endorse or promote products adamc@764: * derived from this software without specific prior written permission. adamc@764: * adamc@764: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" adamc@764: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE adamc@764: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE adamc@764: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE adamc@764: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR adamc@764: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF adamc@764: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS adamc@764: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN adamc@764: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) adamc@764: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE adamc@764: * POSSIBILITY OF SUCH DAMAGE. adamc@764: *) adamc@764: adamc@764: signature SETTINGS = sig adamc@764: adamc@765: (* How do all application URLs begin? *) adamc@764: val setUrlPrefix : string -> unit adamc@764: val getUrlPrefix : unit -> string adamc@764: adamc@765: (* How many seconds should the server wait before assuming a Comet client has left? *) adamc@764: val setTimeout : int -> unit adamc@764: val getTimeout : unit -> int adamc@764: adamc@765: (* Which C header files are needed? *) adamc@764: val setHeaders : string list -> unit adamc@764: val getHeaders : unit -> string list adamc@764: adamc@766: (* Which extra JavaScript URLs should be included? *) adamc@766: val setScripts : string list -> unit adamc@766: val getScripts : unit -> string list adamc@766: adamc@765: type ffi = string * string adamc@765: adamc@765: (* Which FFI types may be sent from clients to servers? *) adamc@765: val setClientToServer : ffi list -> unit adamc@765: val mayClientToServer : ffi -> bool adamc@765: adamc@765: (* Which FFI functions have side effects? *) adamc@765: val setEffectful : ffi list -> unit adamc@765: val isEffectful : ffi -> bool adamc@765: adamc@765: (* Which FFI functions may only be run in clients? *) adamc@765: val setClientOnly : ffi list -> unit adamc@765: val isClientOnly : ffi -> bool adamc@765: adamc@765: (* Which FFI functions may only be run on servers? *) adamc@765: val setServerOnly : ffi list -> unit adamc@765: val isServerOnly : ffi -> bool adamc@765: adamc@765: (* Which FFI functions may be run in JavaScript? (JavaScript function names included) *) adamc@765: val setJsFuncs : (ffi * string) list -> unit adamc@765: val jsFunc : ffi -> string option adamc@765: adamc@768: datatype pattern_kind = Exact | Prefix adamc@768: datatype action = Allow | Deny adamc@768: type rule = { action : action, kind : pattern_kind, pattern : string } adamc@768: adamc@768: datatype path_kind = Any | Url | Table | Sequence | View | Relation | Cookie | Style adamc@768: type rewrite = { pkind : path_kind, kind : pattern_kind, from : string, to : string } adamc@768: adamc@768: (* Rules for rewriting URLs from canonical forms *) adamc@768: val setRewriteRules : rewrite list -> unit adamc@768: val rewrite : path_kind -> string -> string adamc@768: adamc@769: (* Validating URLs and MIME types *) adamc@769: val setUrlRules : rule list -> unit adamc@770: val getUrlRules : unit -> rule list adamc@769: val checkUrl : string -> bool adamc@769: adamc@769: val setMimeRules : rule list -> unit adamc@770: val getMimeRules : unit -> rule list adamc@769: val checkMime : string -> bool adamc@769: adamc@764: end