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) badrequest(w http.ResponseWriter, err error) {
44 s.err(w, http.StatusBadRequest, err)
45 }
47 func (s *Server) internal(w http.ResponseWriter, err error) {
48 s.err(w, http.StatusInternalServerError, err)
49 }
51 func (s *Server) err(w http.ResponseWriter, status int, err error) {
52 log.Printf("%s: %v", http.StatusText(status), err)
54 page := struct {
55 Title string
56 Query string
57 Content template.HTML
58 }{
59 Title: "SysDB - Error",
60 Content: "<section class=\"error\">" + html(err.Error()) + "</section>",
61 }
63 var buf bytes.Buffer
64 err = s.main.Execute(&buf, &page)
65 if err != nil {
66 // Nothing more we can do about this.
67 http.Error(w, err.Error(), http.StatusInternalServerError)
68 return
69 }
71 w.WriteHeader(status)
72 io.Copy(w, &buf)
73 }
75 // vim: set tw=78 sw=4 sw=4 noexpandtab :