diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 988ee0c8aa..8429323e8b 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -25,8 +25,8 @@ jobs:
- name: clone and build
run: |
- git clone --depth=1 --branch=master git://github.com/haiwen/seafile-test-deploy /tmp/seafile-test-deploy
- cd /tmp/seafile-test-deploy && git fetch origin python3:python3 && git checkout python3
+ git clone --depth=1 --branch=8.0 git://github.com/haiwen/seafile-test-deploy /tmp/seafile-test-deploy
+ cd /tmp/seafile-test-deploy && git fetch origin 8.0:8.0 && git checkout 8.0
./bootstrap.sh
- name: pip install
diff --git a/frontend/src/components/dialog/share-to-other-server.js b/frontend/src/components/dialog/share-to-other-server.js
index 9d3abe6301..becf89dfe0 100644
--- a/frontend/src/components/dialog/share-to-other-server.js
+++ b/frontend/src/components/dialog/share-to-other-server.js
@@ -1,6 +1,7 @@
import React, { Fragment } from 'react';
+import Select from 'react-select';
import PropTypes from 'prop-types';
-import { gettext } from '../../utils/constants';
+import { gettext, ocmRemoteServers } from '../../utils/constants';
import { Input } from 'reactstrap';
import { Button } from 'reactstrap';
import { seafileAPI } from '../../utils/seafile-api.js';
@@ -34,7 +35,7 @@ class ShareItem extends React.Component {
let item = this.props.item;
return (
- {item.to_sever_url} |
+ {item.to_server_name} |
{item.to_user} |
{Utils.sharePerms(item.permission)} |
{/*
@@ -67,9 +68,9 @@ class ShareList extends React.Component {
- {gettext('Server URL')} |
+ {gettext('Server')} |
{gettext('User Email')} |
- {gettext('Permission')} |
+ {gettext('Permission')} |
|
@@ -155,7 +156,7 @@ class ShareToOtherServer extends React.Component {
handleURLChange = (e) => {
this.setState({
- toServerURL: e.target.value,
+ toServerURL: e.value,
});
}
@@ -185,17 +186,17 @@ class ShareToOtherServer extends React.Component {
- {gettext('Server URL')} |
+ {gettext('Server')} |
{gettext('User Email')} |
- {gettext('Permission')} |
+ {gettext('Permission')} |
|
-
|
diff --git a/frontend/src/pages/share-with-ocm/shared-with-ocm.js b/frontend/src/pages/share-with-ocm/shared-with-ocm.js
index 83756190c5..bb88449c7e 100644
--- a/frontend/src/pages/share-with-ocm/shared-with-ocm.js
+++ b/frontend/src/pages/share-with-ocm/shared-with-ocm.js
@@ -17,7 +17,7 @@ class Content extends Component {
const emptyTip = (
{gettext('No libraries have been shared with you')}
- {gettext('No libraries have been shared directly with you. You can find more shared libraries at "Shared with groups".')}
+ {gettext('No libraries have been shared with you from other servers.')}
);
diff --git a/frontend/src/utils/constants.js b/frontend/src/utils/constants.js
index b87a89ea9a..ba2e79cc63 100644
--- a/frontend/src/utils/constants.js
+++ b/frontend/src/utils/constants.js
@@ -68,6 +68,7 @@ export const enableShowContactEmailWhenSearchUser = window.app.pageOptions.enabl
export const maxUploadFileSize = window.app.pageOptions.maxUploadFileSize;
export const maxNumberOfFilesForFileupload = window.app.pageOptions.maxNumberOfFilesForFileupload;
export const enableOCM = window.app.pageOptions.enableOCM;
+export const ocmRemoteServers = window.app.pageOptions.ocmRemoteServers;
export const curNoteMsg = window.app.pageOptions.curNoteMsg;
export const curNoteID = window.app.pageOptions.curNoteID;
diff --git a/seahub/api2/endpoints/ocm.py b/seahub/api2/endpoints/ocm.py
index 9536b1c562..443f5098c7 100644
--- a/seahub/api2/endpoints/ocm.py
+++ b/seahub/api2/endpoints/ocm.py
@@ -15,7 +15,7 @@ from seahub.api2.authentication import TokenAuthentication
from seahub.api2.throttling import UserRateThrottle
from seahub.api2.utils import api_error
-from seaserv import seafile_api, ccnet_api
+from seaserv import seafile_api
from seahub.utils.repo import get_available_repo_perms, get_repo_owner
from seahub.base.templatetags.seahub_tags import email2nickname
@@ -25,7 +25,7 @@ from seahub.ocm.settings import ENABLE_OCM, SUPPORTED_OCM_PROTOCOLS, \
OCM_SEAFILE_PROTOCOL, OCM_RESOURCE_TYPE_LIBRARY, OCM_API_VERSION, \
OCM_SHARE_TYPES, OCM_ENDPOINT, OCM_PROVIDER_ID, OCM_NOTIFICATION_TYPE_LIST, \
OCM_NOTIFICATION_SHARE_UNSHARED, OCM_NOTIFICATION_SHARE_DECLINED, OCM_PROTOCOL_URL, \
- OCM_NOTIFICATION_URL, OCM_CREATE_SHARE_URL
+ OCM_NOTIFICATION_URL, OCM_CREATE_SHARE_URL, OCM_REMOTE_SERVERS
logger = logging.getLogger(__name__)
@@ -36,6 +36,12 @@ SEAFILE_PERMISSION2OCM_PERMISSION = {
}
+def get_server_name_by_url(url):
+ for name_domain_dict in OCM_REMOTE_SERVERS:
+ if name_domain_dict['server_url'] == url:
+ return name_domain_dict['server_name']
+
+
def gen_shared_secret(length=23):
return ''.join(random.choice(string.ascii_lowercase + string.digits) for i in range(length))
@@ -128,7 +134,6 @@ class OCMSharesView(APIView):
error_msg = 'providerId invalid.'
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
-
"""
other ocm protocol fields currently not used
@@ -289,7 +294,10 @@ class OCMSharesPrepareView(APIView):
ocm_share_list = []
for ocm_share in ocm_shares:
- ocm_share_list.append(ocm_share.to_dict())
+ ocm_info = ocm_share.to_dict()
+ ocm_info['to_server_name'] = get_server_name_by_url(ocm_share.to_server_url)
+ ocm_share_list.append(ocm_info)
+
return Response({'ocm_share_list': ocm_share_list})
def post(self, request):
@@ -366,8 +374,8 @@ class OCMSharesPrepareView(APIView):
'sender': from_user,
'ownerDisplayName': email2nickname(repo_owner),
'senderDisplayName': email2nickname(from_user),
- 'shareType': consumer_protocol['resourceTypes']['shareTypes'][0], # currently only support user type
- 'resourceType': consumer_protocol['resourceTypes']['name'], # currently only support repo
+ 'shareType': consumer_protocol['resourceTypes']['shareTypes'][0], # currently only support user type
+ 'resourceType': consumer_protocol['resourceTypes']['name'], # currently only support repo
'protocol': {
'name': OCM_SEAFILE_PROTOCOL,
'options': {
@@ -396,7 +404,10 @@ class OCMSharesPrepareView(APIView):
permission=permission,
)
- return Response(ocm_share.to_dict())
+ ocm_info = ocm_share.to_dict()
+ ocm_info['to_server_name'] = get_server_name_by_url(ocm_share.to_server_url)
+
+ return Response(ocm_info)
class OCMSharePrepareView(APIView):
diff --git a/seahub/ocm/models.py b/seahub/ocm/models.py
index 6574ae048d..cb98c1df46 100644
--- a/seahub/ocm/models.py
+++ b/seahub/ocm/models.py
@@ -48,7 +48,7 @@ class OCMShare(models.Model):
'shared_secret': self.shared_secret,
'from_user': self.from_user,
'to_user': self.to_user,
- 'to_sever_url': self.to_server_url,
+ 'to_server_url': self.to_server_url,
'repo_id': self.repo_id,
'repo_name': self.repo_name,
'path': self.path,
diff --git a/seahub/ocm/settings.py b/seahub/ocm/settings.py
index 7a21b43939..269468eb2a 100644
--- a/seahub/ocm/settings.py
+++ b/seahub/ocm/settings.py
@@ -32,3 +32,5 @@ VIA_REPO_TOKEN_URL = {
'UPLOAD_LINK': 'api/v2.1/via-repo-token/upload-link/',
'DOWNLOAD_LINK': 'api/v2.1/via-repo-token/download-link/',
}
+
+OCM_REMOTE_SERVERS = getattr(settings, 'OCM_REMOTE_SERVERS', {})
diff --git a/seahub/templates/base_for_react.html b/seahub/templates/base_for_react.html
index ef8c04ae1a..24d1434106 100644
--- a/seahub/templates/base_for_react.html
+++ b/seahub/templates/base_for_react.html
@@ -102,6 +102,16 @@
repoPasswordMinLength: {{repo_password_min_length}},
canAddPublicRepo: {% if can_add_public_repo %} true {% else %} false {% endif %},
enableOCM: {% if enable_ocm %} true {% else %} false {% endif %},
+ ocmRemoteServers: (function () {
+ var servers = [];
+ {% for server in ocm_remote_servers %}
+ servers.push({
+ 'label': '{{server.server_name|escapejs}}',
+ 'value': '{{server.server_url|escapejs}}',
+ });
+ {% endfor %}
+ return servers;
+ })(),
canInvitePeople: {% if enable_guest_invitation and user.permissions.can_invite_guest %} true {% else %} false {% endif %},
customNavItems: {% if custom_nav_items %} JSON.parse('{{ custom_nav_items | escapejs }}') {% else %} {{'[]'}} {% endif %},
enableShowContactEmailWhenSearchUser: {% if enable_show_contact_email_when_search_user %} true {% else %} false {% endif %},
diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py
index f0e94448c5..f0bb0de8b2 100644
--- a/seahub/views/__init__.py
+++ b/seahub/views/__init__.py
@@ -61,7 +61,7 @@ from seahub.settings import AVATAR_FILE_STORAGE, \
from seahub.wopi.settings import ENABLE_OFFICE_WEB_APP
from seahub.onlyoffice.settings import ENABLE_ONLYOFFICE
-from seahub.ocm.settings import ENABLE_OCM
+from seahub.ocm.settings import ENABLE_OCM, OCM_REMOTE_SERVERS
from seahub.constants import HASH_URLS, PERMISSION_READ
from seahub.weixin.settings import ENABLE_WEIXIN
@@ -1210,4 +1210,5 @@ def react_fake_view(request, **kwargs):
'additional_app_bottom_links': ADDITIONAL_APP_BOTTOM_LINKS,
'additional_about_dialog_links': ADDITIONAL_ABOUT_DIALOG_LINKS,
'enable_ocm': ENABLE_OCM,
+ 'ocm_remote_servers': OCM_REMOTE_SERVERS,
})
|