diff --git a/share/views.py b/share/views.py
index 4010efaabf..28fb7e6b4e 100644
--- a/share/views.py
+++ b/share/views.py
@@ -40,7 +40,13 @@ def share_repo(request):
repo_id = form.cleaned_data['repo_id']
from_email = request.user.username
- # Test whether user is the repo owner
+ repo = get_repo(repo_id)
+ if not repo:
+ raise Http404
+
+ is_encrypted = True if repo.encrypted else False
+
+ # Test whether user is the repo owner.
if not validate_owner(request, repo_id):
return render_permission_error(request, u'只有目录拥有者有权共享目录')
@@ -97,7 +103,8 @@ def share_repo(request):
# Generate shared link and send mail if user has not registered.
kwargs = {'repo_id': repo_id,
'repo_owner': from_email,
- 'anon_email': to_email
+ 'anon_email': to_email,
+ 'is_encrypted': is_encrypted,
}
anonymous_share(request, **kwargs)
else:
@@ -169,6 +176,14 @@ def anonymous_share(request, email_template_name='repo/anonymous_share_email.htm
repo_id = kwargs['repo_id']
repo_owner = kwargs['repo_owner']
anon_email = kwargs['anon_email']
+ is_encrypted = kwargs['is_encrypted']
+
+ # Encrypt repo can not be shared to unregistered user.
+ if is_encrypted:
+ msg = u'共享给 %s 失败,加密目录无法共享给站外邮箱。' % anon_email
+ messages.error(request, msg)
+ return
+
token = anon_share_token_generator.make_token()
anon_share = AnonymousShare()
diff --git a/templates/decrypt_repo_form.html b/templates/decrypt_repo_form.html
new file mode 100644
index 0000000000..3e71a22158
--- /dev/null
+++ b/templates/decrypt_repo_form.html
@@ -0,0 +1,26 @@
+{% extends base_template %}
+
+{% load url from future %}
+
+{% block main_panel %}
+
+
+
+
该目录已加密。如需在线查看里面的内容,请输入解密密码。密码只会在服务器上暂存1小时。
+
+
+
+
+{% endblock %}
+
+{% block extra_script %}
+{% endblock %}
diff --git a/templates/repo.html b/templates/repo.html
index 89ea262d3f..5257d3b4e1 100644
--- a/templates/repo.html
+++ b/templates/repo.html
@@ -16,26 +16,22 @@
{% block main_panel %}
{{repo.props.name}}
- {% if not repo.props.encrypted or password_set %}
- {% if can_access %}
+ {% if user_perm == 'rw' %}
{% endif %}
- {% endif %}
{{repo.props.desc}}
大小:{{ repo_size|filesizeformat }}
- {% if not repo.props.encrypted or password_set %}
- {% if can_access %}
{{ current_commit.props.desc|translate_commit_desc }}
详情
- {% if request.user.is_authenticated %}
+ {% if user_perm == 'rw' %}
更多历史
{% endif %}
@@ -52,28 +48,10 @@
- {% endif %}
- {% endif %}
- {% if repo.props.encrypted and not password_set %}
-
-
该目录已加密。如需在线查看里面的内容,请输入解密密码。密码只会在服务器上暂存1小时。
-
-
-
- {% else %}
- {% if not can_access %}
+ {% if not user_perm %}
@@ -89,7 +67,7 @@
{% endif %}
{% endfor %}
- {% if request.user.is_authenticated %}
+ {% if user_perm == 'rw' %}
@@ -97,6 +75,7 @@
{% endif %}
+
|
@@ -114,7 +93,7 @@
|
- {% if request.user.is_authenticated %}
+ {% if user_perm == 'rw' %}
重命名
@@ -127,7 +106,7 @@
复制
- {% endif %}
+ {% endif %}
|
{% endfor %}
@@ -141,6 +120,7 @@
{{ dirent.file_size|filesizeformat }} |
+ {% if user_perm == 'rw' %}
下载
@@ -150,21 +130,20 @@
- {% if request.user.is_authenticated %}
- 删除
- 移动
- 复制
- 还原
- {% endif %}
+ {% endif %}
|
{% endfor %}
- {% endif %}
+
{% endif %}
diff --git a/templates/repo_history_view.html b/templates/repo_history_view.html
index 9f781efd2b..639aa506f8 100644
--- a/templates/repo_history_view.html
+++ b/templates/repo_history_view.html
@@ -9,7 +9,6 @@
- {% if can_access %}
{{ current_commit.props.desc|translate_commit_desc }}
@@ -24,25 +23,10 @@
{{ current_commit.props.ctime|translate_commit_time }}
- {% endif %}
- {% if repo.props.encrypted and not password_set %}
-
-
该目录已加密。如需在线查看里面的内容,请输入解密密码。密码只会在服务器上暂存1小时。
-
-
-
- {% else %}
- {% if not can_access %}
+ {% if not user_perm %}
@@ -59,6 +43,7 @@
{% endfor %}
+
|
@@ -93,7 +78,7 @@
{% endfor %}
- {% endif %}
+
{% endif %}
diff --git a/views.py b/views.py
index af7c70a407..54ca9aa113 100644
--- a/views.py
+++ b/views.py
@@ -109,7 +109,15 @@ def access_to_repo(request, repo_id, repo_ap=None):
return True if token else False
else:
return check_permission(repo_id, request.user.username)
-
+
+def get_user_permission(request, repo_id):
+ if request.user.is_authenticated():
+ return 'rw' if check_permission(repo_id, request.user.username) else \
+ ''
+ else:
+ token = request.COOKIES.get('anontoken', None)
+ return 'r' if token else ''
+
def gen_path_link(path, repo_name):
"""
Generate navigate paths and links in repo page.
@@ -210,7 +218,8 @@ class RepoMixin(object):
self.path = self.get_path()
self.repo = self.get_repo(self.repo_id)
self.repo_size = self.get_repo_size()
- self.can_access = access_to_repo(self.request, self.repo_id)
+ # self.can_access = access_to_repo(self.request, self.repo_id)
+ self.user_perm = get_user_permission(self.request, self.repo_id)
self.current_commit = self.get_current_commit()
self.password_set = self.is_password_set()
@@ -239,7 +248,13 @@ class RepoView(CtxSwitchRequiredMixin, RepoMixin, TemplateResponseMixin,
View to show repo page and handle post request to decrypt repo.
"""
form_class = RepoPassowrdForm
- template_name = 'repo.html'
+
+ def get_template_names(self):
+ if self.repo.encrypted and not self.password_set:
+ template_name = 'decrypt_repo_form.html'
+ else:
+ template_name = 'repo.html'
+ return template_name
def get_accessible_repos(self):
if self.user.is_authenticated():
@@ -266,7 +281,8 @@ class RepoView(CtxSwitchRequiredMixin, RepoMixin, TemplateResponseMixin,
def get_context_data(self, **kwargs):
kwargs['repo'] = self.repo
- kwargs['can_access'] = self.can_access
+ # kwargs['can_access'] = self.can_access
+ kwargs['user_perm'] = self.user_perm
kwargs['current_commit'] = self.get_current_commit()
kwargs['password_set'] = self.password_set
kwargs['repo_size'] = self.repo_size
@@ -284,8 +300,13 @@ class RepoHistoryView(LoginRequiredMixin, CtxSwitchRequiredMixin, RepoMixin,
"""
View to show repo page in history.
"""
- template_name = 'repo_history_view.html'
-
+ def get_template_names(self):
+ if self.repo.encrypted and not self.password_set:
+ template_name = 'decrypt_repo_form.html'
+ else:
+ template_name = 'repo_history_view.html'
+ return template_name
+
def get_current_commit(self):
commit_id = self.request.GET.get('commit_id', '')
if not commit_id:
@@ -297,7 +318,8 @@ class RepoHistoryView(LoginRequiredMixin, CtxSwitchRequiredMixin, RepoMixin,
def get_context_data(self, **kwargs):
kwargs['repo'] = self.repo
- kwargs['can_access'] = self.can_access
+ # kwargs['can_access'] = self.can_access
+ kwargs['user_perm'] = self.user_perm
kwargs['current_commit'] = self.get_current_commit()
kwargs['password_set'] = self.password_set
kwargs['repo_size'] = self.repo_size