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小时。

+
+ + + + + {% for error in form.errors.values %} +

{{ error|escape }}

+ {% endfor %} + +
+
+
+
+{% 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小时。

-
- - - - - {% for error in form.errors.values %} -

{{ error|escape }}

- {% endfor %} - -
-
- - {% 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 @@ {% endfor %} @@ -141,6 +120,7 @@ {% endfor %}
- {% if request.user.is_authenticated %} + {% if user_perm == 'rw' %}
重命名 @@ -127,7 +106,7 @@
  • 复制
  • - {% endif %} + {% endif %}
    {{ dirent.file_size|filesizeformat }} + {% if user_perm == 'rw' %}
    下载 @@ -150,21 +130,20 @@ 更多操作
    + {% endif %}
    - {% 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小时。

    -
    - -
    - {% if error %} -

    {{ error }}

    - {% endif %} - -
    -
    - - {% 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