1
0
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:
zhengxie
2012-12-15 14:53:15 +08:00
parent f8cb9ef2f1
commit 919e286b83
5 changed files with 39 additions and 8 deletions

View File

@@ -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)

View File

@@ -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')

View File

@@ -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

View File

@@ -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):
""" """

View File

@@ -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")