mirror of
https://github.com/haiwen/seahub.git
synced 2025-06-26 07:02:11 +00:00
73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
from django.http import Http404
|
|
from django.shortcuts import render_to_response
|
|
from django.template import RequestContext
|
|
from seaserv import get_repo, is_passwd_set
|
|
|
|
from seahub.utils import check_and_get_org_by_repo, check_and_get_org_by_group
|
|
|
|
def sys_staff_required(func):
|
|
"""
|
|
Decorator for views that checks the user is system staff.
|
|
"""
|
|
def _decorated(request, *args, **kwargs):
|
|
if request.user.is_staff:
|
|
return func(request, *args, **kwargs)
|
|
raise Http404
|
|
return _decorated
|
|
|
|
def ctx_switch_required(func):
|
|
"""
|
|
Decorator for views to change navigation bar automatically that render
|
|
same template when both in org context and personal context.
|
|
"""
|
|
def _decorated(request, *args, **kwargs):
|
|
if not request.cloud_mode:
|
|
# no need to switch context when `CLOUD_MODE` is false
|
|
request.user.org = None
|
|
request.base_template = 'myhome_base.html'
|
|
return func(request, *args, **kwargs)
|
|
|
|
repo_id = kwargs.get('repo_id', '')
|
|
group_id = kwargs.get('group_id', '')
|
|
if repo_id and group_id:
|
|
return func(request, *args, **kwargs)
|
|
if not repo_id and not group_id:
|
|
return func(request, *args, **kwargs)
|
|
|
|
user = request.user.username
|
|
if repo_id:
|
|
org, base_template = check_and_get_org_by_repo(repo_id, user)
|
|
|
|
if group_id:
|
|
org, base_template = check_and_get_org_by_group(int(group_id), user)
|
|
|
|
if org:
|
|
request.user.org = org._dict
|
|
else:
|
|
request.user.org = None
|
|
request.base_template = base_template
|
|
return func(request, *args, **kwargs)
|
|
return _decorated
|
|
|
|
def repo_passwd_set_required(func):
|
|
"""
|
|
Decorator for views to redirect user to repo decryption page if repo is
|
|
encrypt and password is not set by user.
|
|
"""
|
|
def _decorated(request, *args, **kwargs):
|
|
repo_id = kwargs.get('repo_id', None)
|
|
if not repo_id:
|
|
# TODO: raise error
|
|
pass
|
|
repo = get_repo(repo_id)
|
|
username = request.user.username
|
|
if repo.encrypted and not is_passwd_set(repo_id, username):
|
|
# Redirect uesr to decrypt repo page.
|
|
return render_to_response('decrypt_repo_form.html', {
|
|
'repo': repo,
|
|
'next': request.get_full_path(),
|
|
}, context_instance=RequestContext(request))
|
|
return func(request, *args, **kwargs)
|
|
return _decorated
|
|
|