Code

Add support for variable root mount points.
[sysdb/webui.git] / server / error.go
1 //
2 // Copyright (C) 2014 Sebastian 'tokkee' Harl <sh@tokkee.org>
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions
7 // are met:
8 // 1. Redistributions of source code must retain the above copyright
9 //    notice, this list of conditions and the following disclaimer.
10 // 2. Redistributions in binary form must reproduce the above copyright
11 //    notice, this list of conditions and the following disclaimer in the
12 //    documentation and/or other materials provided with the distribution.
13 //
14 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
15 // ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
16 // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
18 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23 // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24 // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 package server
28 // Error handlers for the SysDB web interface.
30 import (
31         "bytes"
32         "fmt"
33         "io"
34         "log"
35         "net/http"
36 )
38 func (s *Server) notfound(w http.ResponseWriter, r *http.Request) {
39         s.err(w, http.StatusNotFound, fmt.Errorf("%s not found", r.URL.Path))
40 }
42 func (s *Server) badrequest(w http.ResponseWriter, err error) {
43         s.err(w, http.StatusBadRequest, err)
44 }
46 func (s *Server) internal(w http.ResponseWriter, err error) {
47         s.err(w, http.StatusInternalServerError, err)
48 }
50 func (s *Server) err(w http.ResponseWriter, status int, err error) {
51         log.Printf("%s: %v", http.StatusText(status), err)
53         page := page{
54                 Title:   "SysDB - Error",
55                 Content: "<section class=\"error\">" + html(err.Error()) + "</section>",
56         }
58         var buf bytes.Buffer
59         err = s.main.Execute(&buf, &page)
60         if err != nil {
61                 // Nothing more we can do about this.
62                 http.Error(w, err.Error(), http.StatusInternalServerError)
63                 return
64         }
66         w.WriteHeader(status)
67         io.Copy(w, &buf)
68 }
70 // vim: set tw=78 sw=4 sw=4 noexpandtab :