1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-01 15:09:14 +00:00

Allow viewing encrypted repo on server.

This commit is contained in:
killing
2012-05-24 17:43:26 +08:00
parent f6cd03acb3
commit 0061fbff8a
2 changed files with 92 additions and 8 deletions

View File

@@ -128,7 +128,7 @@ def gen_path_link(path, repo_name):
return zipped
def repo(request, repo_id):
def render_repo(request, repo_id, error=''):
# get repo web access property, if no repo access property in db, then
# assume repo ap is 'own'
repo_ap = seafserv_threaded_rpc.repo_query_access_property(repo_id)
@@ -149,6 +149,15 @@ def repo(request, repo_id):
if validate_owner(request, repo_id):
is_owner = True
password_set = False
if repo.props.encrypted:
try:
ret = seafserv_rpc.is_passwd_set(repo_id, request.user.username)
if ret == 1:
password_set = True
except SearpcError, e:
return go_error(request, e.msg)
repo_size = seafserv_threaded_rpc.server_repo_size(repo_id)
dirs = []
@@ -156,7 +165,7 @@ def repo(request, repo_id):
zipped = []
dir_list = []
file_list = []
if not repo.props.encrypted:
if not repo.props.encrypted or password_set:
path = request.GET.get('p', '/')
if path[-1] != '/':
path = path + '/'
@@ -193,6 +202,7 @@ def repo(request, repo_id):
"repo": repo,
"latest_commit": latest_commit,
"is_owner": is_owner,
"password_set": password_set,
"repo_ap": repo_ap,
"repo_size": repo_size,
"dir_list": dir_list,
@@ -200,12 +210,49 @@ def repo(request, repo_id):
"share_to_me": share_to_me,
"path" : path,
"zipped" : zipped,
"error" : error,
}, context_instance=RequestContext(request))
def repo(request, repo_id):
if request.method == 'GET':
return render_repo(request, repo_id)
elif request.method == 'POST':
password = request.POST.get('password', '')
if not password:
return render_repo(request, repo_id, u'密码不能为空')
try:
seafserv_threaded_rpc.set_passwd(repo_id, request.user.username, password)
except SearpcError, e:
if e.msg == 'Bad arguments':
return go_error(request, u'url 格式不正确')
elif e.msg == 'Repo is not encrypted':
return render_repo(request, repo_id)
elif e.msg == 'Incorrect password':
return render_repo(request, repo_id, u'密码不正确,请重新输入')
elif e.msg == 'Internal server error':
return go_error(request, u'服务器内部故障')
else:
return go_error(request, u'未知错误')
return render_repo(request, repo_id)
def repo_history(request, repo_id):
# TODO: check permission
repo = get_repo(repo_id)
password_set = False
if repo.props.encrypted:
try:
ret = seafserv_rpc.is_passwd_set(repo_id, request.user.username)
if ret == 1:
password_set = True
except SearpcError, e:
return go_error(request, e.msg)
if repo.props.encrypted and not password_set:
return HttpResponseRedirect('/repo/%s/' % repo_id)
try:
current_page = int(request.GET.get('page', '1'))
per_page= int(request.GET.get('per_page', '25'))
@@ -246,6 +293,18 @@ def repo_history_dir(request, repo_id):
if not repo:
raise Http404
password_set = False
if repo.props.encrypted:
try:
ret = seafserv_rpc.is_passwd_set(repo_id, request.user.username)
if ret == 1:
password_set = True
except SearpcError, e:
return go_error(request, e.msg)
if repo.props.encrypted and not password_set:
return HttpResponseRedirect('/repo/%s/' % repo_id)
current_commit = None
commit_id = request.GET.get('commit_id', None)
if commit_id:
@@ -401,6 +460,22 @@ def repo_set_access_property(request, repo_id):
def repo_access_file(request, repo_id, obj_id):
if repo_id:
repo = get_repo(repo_id)
if not repo:
raise Http404
password_set = False
if repo.props.encrypted:
try:
ret = seafserv_rpc.is_passwd_set(repo_id, request.user.username)
if ret == 1:
password_set = True
except SearpcError, e:
return go_error(request, e.msg)
if repo.props.encrypted and not password_set:
return HttpResponseRedirect('/repo/%s/' % repo_id)
# if a repo doesn't have access property in db, then assume it's 'own'
repo_ap = seafserv_threaded_rpc.repo_query_access_property(repo_id)
if not repo_ap:
@@ -429,9 +504,11 @@ def repo_access_file(request, repo_id, obj_id):
file_name = request.GET.get('file_name', '')
op = request.GET.get('op', 'view')
redirect_url = '%s/%s?id=%s&filename=%s&op=%s&t=%s' % (http_server_root,
repo_id, obj_id,
file_name, op, token)
redirect_url = '%s/%s?id=%s&filename=%s&op=%s&t=%s&u=%s' % (http_server_root,
repo_id, obj_id,
file_name, op,
token,
request.user.username)
return HttpResponseRedirect(redirect_url)
@login_required