mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-14 14:21:23 +00:00
Added repo download link
This commit is contained in:
@@ -9,7 +9,7 @@ class AuthTokenSerializer(serializers.Serializer):
|
|||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
username = attrs.get('username')
|
username = attrs.get('username')
|
||||||
password = attrs.get('password')
|
password = attrs.get('password')
|
||||||
print username, password
|
|
||||||
if username and password:
|
if username and password:
|
||||||
user = authenticate(username=username, password=password)
|
user = authenticate(username=username, password=password)
|
||||||
|
|
||||||
|
@@ -22,11 +22,12 @@ from base.accounts import User
|
|||||||
from share.models import FileShare
|
from share.models import FileShare
|
||||||
from seahub.views import access_to_repo, validate_owner
|
from seahub.views import access_to_repo, validate_owner
|
||||||
from seahub.utils import gen_file_get_url, gen_token, gen_file_upload_url, \
|
from seahub.utils import gen_file_get_url, gen_token, gen_file_upload_url, \
|
||||||
check_filename_with_rename, get_starred_files
|
check_filename_with_rename, get_starred_files, get_ccnetapplet_root, \
|
||||||
|
get_ccnet_server_addr_port
|
||||||
|
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
from seaserv import seafserv_rpc, seafserv_threaded_rpc, \
|
from seaserv import seafserv_rpc, seafserv_threaded_rpc, \
|
||||||
get_personal_groups_by_user, \
|
get_personal_groups_by_user, get_session_info, get_repo_token_nonnull, \
|
||||||
get_group_repos, get_repo, check_permission, get_commits
|
get_group_repos, get_repo, check_permission, get_commits
|
||||||
|
|
||||||
json_content_type = 'application/json; charset=utf-8'
|
json_content_type = 'application/json; charset=utf-8'
|
||||||
@@ -40,6 +41,9 @@ class Ping(APIView):
|
|||||||
def get(self, request, format=None):
|
def get(self, request, format=None):
|
||||||
return Response('pong')
|
return Response('pong')
|
||||||
|
|
||||||
|
def head(self, request, format=None):
|
||||||
|
return Response(headers={'foo': 'bar',})
|
||||||
|
|
||||||
class AuthPing(APIView):
|
class AuthPing(APIView):
|
||||||
"""
|
"""
|
||||||
Returns a simple `pong` message when client provided an auth token.
|
Returns a simple `pong` message when client provided an auth token.
|
||||||
@@ -229,6 +233,10 @@ class Repo(APIView):
|
|||||||
authentication_classes = (TokenAuthentication, )
|
authentication_classes = (TokenAuthentication, )
|
||||||
permission_classes = (IsAuthenticated,)
|
permission_classes = (IsAuthenticated,)
|
||||||
|
|
||||||
|
def head(self, request, repo_id, format=None):
|
||||||
|
# TODO
|
||||||
|
assert False
|
||||||
|
|
||||||
def get(self, request, repo_id, format=None):
|
def get(self, request, repo_id, format=None):
|
||||||
# check whether user can view repo
|
# check whether user can view repo
|
||||||
repo = get_repo(repo_id)
|
repo = get_repo(repo_id)
|
||||||
@@ -252,6 +260,21 @@ class Repo(APIView):
|
|||||||
# query repo infomation
|
# query repo infomation
|
||||||
repo.size = seafserv_threaded_rpc.server_repo_size(repo_id)
|
repo.size = seafserv_threaded_rpc.server_repo_size(repo_id)
|
||||||
current_commit = get_commits(repo_id, 0, 1)[0]
|
current_commit = get_commits(repo_id, 0, 1)[0]
|
||||||
|
|
||||||
|
# generate download url for client
|
||||||
|
ccnet_applet_root = get_ccnetapplet_root()
|
||||||
|
relay_id = get_session_info().id
|
||||||
|
addr, port = get_ccnet_server_addr_port ()
|
||||||
|
email = quote(request.user.username)
|
||||||
|
token = get_repo_token_nonnull(repo_id, request.user.username)
|
||||||
|
quote_repo_name = quote(repo.name.encode('utf-8'))
|
||||||
|
enc = 1 if repo.encrypted else ''
|
||||||
|
|
||||||
|
url = ccnet_applet_root + "/repo/download/"
|
||||||
|
url += "?relay_id=%s&relay_addr=%s&relay_port=%s" % (relay_id, addr, port)
|
||||||
|
url += "&email=%s&token=%s" % (email, token)
|
||||||
|
url += "&repo_id=%s&repo_name=%s&encrypted=%s" % (repo_id, quote_repo_name, enc)
|
||||||
|
|
||||||
repo_json = {
|
repo_json = {
|
||||||
"type":"repo",
|
"type":"repo",
|
||||||
"id":repo.id,
|
"id":repo.id,
|
||||||
@@ -263,6 +286,7 @@ class Repo(APIView):
|
|||||||
"encrypted":repo.encrypted,
|
"encrypted":repo.encrypted,
|
||||||
"root":current_commit.root_id,
|
"root":current_commit.root_id,
|
||||||
"password_need":repo.password_need,
|
"password_need":repo.password_need,
|
||||||
|
"download_url": url,
|
||||||
}
|
}
|
||||||
|
|
||||||
return Response(repo_json)
|
return Response(repo_json)
|
||||||
@@ -604,7 +628,7 @@ class OpMoveView(APIView):
|
|||||||
dst_dir = unquote(request.POST.get('dst_dir')).decode('utf-8')
|
dst_dir = unquote(request.POST.get('dst_dir')).decode('utf-8')
|
||||||
op = request.POST.get('operation')
|
op = request.POST.get('operation')
|
||||||
obj_names = request.POST.get('obj_names')
|
obj_names = request.POST.get('obj_names')
|
||||||
print src_repo_id, dst_repo_id, src_dir, dst_dir, op, obj_names
|
|
||||||
if not (src_repo_id and src_dir and dst_repo_id \
|
if not (src_repo_id and src_dir and dst_repo_id \
|
||||||
and dst_dir and op and obj_names):
|
and dst_dir and op and obj_names):
|
||||||
return api_error('400')
|
return api_error('400')
|
||||||
|
@@ -3,7 +3,7 @@ import service
|
|||||||
from service import ccnet_rpc, monitor_rpc, seafserv_rpc, \
|
from service import ccnet_rpc, monitor_rpc, seafserv_rpc, \
|
||||||
seafserv_threaded_rpc, ccnet_threaded_rpc
|
seafserv_threaded_rpc, ccnet_threaded_rpc
|
||||||
from service import send_command, check_quota, web_get_access_token, unset_repo_passwd
|
from service import send_command, check_quota, web_get_access_token, unset_repo_passwd
|
||||||
from service import get_emailusers
|
from service import get_emailusers, get_session_info
|
||||||
from service import get_org_groups, get_personal_groups_by_user, \
|
from service import get_org_groups, get_personal_groups_by_user, \
|
||||||
get_group_repoids, get_personal_groups, \
|
get_group_repoids, get_personal_groups, \
|
||||||
check_group_staff, remove_group_user, get_group, get_org_id_by_group, \
|
check_group_staff, remove_group_user, get_group, get_org_id_by_group, \
|
||||||
@@ -15,7 +15,7 @@ from service import get_repos, get_repo, get_commits, get_branches, remove_repo,
|
|||||||
list_org_inner_pub_repos, get_org_id_by_repo_id, list_org_shared_repos, \
|
list_org_inner_pub_repos, get_org_id_by_repo_id, list_org_shared_repos, \
|
||||||
list_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \
|
list_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \
|
||||||
is_org_repo_owner, get_org_repo_owner, is_org_repo, get_file_size,\
|
is_org_repo_owner, get_org_repo_owner, is_org_repo, get_file_size,\
|
||||||
list_personal_repos_by_owner
|
list_personal_repos_by_owner, get_repo_token_nonnull
|
||||||
|
|
||||||
from service import get_binding_peerids, is_valid_filename, check_permission,\
|
from service import get_binding_peerids, is_valid_filename, check_permission,\
|
||||||
is_passwd_set
|
is_passwd_set
|
||||||
|
@@ -97,6 +97,9 @@ def get_emailusers(start, limit):
|
|||||||
users = []
|
users = []
|
||||||
return users
|
return users
|
||||||
|
|
||||||
|
def get_session_info():
|
||||||
|
return ccnet_rpc.get_session_info()
|
||||||
|
|
||||||
# group
|
# group
|
||||||
def get_group(group_id):
|
def get_group(group_id):
|
||||||
group_id_int = int(group_id)
|
group_id_int = int(group_id)
|
||||||
@@ -308,6 +311,9 @@ def list_personal_repos_by_owner(owner):
|
|||||||
except SearpcError:
|
except SearpcError:
|
||||||
repos = []
|
repos = []
|
||||||
return repos
|
return repos
|
||||||
|
|
||||||
|
def get_repo_token_nonnull(repo_id, username):
|
||||||
|
return seafserv_threaded_rpc.get_repo_token_nonnull (repo_id, username)
|
||||||
|
|
||||||
def is_repo_owner(user, repo_id):
|
def is_repo_owner(user, repo_id):
|
||||||
"""
|
"""
|
||||||
|
5
views.py
5
views.py
@@ -43,7 +43,8 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, get_emailusers, \
|
|||||||
list_personal_shared_repos, is_org_group, get_org_id_by_group, is_org_repo,\
|
list_personal_shared_repos, is_org_group, get_org_id_by_group, is_org_repo,\
|
||||||
list_inner_pub_repos, get_org_groups_by_repo, is_org_repo_owner, \
|
list_inner_pub_repos, get_org_groups_by_repo, is_org_repo_owner, \
|
||||||
get_org_repo_owner, is_passwd_set, get_file_size, check_quota, \
|
get_org_repo_owner, is_passwd_set, get_file_size, check_quota, \
|
||||||
get_related_users_by_repo, get_related_users_by_org_repo, HtmlDiff
|
get_related_users_by_repo, get_related_users_by_org_repo, HtmlDiff, \
|
||||||
|
get_session_info
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
|
|
||||||
from signals import repo_created, repo_deleted
|
from signals import repo_created, repo_deleted
|
||||||
@@ -1608,7 +1609,7 @@ def repo_download(request):
|
|||||||
enc = '1'
|
enc = '1'
|
||||||
else:
|
else:
|
||||||
enc = ''
|
enc = ''
|
||||||
relay_id = ccnet_rpc.get_session_info().id
|
relay_id = get_session_info().id
|
||||||
if not relay_id:
|
if not relay_id:
|
||||||
return render_to_response('error.html', {
|
return render_to_response('error.html', {
|
||||||
"error_msg": _(u"Failed to download library, unable to find servre")
|
"error_msg": _(u"Failed to download library, unable to find servre")
|
||||||
|
Reference in New Issue
Block a user