diff options
| author | adnano <[email protected]> | 2020-09-21 21:31:09 -0400 |
|---|---|---|
| committer | adnano <[email protected]> | 2020-09-21 21:31:09 -0400 |
| commit | 01294f666143d81700812a76ea020ad7b6a37e25 (patch) | |
| tree | fb9f16e33d0e8e1fae4e4109b8f111d47c77528a /server.go | |
| parent | Provide Handler with client remote address (diff) | |
| download | go-gemini-01294f666143d81700812a76ea020ad7b6a37e25.tar.xz go-gemini-01294f666143d81700812a76ea020ad7b6a37e25.zip | |
Refactor client requests and server responses
Diffstat (limited to 'server.go')
| -rw-r--r-- | server.go | 39 |
1 files changed, 25 insertions, 14 deletions
@@ -92,22 +92,33 @@ func (s *Server) Serve(ln net.Listener) error { return err } - req, err := readLine(rw) - if err != nil { - continue - } - url, err := url.Parse(req) - if err != nil { - continue + var resp *Response + + if rawurl, err := readLine(rw); err != nil { + resp = &Response{ + Status: StatusBadRequest, + Meta: "Bad request", + } + } else if len(rawurl) > 1024 { + resp = &Response{ + Status: StatusBadRequest, + Meta: "URL exceeds 1024 bytes", + } + } else if url, err := url.Parse(rawurl); err != nil { + resp = &Response{ + Status: StatusBadRequest, + Meta: "Invalid URL", + } + } else { + // Gather information about the request + reqInfo := &RequestInfo{ + URL: url, + Certificates: rw.(*tls.Conn).ConnectionState().PeerCertificates, + RemoteAddr: rw.RemoteAddr(), + } + resp = s.Handler.Serve(reqInfo) } - // Gather information about the request - reqInfo := &RequestInfo{ - URL: url, - Certificates: rw.(*tls.Conn).ConnectionState().PeerCertificates, - RemoteAddr: rw.RemoteAddr(), - } - resp := s.Handler.Serve(reqInfo) resp.Write(rw) rw.Close() } |