Skip to content

Commit ed85d93

Browse files
authored
Merge pull request #573 from yosaka/feature/202501-rcos-office
[GRDM-48578] オフィスソフトウエア連携機能実装 エラー処理追加、不具合修正 (to rcos-release branch)
2 parents f90dbae + 327a5a8 commit ed85d93

File tree

8 files changed

+173
-75
lines changed

8 files changed

+173
-75
lines changed

addons/onlyoffice/requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
#
2-
pycryptodome==3.20.0

addons/onlyoffice/routes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
edit_routes = {
88
# Edit by ONLYOFFICE
99
'rules': [
10-
Rule(['/<guid>/editonlyoffice/<file_id>'], 'get',
10+
Rule(['/<guid>/editonlyoffice/<provider>/<path:path>/'], 'get',
1111
views.onlyoffice_edit_by_onlyoffice,
1212
OsfWebRenderer('edit_online.mako', trust=True, template_dir=TEMPLATE_DIR),)
1313
]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<%inherit file="base.mako"/>
2+
<%def name="title()">${message_short}</%def>
3+
<%def name="content()">
4+
<div class="container">
5+
<div class='row'>
6+
<div class='col-md-12'>
7+
<h2 id='error' data-http-status-code="${code}">${message_short}</h2>
8+
<p>${ message_long | unicode, n }</p>
9+
</div>
10+
</div>
11+
</div>
12+
</%def>

addons/onlyoffice/tests/test_view.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ def test_check_file_info(self):
8989
mock_filenode = Filenode()
9090
mock_filenode.name = 'filename.docx'
9191
mock_user_info = {'user_id': 'userid', 'full_name': 'fullname', 'display_name': 'dispname'}
92-
mock_file_info = {'name': 'filename.docx'}
92+
mock_file_info = {'name': 'filename.docx', 'mtime': '202501010000'}
93+
mock_file_version = ''
9394
mock_access_token = {websettings.COOKIE_NAME: 'cookie'}
9495

9596
with mock.patch.object(BaseFileNode.objects, 'get', return_value=mock_filenode):
@@ -98,6 +99,7 @@ def test_check_file_info(self):
9899
with mock.patch.object(onlyoffice_token, 'decrypt', return_value=mock_jsonobj):
99100
with mock.patch.object(onlyoffice_token, 'check_token', return_value=mock_check_token):
100101
with mock.patch.object(onlyoffice_util, 'get_file_info', return_value=mock_file_info):
101-
with mock.patch.object(onlyoffice_util, 'check_proof_key', return_value=mock_proof_key):
102-
res = onlyoffice_check_file_info(file_id='ABCDEFG')
102+
with mock.patch.object(onlyoffice_util, 'get_file_version', return_value=mock_file_version):
103+
with mock.patch.object(onlyoffice_util, 'check_proof_key', return_value=mock_proof_key):
104+
res = onlyoffice_check_file_info(file_id='ABCDEFG')
103105
assert res['BaseFileName'] == 'filename.docx'

addons/onlyoffice/util.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
import logging
33
import requests
44
from lxml import etree
5-
from osf.models import BaseFileNode, OSFUser
5+
from osf.models import OSFUser
6+
from osf.utils.permissions import WRITE
67
from requests.exceptions import RequestException
78

89
from . import settings
910
from . import proof_key as pfkey
10-
logger = logging.getLogger(__name__)
1111

12+
logger = logging.getLogger(__name__)
1213

1314
def 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

Comments
 (0)