1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 07:27:04 +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

@@ -8,7 +8,7 @@
<p>{{repo.props.desc}}</p> <p>{{repo.props.desc}}</p>
<p>大小:{{ repo_size|filesizeformat }}</p> <p>大小:{{ repo_size|filesizeformat }}</p>
{% if not repo.props.encrypted %} {% if not repo.props.encrypted or password_set %}
{% if is_owner or repo_ap == 'public' or share_to_me %} {% if is_owner or repo_ap == 'public' or share_to_me %}
<p class="latest-commit mgt10"> <p class="latest-commit mgt10">
{{ latest_commit.props.desc|translate_commit_desc }}<br /> {{ latest_commit.props.desc|translate_commit_desc }}<br />
@@ -38,8 +38,15 @@
{% endif %} {% endif %}
</div> </div>
<div class="main fleft"> <div class="main fleft">
{% if repo.props.encrypted %} {% if repo.props.encrypted and not password_set %}
<p>同步目录已加密,不能在线查看。</p> <p>该目录已加密。如需在线查看里面的内容请输入解密密码。密码只会在服务器上暂存1小时</p>
<form action="{{ SITE_ROOT }}repo/{{ repo.id }}/" method="post">
<p><label>密码:</label><input id="id_password" type="password" name="password" maxlength="64" /></p>
{% if error %}
<p>{{ error }}</p>
{% endif %}
<p><input type="submit" value="提交"></p>
</form>
{% else %} {% else %}
{% if not is_owner and repo_ap == 'own' and not share_to_me %} {% if not is_owner and repo_ap == 'own' and not share_to_me %}
<p>该同步目录web匿名访问未开启不能在线查看。</p> <p>该同步目录web匿名访问未开启不能在线查看。</p>

View File

@@ -128,7 +128,7 @@ def gen_path_link(path, repo_name):
return zipped 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 # get repo web access property, if no repo access property in db, then
# assume repo ap is 'own' # assume repo ap is 'own'
repo_ap = seafserv_threaded_rpc.repo_query_access_property(repo_id) 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): if validate_owner(request, repo_id):
is_owner = True 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) repo_size = seafserv_threaded_rpc.server_repo_size(repo_id)
dirs = [] dirs = []
@@ -156,7 +165,7 @@ def repo(request, repo_id):
zipped = [] zipped = []
dir_list = [] dir_list = []
file_list = [] file_list = []
if not repo.props.encrypted: if not repo.props.encrypted or password_set:
path = request.GET.get('p', '/') path = request.GET.get('p', '/')
if path[-1] != '/': if path[-1] != '/':
path = path + '/' path = path + '/'
@@ -193,6 +202,7 @@ def repo(request, repo_id):
"repo": repo, "repo": repo,
"latest_commit": latest_commit, "latest_commit": latest_commit,
"is_owner": is_owner, "is_owner": is_owner,
"password_set": password_set,
"repo_ap": repo_ap, "repo_ap": repo_ap,
"repo_size": repo_size, "repo_size": repo_size,
"dir_list": dir_list, "dir_list": dir_list,
@@ -200,12 +210,49 @@ def repo(request, repo_id):
"share_to_me": share_to_me, "share_to_me": share_to_me,
"path" : path, "path" : path,
"zipped" : zipped, "zipped" : zipped,
"error" : error,
}, context_instance=RequestContext(request)) }, 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): def repo_history(request, repo_id):
# TODO: check permission # TODO: check permission
repo = get_repo(repo_id) 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: try:
current_page = int(request.GET.get('page', '1')) current_page = int(request.GET.get('page', '1'))
per_page= int(request.GET.get('per_page', '25')) per_page= int(request.GET.get('per_page', '25'))
@@ -246,6 +293,18 @@ def repo_history_dir(request, repo_id):
if not repo: if not repo:
raise Http404 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 current_commit = None
commit_id = request.GET.get('commit_id', None) commit_id = request.GET.get('commit_id', None)
if commit_id: if commit_id:
@@ -401,6 +460,22 @@ def repo_set_access_property(request, repo_id):
def repo_access_file(request, repo_id, obj_id): def repo_access_file(request, repo_id, obj_id):
if repo_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' # 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) repo_ap = seafserv_threaded_rpc.repo_query_access_property(repo_id)
if not repo_ap: if not repo_ap:
@@ -429,9 +504,11 @@ def repo_access_file(request, repo_id, obj_id):
file_name = request.GET.get('file_name', '') file_name = request.GET.get('file_name', '')
op = request.GET.get('op', 'view') op = request.GET.get('op', 'view')
redirect_url = '%s/%s?id=%s&filename=%s&op=%s&t=%s' % (http_server_root, redirect_url = '%s/%s?id=%s&filename=%s&op=%s&t=%s&u=%s' % (http_server_root,
repo_id, obj_id, repo_id, obj_id,
file_name, op, token) file_name, op,
token,
request.user.username)
return HttpResponseRedirect(redirect_url) return HttpResponseRedirect(redirect_url)
@login_required @login_required