Force correct Content-Type for public files and add OPTIONS handlers for CORS
This commit is contained in:
@@ -356,12 +356,30 @@ func NewRouter(cfg *config.Config, db *database.DB, jwtManager *jwt.Manager, aut
|
||||
r.Get("/share/{token}", func(w http.ResponseWriter, req *http.Request) {
|
||||
publicFileShareHandler(w, req, db, jwtManager)
|
||||
})
|
||||
r.Options("/share/{token}", func(w http.ResponseWriter, req *http.Request) {
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Range")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
r.Get("/share/{token}/download", func(w http.ResponseWriter, req *http.Request) {
|
||||
publicFileDownloadHandler(w, req, db, cfg, jwtManager)
|
||||
})
|
||||
r.Options("/share/{token}/download", func(w http.ResponseWriter, req *http.Request) {
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Range")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
r.Get("/share/{token}/view", func(w http.ResponseWriter, req *http.Request) {
|
||||
publicFileViewHandler(w, req, db, cfg, jwtManager)
|
||||
})
|
||||
r.Options("/share/{token}/view", func(w http.ResponseWriter, req *http.Request) {
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Range")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
})
|
||||
})
|
||||
|
||||
return r
|
||||
@@ -3062,15 +3080,15 @@ func publicFileDownloadHandler(w http.ResponseWriter, r *http.Request, db *datab
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Range")
|
||||
|
||||
// Copy headers from Nextcloud response
|
||||
// Copy headers from Nextcloud response, but skip Content-Type to ensure correct MIME type
|
||||
for k, v := range resp.Header {
|
||||
w.Header()[k] = v
|
||||
if k != "Content-Type" {
|
||||
w.Header()[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure Content-Type is set
|
||||
if w.Header().Get("Content-Type") == "" {
|
||||
w.Header().Set("Content-Type", mimeType)
|
||||
}
|
||||
// Set correct Content-Type based on file extension
|
||||
w.Header().Set("Content-Type", mimeType)
|
||||
|
||||
// Ensure download behavior
|
||||
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", file.Name))
|
||||
@@ -3170,15 +3188,15 @@ func publicFileViewHandler(w http.ResponseWriter, r *http.Request, db *database.
|
||||
w.Header().Set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS")
|
||||
w.Header().Set("Access-Control-Allow-Headers", "Range")
|
||||
|
||||
// Copy headers from Nextcloud response
|
||||
// Copy headers from Nextcloud response, but skip Content-Type to ensure correct MIME type
|
||||
for k, v := range resp.Header {
|
||||
w.Header()[k] = v
|
||||
if k != "Content-Type" {
|
||||
w.Header()[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure Content-Type is set
|
||||
if w.Header().Get("Content-Type") == "" {
|
||||
w.Header().Set("Content-Type", mimeType)
|
||||
}
|
||||
// Set correct Content-Type based on file extension
|
||||
w.Header().Set("Content-Type", mimeType)
|
||||
|
||||
// Ensure inline viewing behavior (no Content-Disposition attachment)
|
||||
w.Header().Del("Content-Disposition")
|
||||
|
||||
Reference in New Issue
Block a user