1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-24 17:49:44 +00:00

support view file via CollaboraOnline (#6200)

This commit is contained in:
lian 2024-06-18 16:11:38 +08:00 committed by GitHub
parent e12f941bfe
commit 32c4ee62c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 23 additions and 9 deletions

View File

@ -2,8 +2,9 @@
import os import os
import re import re
import time import time
import urllib.request, urllib.parse, urllib.error import urllib.request
import urllib.parse import urllib.parse
import urllib.error
import requests import requests
import hashlib import hashlib
import logging import logging
@ -30,12 +31,14 @@ from seahub.settings import ENABLE_WATERMARK
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def generate_access_token_cache_key(token): def generate_access_token_cache_key(token):
""" Generate cache key for WOPI access token """ Generate cache key for WOPI access token
""" """
return 'wopi_access_token_' + str(token) return 'wopi_access_token_' + str(token)
def get_file_info_by_token(token): def get_file_info_by_token(token):
""" Get file info from cache by access token """ Get file info from cache by access token
@ -50,6 +53,7 @@ def get_file_info_by_token(token):
return value if value else None return value if value else None
def generate_discovery_cache_key(name, ext): def generate_discovery_cache_key(name, ext):
""" Generate cache key for office web app hosting discovery """ Generate cache key for office web app hosting discovery
@ -59,9 +63,10 @@ def generate_discovery_cache_key(name, ext):
return 'wopi_' + name + '_' + ext return 'wopi_' + name + '_' + ext
def get_wopi_dict(request_user, repo_id, file_path, def get_wopi_dict(request_user, repo_id, file_path,
action_name='view', can_download=True, action_name='view', can_download=True,
language_code='en', obj_id=''): language_code='en', obj_id=''):
""" Prepare dict data for WOPI host page """ Prepare dict data for WOPI host page
""" """
@ -82,6 +87,14 @@ def get_wopi_dict(request_user, repo_id, file_path,
file_ext = 'xlsx' file_ext = 'xlsx'
wopi_key = generate_discovery_cache_key(action_name, file_ext) wopi_key = generate_discovery_cache_key(action_name, file_ext)
if OFFICE_SERVER_TYPE.lower() == 'collaboraoffice':
# Since the hosting discover page of Collabora Online does not provide
# a URL with the action set to "view" for some common file formats,
# we always use "edit" here.
# Preview file is achieved by setting `UserCanWrite` to `False` in `CheckFileInfo`.
wopi_key = generate_discovery_cache_key('edit', file_ext)
action_url = cache.get(wopi_key) action_url = cache.get(wopi_key)
if not action_url: if not action_url:
@ -90,12 +103,13 @@ def get_wopi_dict(request_user, repo_id, file_path,
try: try:
if OFFICE_WEB_APP_CLIENT_CERT and OFFICE_WEB_APP_CLIENT_KEY: if OFFICE_WEB_APP_CLIENT_CERT and OFFICE_WEB_APP_CLIENT_KEY:
xml = requests.get(OFFICE_WEB_APP_BASE_URL, xml = requests.get(OFFICE_WEB_APP_BASE_URL,
cert=(OFFICE_WEB_APP_CLIENT_CERT, OFFICE_WEB_APP_CLIENT_KEY), cert=(OFFICE_WEB_APP_CLIENT_CERT,
verify=OFFICE_WEB_APP_SERVER_CA) OFFICE_WEB_APP_CLIENT_KEY),
verify=OFFICE_WEB_APP_SERVER_CA)
elif OFFICE_WEB_APP_CLIENT_PEM: elif OFFICE_WEB_APP_CLIENT_PEM:
xml = requests.get(OFFICE_WEB_APP_BASE_URL, xml = requests.get(OFFICE_WEB_APP_BASE_URL,
cert=OFFICE_WEB_APP_CLIENT_PEM, cert=OFFICE_WEB_APP_CLIENT_PEM,
verify=OFFICE_WEB_APP_SERVER_CA) verify=OFFICE_WEB_APP_SERVER_CA)
else: else:
xml = requests.get(OFFICE_WEB_APP_BASE_URL, verify=OFFICE_WEB_APP_SERVER_CA) xml = requests.get(OFFICE_WEB_APP_BASE_URL, verify=OFFICE_WEB_APP_SERVER_CA)
except Exception as e: except Exception as e:
@ -119,7 +133,7 @@ def get_wopi_dict(request_user, repo_id, file_path,
tmp_action_url = re.sub(r'<.*>', '', urlsrc) tmp_action_url = re.sub(r'<.*>', '', urlsrc)
tmp_wopi_key = generate_discovery_cache_key(name, ext) tmp_wopi_key = generate_discovery_cache_key(name, ext)
cache.set(tmp_wopi_key, tmp_action_url, cache.set(tmp_wopi_key, tmp_action_url,
OFFICE_WEB_APP_DISCOVERY_EXPIRATION) OFFICE_WEB_APP_DISCOVERY_EXPIRATION)
if wopi_key == tmp_wopi_key: if wopi_key == tmp_wopi_key:
action_url = tmp_action_url action_url = tmp_action_url

View File

@ -261,7 +261,7 @@ class WOPIFilesView(APIView):
result['ReadOnly'] = True if not can_edit else False result['ReadOnly'] = True if not can_edit else False
avatar_url, _, _ = api_avatar_url(request_user, int(72)) avatar_url, _, _ = api_avatar_url(request_user, int(72))
result['UserExtraInfo'] = { 'avatar': avatar_url, 'mail': request_user } result['UserExtraInfo'] = {'avatar': avatar_url, 'mail': request_user}
# new file creation feature is not implemented on wopi host(seahub) # new file creation feature is not implemented on wopi host(seahub)
# hide save as button on view/edit file page # hide save as button on view/edit file page