diff options
| -rw-r--r-- | main.go | 20 |
1 files changed, 15 insertions, 5 deletions
@@ -34,7 +34,10 @@ type Server struct { } type Metadata struct { - ContentType string `json:"contentType"` + ContentType string `json:"contentType"` + RemoteAddr string `json:"remoteAddr"` + XForwardedFor string `json:"xForwardedFor"` + XForwardedProto string `json:"xForwardedProto"` } //go:embed template.html @@ -49,6 +52,12 @@ func detectMimetype(input io.Reader) (mimeType string, fileext string, recycled return mtype.String(), mtype.Extension(), recycled, err } +func populateMetadata(m *Metadata, r *http.Request) { + m.RemoteAddr = r.RemoteAddr + m.XForwardedFor = r.Header.Get("X-Forwarded-For") + m.XForwardedProto = r.Header.Get("X-Forwarded-Proto") +} + func serveAnsiHtml(w http.ResponseWriter, filename string) { f, err := os.Open(filename) if err != nil { @@ -108,7 +117,7 @@ func (s *Server) randomFile(ext string) (*os.File, string, error) { return f, name, nil } -func (s *Server) createPosting(rd io.Reader, mimeType string) (string, error) { +func (s *Server) createPosting(rd io.Reader, mimeType string, r *http.Request) (string, error) { var ext string if mimeType == "" { mimeType, ext, rd, _ = detectMimetype(rd) @@ -128,6 +137,7 @@ func (s *Server) createPosting(rd io.Reader, mimeType string) (string, error) { } f.Sync() m := Metadata{ContentType: mimeType} + populateMetadata(&m, r) if err = s.writeMetadata(name, &m); err != nil { return "", fmt.Errorf("writeMetadata(): %w", err) } @@ -140,7 +150,7 @@ func (s *Server) postText(r *http.Request) (string, error) { return "", nil } mimeType := r.Form.Get("text_mimetype") - return s.createPosting(strings.NewReader(text), mimeType) + return s.createPosting(strings.NewReader(text), mimeType, r) } func (s *Server) postFile(r *http.Request) (string, error) { @@ -150,7 +160,7 @@ func (s *Server) postFile(r *http.Request) (string, error) { return "", err } defer file.Close() - return s.createPosting(file, mimeType) + return s.createPosting(file, mimeType, r) } func (s *Server) servePosting(w http.ResponseWriter, r *http.Request, name string) { @@ -217,7 +227,7 @@ func (s *Server) post(w http.ResponseWriter, r *http.Request) { if mimeType == "application/x-www-form-urlencoded" { mimeType = "" } - name, err := s.createPosting(r.Body, mimeType) + name, err := s.createPosting(r.Body, mimeType, r) if err != nil { log.Print("failed to create file: ", err) w.WriteHeader(http.StatusInternalServerError) |
