Fix: Collabora proxy handler - create WOPI session inline instead of calling non-existent function
This commit is contained in:
@@ -625,14 +625,43 @@ func collaboraProxyHandler(w http.ResponseWriter, r *http.Request, db *database.
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create WOPI session
|
// Get file info
|
||||||
wopiSrc, accessToken, err := createWOPISession(r.Context(), db, jwtManager, userID, fileID)
|
fileUUID, err := uuid.Parse(fileID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("[WOPI-ERROR] Failed to create session: %v\n", err)
|
errors.WriteError(w, errors.CodeInvalidArgument, "Invalid fileId format", http.StatusBadRequest)
|
||||||
errors.WriteError(w, errors.CodeInternal, "Failed to create WOPI session", http.StatusInternalServerError)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
file, err := db.GetFileByID(r.Context(), fileUUID)
|
||||||
|
if err != nil {
|
||||||
|
errors.WriteError(w, errors.CodeNotFound, "File not found", http.StatusNotFound)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify access
|
||||||
|
canAccess := false
|
||||||
|
if file.UserID != nil && *file.UserID == userID {
|
||||||
|
canAccess = true
|
||||||
|
} else if file.OrgID != nil {
|
||||||
|
member, err := db.GetOrgMember(r.Context(), *file.OrgID, userID)
|
||||||
|
canAccess = (err == nil && member != nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !canAccess {
|
||||||
|
errors.WriteError(w, errors.CodePermissionDenied, "Access denied", http.StatusForbidden)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate WOPI access token (1 hour duration)
|
||||||
|
accessToken, err := jwtManager.GenerateWithDuration(userID.String(), nil, "", 1*time.Hour)
|
||||||
|
if err != nil {
|
||||||
|
errors.WriteError(w, errors.CodeInternal, "Failed to generate token", http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build WOPISrc URL
|
||||||
|
wopiSrc := fmt.Sprintf("https://go.b0esche.cloud/wopi/files/%s?access_token=%s", fileID, accessToken)
|
||||||
|
|
||||||
// Return HTML page with auto-submitting form
|
// Return HTML page with auto-submitting form
|
||||||
htmlContent := fmt.Sprintf(`<!DOCTYPE html>
|
htmlContent := fmt.Sprintf(`<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
@@ -663,5 +692,5 @@ func collaboraProxyHandler(w http.ResponseWriter, r *http.Request, db *database.
|
|||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
w.Write([]byte(htmlContent))
|
w.Write([]byte(htmlContent))
|
||||||
|
|
||||||
fmt.Printf("[COLLABORA-PROXY] Served HTML form: file=%s user=%s\n", fileID, userID.String())
|
fmt.Printf("[COLLABORA-PROXY] Served HTML form: file=%s user=%s wopi_src=%s\n", fileID, userID.String(), wopiSrc)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user