summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarin Ivanov <[email protected]>2026-01-21 10:47:04 +0200
committerMarin Ivanov <[email protected]>2026-01-21 10:47:04 +0200
commit727cee30de0ecc46399c0a412a4b4656db75a275 (patch)
treeab46666e3e093f9181330ca41008788b41c96a41
parentd7e711a4fa63a90ee966d3e7c55245c530ff2fee (diff)
Write RemoteAddr and X-Forwarded-{for,Proto} into the metadataHEADmaster
-rw-r--r--main.go20
1 files changed, 15 insertions, 5 deletions
diff --git a/main.go b/main.go
index 2b531a9..634f4ea 100644
--- a/main.go
+++ b/main.go
@@ -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)