]> Sergey Matveev's repositories - godlighty.git/blobdiff - doc/cfg.texi
Small comments
[godlighty.git] / doc / cfg.texi
diff --git a/doc/cfg.texi b/doc/cfg.texi
new file mode 100644 (file)
index 0000000..79b3d05
--- /dev/null
@@ -0,0 +1,136 @@
+@node Configuration
+@unnumbered Configuration
+
+Initially @command{godlighty} has basic static files handlers (with
+compression, HTTP preconditions are enabled of course). In the example
+below there are nearly all default functions.
+Also look for @file{rc/example.cfg}.
+
+@verbatim
+Hosts["example.com"] = &godlighty.HostCfg{
+    Root: "/www/example.com",
+    TLS: &godlighty.TLSCfg{
+        Cert: "/path/to/example.com.pem",
+        Key: "/path/to/example.com.key.pem",
+        CACert: "/path/to/ca.pem",
+    },
+    DirList: true,
+    WebDAV: true,
+    MIMEs: map[string]string{
+        ".special": "text/x-special-type",
+    },
+}
+@end verbatim
+
+If your keys and certificates are in single file and you use common CA
+certificate, then it is trivial to DRY:
+
+@verbatim
+var (
+    Etc = "/whatever"
+    CACert = path.Join(Etc, "ca.pem")
+)
+
+func newTLSCfg(host string) *godlighty.TLSCfg {
+    return &godlighty.TLSCfg{
+        Cert:   path.Join(Etc, host+".pem"),
+        Key:    path.Join(Etc, host+".pem"),
+        CACert: CACert,
+    }
+}
+@end verbatim
+
+But there are hooks that can do anything more. For example if you want
+to run CGI script or make a redirection (FastCGI handler example is in
+@file{rc/fcgi.example.cfg}):
+
+@verbatim
+HostCfg{
+    ...,
+    Hooks: []godlighty.Hook{
+        func(w http.ResponseWriter, r *http.Request) bool {
+            if r.URL.Path == "/" {
+                http.Redirect(w, r, "//here.we.go/", http.StatusMovedPermanently)
+                return true
+            }
+            return false
+        },
+        func(w http.ResponseWriter, r *http.Request) bool {
+            cgi.Handler{
+                Path: "/usr/local/libexec/git-core/git-http-backend",
+                Dir:  "/var/empty",
+                Env: []string{
+                    "GIT_PROJECT_ROOT=" + root,
+                    "GIT_HTTP_EXPORT_ALL=",
+                },
+            }.ServeHTTP(w, r)
+            return true
+        },
+    },
+@end verbatim
+
+You can separate your configuration files and add them through
+@code{init()} call:
+
+@verbatim
+$ ls rc/stargrave.org.cfg
+blog.stargrave.org.go
+ca.cypherpunks.ru.go
+cgi.go
+cryptoanarchy.ru.go
+git.go
+go.go
+if.mirror.cypherpunks.ru.go
+lists.cypherpunks.ru.go
+static.go
+tls.go
+[...]
+
+$ cat rc/stargrave.org.cfg/static.go
+package rc
+
+import "path"
+
+func addStaticCfg(host, root string) {
+    if !path.IsAbs(root) {
+        root = path.Join(WWW, root)
+    }
+    godlighty.Hosts[host] = &godlighty.HostCfg{
+        Root: root,
+        TLS:  newTLSCfg(host),
+    }
+}
+
+func addStaticListedDir(host, root string) {
+    addStaticCfg(host, root)
+    godlighty.Hosts[host].DirList = true
+    godlighty.Hosts[host].WebDAV = true
+}
+
+func init() {
+    [...]
+    addStaticCfg("paster.stargrave.org", "/storage/paster/pastes")
+    addStaticCfg("www.godlighty.stargrave.org", "godlighty.stargrave.org")
+    addStaticCfg("www.nncpgo.org", "nncpgo.org")
+    addStaticListedDir("www.mds.cypherpunks.ru", "/storage/audiobook/mds")
+    [...]
+}
+@end verbatim
+
+There are some preexisting helpers to deal with:
+
+@table @file
+
+@item rc/cgi.go
+CGI scripts.
+
+@item rc/redirect.go
+Loggable redirects.
+
+@item rc/mime.go, rc/mime/*
+Predefined @code{Content-Type} entries. Each file in @file{rc/mime/*}
+has tab-separated format: file's extension, media type and optional
+@code{c} mark, meaning that these type can be transparently compressed
+on-the-fly.
+
+@end table