22import logging
33import requests
44from lxml import etree
5- from osf .models import BaseFileNode , OSFUser
5+ from osf .models import OSFUser
6+ from osf .utils .permissions import WRITE
67from requests .exceptions import RequestException
78
89from . import settings
910from . import proof_key as pfkey
10- logger = logging .getLogger (__name__ )
1111
12+ logger = logging .getLogger (__name__ )
1213
1314def get_user_info (cookie ):
1415 user = OSFUser .from_cookie (cookie )
@@ -42,7 +43,7 @@ def get_file_info(file_node, file_version, cookies):
4243 )
4344 response .raise_for_status ()
4445 except RequestException as e :
45- logger .debug ('onlyoffice: get_file_info = {}' .format (e ))
46+ logger .warning ('onlyoffice: get_file_info = {}' .format (e ))
4647 return None
4748
4849 file_data = response .json ().get ('data' )
@@ -57,14 +58,11 @@ def get_file_info(file_node, file_version, cookies):
5758 return file_info
5859
5960
60- def get_file_version (file_id ):
61+ def get_file_version (file_node ):
6162 file_version = ''
62- base_file_data = BaseFileNode .objects .filter (_id = file_id )
63- if base_file_data .exists ():
64- file_node = BaseFileNode .load (file_id )
65- if file_node .provider == 'osfstorage' :
66- base_file_data = base_file_data .get ()
67- file_versions = base_file_data .versions .all ()
63+ if file_node .provider == 'osfstorage' :
64+ file_versions = file_node .versions .all ()
65+ if file_versions is not None and file_versions .exists ():
6866 file_version = file_versions .latest ('id' ).identifier
6967 return file_version
7068
@@ -183,3 +181,17 @@ def check_proof_key(pkhelper, request, access_token):
183181 else :
184182 logger .warning ('onlyoffice: proof key check return False.' )
185183 return False
184+
185+
186+ def check_permission (user , file_node , target ):
187+ if not user :
188+ logger .warning ('onlyoffice: check_permission: no OSFUser' )
189+ return False
190+ logger .info ('check_permission user : {}' .format (user ._id ))
191+
192+ # SEE ALSO: addons/osfstorage/views.py:osfstorage_create_child()
193+ # checkout: used for OsfStorage
194+ if file_node .checkout and file_node .checkout ._id != user ._id :
195+ return False
196+
197+ return target .has_permission (user , WRITE )
0 commit comments