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):
|
||||
username = attrs.get('username')
|
||||
password = attrs.get('password')
|
||||
print username, password
|
||||
|
||||
if username and password:
|
||||
user = authenticate(username=username, password=password)
|
||||
|
||||
|
@@ -22,11 +22,12 @@ from base.accounts import User
|
||||
from share.models import FileShare
|
||||
from seahub.views import access_to_repo, validate_owner
|
||||
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 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
|
||||
|
||||
json_content_type = 'application/json; charset=utf-8'
|
||||
@@ -40,6 +41,9 @@ class Ping(APIView):
|
||||
def get(self, request, format=None):
|
||||
return Response('pong')
|
||||
|
||||
def head(self, request, format=None):
|
||||
return Response(headers={'foo': 'bar',})
|
||||
|
||||
class AuthPing(APIView):
|
||||
"""
|
||||
Returns a simple `pong` message when client provided an auth token.
|
||||
@@ -229,6 +233,10 @@ class Repo(APIView):
|
||||
authentication_classes = (TokenAuthentication, )
|
||||
permission_classes = (IsAuthenticated,)
|
||||
|
||||
def head(self, request, repo_id, format=None):
|
||||
# TODO
|
||||
assert False
|
||||
|
||||
def get(self, request, repo_id, format=None):
|
||||
# check whether user can view repo
|
||||
repo = get_repo(repo_id)
|
||||
@@ -252,6 +260,21 @@ class Repo(APIView):
|
||||
# query repo infomation
|
||||
repo.size = seafserv_threaded_rpc.server_repo_size(repo_id)
|
||||
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 = {
|
||||
"type":"repo",
|
||||
"id":repo.id,
|
||||
@@ -263,6 +286,7 @@ class Repo(APIView):
|
||||
"encrypted":repo.encrypted,
|
||||
"root":current_commit.root_id,
|
||||
"password_need":repo.password_need,
|
||||
"download_url": url,
|
||||
}
|
||||
|
||||
return Response(repo_json)
|
||||
@@ -604,7 +628,7 @@ class OpMoveView(APIView):
|
||||
dst_dir = unquote(request.POST.get('dst_dir')).decode('utf-8')
|
||||
op = request.POST.get('operation')
|
||||
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 \
|
||||
and dst_dir and op and obj_names):
|
||||
return api_error('400')
|
||||
|
@@ -3,7 +3,7 @@ import service
|
||||
from service import ccnet_rpc, monitor_rpc, seafserv_rpc, \
|
||||
seafserv_threaded_rpc, ccnet_threaded_rpc
|
||||
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, \
|
||||
get_group_repoids, get_personal_groups, \
|
||||
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_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \
|
||||
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,\
|
||||
is_passwd_set
|
||||
|
@@ -97,6 +97,9 @@ def get_emailusers(start, limit):
|
||||
users = []
|
||||
return users
|
||||
|
||||
def get_session_info():
|
||||
return ccnet_rpc.get_session_info()
|
||||
|
||||
# group
|
||||
def get_group(group_id):
|
||||
group_id_int = int(group_id)
|
||||
@@ -309,6 +312,9 @@ def list_personal_repos_by_owner(owner):
|
||||
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):
|
||||
"""
|
||||
Check whether user is repo owner.
|
||||
|
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_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_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 signals import repo_created, repo_deleted
|
||||
@@ -1608,7 +1609,7 @@ def repo_download(request):
|
||||
enc = '1'
|
||||
else:
|
||||
enc = ''
|
||||
relay_id = ccnet_rpc.get_session_info().id
|
||||
relay_id = get_session_info().id
|
||||
if not relay_id:
|
||||
return render_to_response('error.html', {
|
||||
"error_msg": _(u"Failed to download library, unable to find servre")
|
||||
|
Reference in New Issue
Block a user