package contented import ( "fmt" "html" "log" "net/http" "os" "strings" "time" ) func (this *Server) handlePreview(w http.ResponseWriter, fileIDList string) { fileIDs := strings.Split(fileIDList, `-`) tmpl := `<!DOCTYPE html> <html> <head> <title>` + html.EscapeString(this.opts.ServerPublicProperties.AppTitle) + `</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type="text/css"> html, body { background: #333; color: #F0F0F0; font-family: sans-serif; } .entry { display: inline-block; margin: 4px; border-radius: 4px; max-width: 340px; } .thumbnail { line-height: 0; width: 340px; text-align: center; } .properties { background: #000; padding: 4px; word-break: break-word; } </style> </head> <body> <div class="container"> ` for _, fileID := range fileIDs { m, err := this.Metadata(fileID) if err != nil { if os.IsNotExist(err) { http.Error(w, "Not found", 404) return } log.Println(err.Error()) http.Error(w, "Internal error", 500) return } tmpl += ` <div class="entry"> <div class="thumbnail"> <a href="` + html.EscapeString(`/get/`+fileID) + `"><img src="` + html.EscapeString(`/thumb/m/`+fileID) + `"></a> </div> <div class="properties"> <b>Name:</b> ` + html.EscapeString(m.Filename) + `<br> <b>Hash:</b> <span title="` + html.EscapeString(m.FileHash) + `">hover</span><br> <b>File type:</b> ` + html.EscapeString(m.MimeType) + `<br> <b>Size:</b> ` + html.EscapeString(fmt.Sprintf("%d", m.FileSize)) + `<br> <b>Uploader:</b> ` + html.EscapeString(m.UploadIP) + `<br> <b>Uploaded at:</b> ` + html.EscapeString(m.UploadTime.Format(time.RFC3339)) + `<br> </div> </div> ` } if this.opts.EnableHomepage { tmpl += ` <div class="return"> <button onclick="window.location.href='/'">Again...</button> </div> ` } tmpl += ` </div> </body> </html>` w.Header().Set(`Content-Type`, `text/html; charset=UTF-8`) w.Header().Set(`Content-Length`, fmt.Sprintf("%d", len(tmpl))) w.WriteHeader(200) w.Write([]byte(tmpl)) }