Code

49fec434712585a015cbf0058500dee05649cf35
[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         "html/template"
34         "io"
35         "log"
36         "net/http"
37 )
39 func (s *Server) notfound(w http.ResponseWriter, r *http.Request) {
40         s.err(w, http.StatusNotFound, fmt.Errorf("%s not found", r.RequestURI))
41 }
43 func (s *Server) internal(w http.ResponseWriter, err error) {
44         s.err(w, http.StatusInternalServerError, err)
45 }
47 func (s *Server) err(w http.ResponseWriter, status int, err error) {
48         log.Printf("%s: %v", http.StatusText(status), err)
50         page := struct {
51                 Title   string
52                 Query   string
53                 Content template.HTML
54         }{
55                 Title:   "SysDB - Error",
56                 Content: "<section class=\"error\">" + html(err.Error()) + "</section>",
57         }
59         var buf bytes.Buffer
60         err = s.main.Execute(&buf, &page)
61         if err != nil {
62                 // Nothing more we can do about this.
63                 http.Error(w, err.Error(), http.StatusInternalServerError)
64                 return
65         }
67         w.WriteHeader(status)
68         io.Copy(w, &buf)
69 }
71 // vim: set tw=78 sw=4 sw=4 noexpandtab :