gofmt programm

This commit is contained in:
Simon Rieger 2024-04-01 11:26:45 +02:00
parent 40ea8d95df
commit 304a5911e2

View file

@ -54,118 +54,118 @@ func homeHandler(w http.ResponseWriter, r *http.Request) {
} }
func uploadHandler(w http.ResponseWriter, r *http.Request) { func uploadHandler(w http.ResponseWriter, r *http.Request) {
// Setzen der Content Security Policy // Setzen der Content Security Policy
w.Header().Set("Content-Security-Policy", "default-src 'self'; script-src 'self'; object-src 'none';") w.Header().Set("Content-Security-Policy", "default-src 'self'; script-src 'self'; object-src 'none';")
mu.Lock() mu.Lock()
defer mu.Unlock() defer mu.Unlock()
if time.Since(lastUploadTime) < uploadInterval { if time.Since(lastUploadTime) < uploadInterval {
http.Error(w, "Nur alle 10 Sekunden erlaubt", http.StatusTooManyRequests) http.Error(w, "Nur alle 10 Sekunden erlaubt", http.StatusTooManyRequests)
log.Printf("Bildupload zu häufig. Nur alle 10 Sekunden erlaubt.") log.Printf("Bildupload zu häufig. Nur alle 10 Sekunden erlaubt.")
return return
} }
if r.Method == http.MethodPost { if r.Method == http.MethodPost {
file, handler, err := r.FormFile("image") file, handler, err := r.FormFile("image")
if err != nil { if err != nil {
http.Error(w, "Fehler beim Lesen der Datei", http.StatusInternalServerError) http.Error(w, "Fehler beim Lesen der Datei", http.StatusInternalServerError)
log.Printf("Fehler beim Lesen der Datei: %v", err) log.Printf("Fehler beim Lesen der Datei: %v", err)
return return
} }
defer file.Close() defer file.Close()
// Überprüfen Sie den MIME-Typ der Datei // Überprüfen Sie den MIME-Typ der Datei
buffer := make([]byte, 512) // Genug für die Erkennung des MIME-Typs buffer := make([]byte, 512) // Genug für die Erkennung des MIME-Typs
_, err = file.Read(buffer) _, err = file.Read(buffer)
if err != nil { if err != nil {
http.Error(w, "Fehler beim Lesen der Datei", http.StatusInternalServerError) http.Error(w, "Fehler beim Lesen der Datei", http.StatusInternalServerError)
log.Printf("Fehler beim Lesen der Datei für MIME-Typ-Erkennung: %v", err) log.Printf("Fehler beim Lesen der Datei für MIME-Typ-Erkennung: %v", err)
return return
} }
mimeType := http.DetectContentType(buffer) mimeType := http.DetectContentType(buffer)
if !strings.HasPrefix(mimeType, "image/") && !strings.HasPrefix(mimeType, "text/xml") && !strings.HasPrefix(mimeType, "image/svg+xml") { if !strings.HasPrefix(mimeType, "image/") && !strings.HasPrefix(mimeType, "text/xml") && !strings.HasPrefix(mimeType, "image/svg+xml") {
http.Error(w, "Nur Bild-Uploads sind erlaubt", http.StatusBadRequest) http.Error(w, "Nur Bild-Uploads sind erlaubt", http.StatusBadRequest)
log.Printf("Versuch, eine Nicht-Bild-Datei hochzuladen: %v", mimeType) log.Printf("Versuch, eine Nicht-Bild-Datei hochzuladen: %v", mimeType)
return return
} }
_, err = file.Seek(0, io.SeekStart) _, err = file.Seek(0, io.SeekStart)
if err != nil { if err != nil {
http.Error(w, "Fehler beim Zurücksetzen des Dateizeigers", http.StatusInternalServerError) http.Error(w, "Fehler beim Zurücksetzen des Dateizeigers", http.StatusInternalServerError)
log.Printf("Fehler beim Zurücksetzen des Dateizeigers: %v", err) log.Printf("Fehler beim Zurücksetzen des Dateizeigers: %v", err)
return return
} }
// Ermitteln, ob der ursprüngliche Dateiname erzwungen werden soll // Ermitteln, ob der ursprüngliche Dateiname erzwungen werden soll
//forceName := r.Header.Get("Force-Name") //forceName := r.Header.Get("Force-Name")
forceName := r.FormValue("force_name") forceName := r.FormValue("force_name")
var filename string var filename string
if forceName == "true" { if forceName == "true" {
filename = handler.Filename filename = handler.Filename
} else { } else {
// Zeitstempel zum Dateinamen hinzufügen // Zeitstempel zum Dateinamen hinzufügen
timestamp := time.Now().Format("20060102-150405") timestamp := time.Now().Format("20060102-150405")
filename = fmt.Sprintf("%s-%s", timestamp, handler.Filename) filename = fmt.Sprintf("%s-%s", timestamp, handler.Filename)
} }
// Datei speichern // Datei speichern
uploadPath := "./uploads/" + filename uploadPath := "./uploads/" + filename
f, err := os.Create(uploadPath) f, err := os.Create(uploadPath)
if err != nil { if err != nil {
http.Error(w, "Fehler beim Erstellen der Datei", http.StatusInternalServerError) http.Error(w, "Fehler beim Erstellen der Datei", http.StatusInternalServerError)
log.Printf("Fehler beim Erstellen der Datei: %v", err) log.Printf("Fehler beim Erstellen der Datei: %v", err)
return return
} }
defer f.Close() defer f.Close()
_, copyErr := io.Copy(f, file) _, copyErr := io.Copy(f, file)
if copyErr != nil { if copyErr != nil {
http.Error(w, "Fehler beim Kopieren der Datei", http.StatusInternalServerError) http.Error(w, "Fehler beim Kopieren der Datei", http.StatusInternalServerError)
log.Printf("Fehler beim Kopieren der Datei: %v", copyErr) log.Printf("Fehler beim Kopieren der Datei: %v", copyErr)
return return
} }
lastUploadTime = time.Now() // Setzen Sie die Zeit des letzten Uploads lastUploadTime = time.Now() // Setzen Sie die Zeit des letzten Uploads
tmpl, err := template.ParseFiles("templates/uploadSuccess.html") tmpl, err := template.ParseFiles("templates/uploadSuccess.html")
if err != nil { if err != nil {
http.Error(w, "Fehler beim Laden des Templates", http.StatusInternalServerError) http.Error(w, "Fehler beim Laden des Templates", http.StatusInternalServerError)
log.Printf("Fehler beim Laden des Templates: %v", err) log.Printf("Fehler beim Laden des Templates: %v", err)
return return
} }
data := struct { data := struct {
Message string Message string
Filename string Filename string
}{ }{
Message: "Bild erfolgreich hochgeladen.", Message: "Bild erfolgreich hochgeladen.",
Filename: filename, // Geändert, um den möglicherweise modifizierten Dateinamen anzuzeigen Filename: filename, // Geändert, um den möglicherweise modifizierten Dateinamen anzuzeigen
} }
err = tmpl.Execute(w, data) err = tmpl.Execute(w, data)
if err != nil { if err != nil {
http.Error(w, "Fehler beim Rendern des Templates", http.StatusInternalServerError) http.Error(w, "Fehler beim Rendern des Templates", http.StatusInternalServerError)
log.Printf("Fehler beim Rendern des Templates: %v", err) log.Printf("Fehler beim Rendern des Templates: %v", err)
return return
} }
} else { } else {
tmpl, err := template.ParseFiles("templates/uploadForm.html") tmpl, err := template.ParseFiles("templates/uploadForm.html")
if err != nil { if err != nil {
http.Error(w, "Fehler beim Laden des Templates", http.StatusInternalServerError) http.Error(w, "Fehler beim Laden des Templates", http.StatusInternalServerError)
log.Printf("Fehler beim Laden des Templates: %v", err) log.Printf("Fehler beim Laden des Templates: %v", err)
return return
} }
err = tmpl.Execute(w, nil) err = tmpl.Execute(w, nil)
if err != nil { if err != nil {
http.Error(w, "Fehler beim Rendern des Templates", http.StatusInternalServerError) http.Error(w, "Fehler beim Rendern des Templates", http.StatusInternalServerError)
log.Printf("Fehler beim Rendern des Templates: %v", err) log.Printf("Fehler beim Rendern des Templates: %v", err)
return return
} }
} }
} }
// Funktion zur Ermittlung des MIME-Types basierend auf der Dateiendung // Funktion zur Ermittlung des MIME-Types basierend auf der Dateiendung