(w http.ResponseWriter, r *http.Request)
| 44 | } |
| 45 | |
| 46 | func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { |
| 47 | var err error |
| 48 | |
| 49 | clientLogger := h.logger.Context("Client (%s)", r.RemoteAddr) |
| 50 | |
| 51 | if len(h.commonCfg.HostName) > 0 { |
| 52 | hostPort := r.Host |
| 53 | |
| 54 | if len(hostPort) <= 0 { |
| 55 | hostPort = r.URL.Host |
| 56 | } |
| 57 | |
| 58 | if h.commonCfg.HostName != hostPort && |
| 59 | !strings.HasPrefix(hostPort, h.hostNameChecker) { |
| 60 | clientLogger.Warning("Request invalid host \"%s\", deined", |
| 61 | r.Host) |
| 62 | |
| 63 | serveFailure( |
| 64 | NewError(http.StatusForbidden, "Invalid host"), w, r, h.logger) |
| 65 | |
| 66 | return |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | w.Header().Add("Date", time.Now().UTC().Format(time.RFC1123)) |
| 71 | |
| 72 | switch r.URL.Path { |
| 73 | case "/": |
| 74 | err = serveController(h.homeCtl, w, r, clientLogger) |
| 75 | |
| 76 | case "/socket": |
| 77 | err = serveController(h.socketCtl, w, r, clientLogger) |
| 78 | |
| 79 | case "/robots.txt": |
| 80 | fallthrough |
| 81 | case "/favicon.ico": |
| 82 | fallthrough |
| 83 | case "/README.md": |
| 84 | fallthrough |
| 85 | case "/LICENSE.md": |
| 86 | fallthrough |
| 87 | case "/DEPENDENCIES.md": |
| 88 | err = serveStaticData(r.URL.Path[1:], w, r, clientLogger) |
| 89 | |
| 90 | default: |
| 91 | if strings.HasPrefix(r.URL.Path, "/assets/") { |
| 92 | err = serveStaticData(r.URL.Path[8:], w, r, clientLogger) |
| 93 | } else { |
| 94 | err = ErrNotFound |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | if err == nil { |
| 99 | clientLogger.Info("Request completed: %s", r.URL.String()) |
| 100 | |
| 101 | return |
| 102 | } |
| 103 |
nothing calls this directly
no test coverage detected