mirror of
https://github.com/haiwen/seahub.git
synced 2025-04-28 03:10:45 +00:00
Add user id list in middleware, and do some related modifications
This commit is contained in:
parent
50fe2bb91a
commit
63530f01ef
@ -1,16 +1,16 @@
|
||||
from seaserv import ccnet_rpc
|
||||
from seaserv import get_binding_userids
|
||||
|
||||
class UseridMiddleware(object):
|
||||
"""Store ccnet user id in request.user.user_id"""
|
||||
"""Store ccnet user ids in request.user.userid_list"""
|
||||
|
||||
def process_request(self, request):
|
||||
if not request.user.is_authenticated():
|
||||
return None
|
||||
|
||||
try:
|
||||
request.user.user_id = ccnet_rpc.get_binding_userid(request.user.username)
|
||||
request.user.userid_list = get_binding_userids(request.user.username)
|
||||
except:
|
||||
request.user.user_id = ''
|
||||
request.user.userid_list = []
|
||||
|
||||
return None
|
||||
|
||||
|
@ -2,14 +2,14 @@
|
||||
|
||||
|
||||
{% block left_panel %}
|
||||
<h3>操作</h3>
|
||||
<ul>
|
||||
<li><a href="{{ SITE_ROOT }}accounts/password/change/">修改网站帐号密码</a></li>
|
||||
<li><a href="{{ SITE_ROOT}}profile/userids/">列出所有个人ID</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block right_panel %}
|
||||
|
||||
<h2>当前设置</h2>
|
||||
<ul>
|
||||
{% if user_id %}
|
||||
@ -22,5 +22,4 @@
|
||||
<li><span class="bold">帐号文件:</span>您的帐号文件还未上传,请在本地 seafile 界面 "帐号" 标签下上传</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
{% endblock %}
|
||||
|
@ -6,4 +6,5 @@ urlpatterns = patterns('profile.views',
|
||||
# url(r'^edit/$', 'set_profile', name="profile_setting"),
|
||||
url(r'^edit/ccnet/$', 'set_ccnet_profile', name="ccnet_profile_setting"),
|
||||
url(r'^download/$', 'download_profile', name="profile_download"),
|
||||
url(r'userids/$', 'list_userids', name="list_userids")
|
||||
)
|
||||
|
@ -10,11 +10,11 @@ import datetime
|
||||
from forms import SetUserProfileForm
|
||||
from models import UserCcnetConf
|
||||
|
||||
from seaserv import ccnet_rpc, translate_time_usec
|
||||
from seaserv import ccnet_rpc, translate_time_usec, get_binding_userids
|
||||
|
||||
@login_required
|
||||
def show_profile(request):
|
||||
user_id = ccnet_rpc.get_binding_userid(request.user.username)
|
||||
userid_list = get_binding_userids(request.user.username)
|
||||
|
||||
try:
|
||||
profile_timestamp = ccnet_rpc.get_user_profile_timestamp(profile.ccnet_user_id)
|
||||
@ -23,7 +23,7 @@ def show_profile(request):
|
||||
profile_timestamp = None
|
||||
|
||||
return render_to_response('profile/profile.html', {
|
||||
'user_id': user_id,
|
||||
'userid_list': userid_list,
|
||||
'profile_timestamp': profile_timestamp},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
@ -112,3 +112,11 @@ def download_profile(request):
|
||||
return response
|
||||
else:
|
||||
return HttpResponse("Error: " + err_msg)
|
||||
|
||||
@login_required
|
||||
def list_userids(request):
|
||||
userid_list = get_binding_userids(request.user.username)
|
||||
|
||||
return render_to_response('profile/user_ids.html',
|
||||
{'userid_list': userid_list},
|
||||
context_instance=RequestContext(request))
|
||||
|
@ -34,15 +34,9 @@
|
||||
<div id="header">
|
||||
<div class="logo ovhd">
|
||||
<img src="{{ MEDIA_URL }}img/logo.png" id="logo-img" title="Seafile" alt="Seafile logo" />
|
||||
{% if request.user.user_id %}
|
||||
<div id="user-info">
|
||||
<span>个人 ID:</span>{{user.user_id}}
|
||||
</div>
|
||||
{% else %}
|
||||
<div id="logo-info">
|
||||
Hope our efforts will bring you benefits.
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="navs">
|
||||
{% block nav %}
|
||||
|
@ -47,7 +47,7 @@
|
||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}">{{ repo.props.name }}</a></td>
|
||||
<td>{{ repo.props.id }}</td>
|
||||
<td>{{ repo.props.desc }}</td>
|
||||
<td><button data="{{ SITE_ROOT }}repo/removefetched/{{ user.user_id }}/{{ repo.props.id }}/" class="repo-delete-btn">删除</button></td>
|
||||
<td><button data="{{ SITE_ROOT }}repo/removefetched/{{ user.username }}/{{ repo.props.id }}/" class="repo-delete-btn">删除</button></td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
@ -15,7 +15,7 @@
|
||||
{% for repo in repos %}
|
||||
<tr>
|
||||
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/">{{ repo.props.name }}</a></td>
|
||||
<td><a href="{{ SITE_ROOT }}home/owner/{{ repo.owner_id }}/?owner={{ repo.owner }}">{{ repo.owner}}</a></td>
|
||||
<td><a href="{{ SITE_ROOT }}home/owner/{{ repo.owner }}/">{{ repo.owner}}</a></td>
|
||||
<td>{{ repo.props.id }}</td>
|
||||
<td>{{ repo.props.desc }}</td>
|
||||
<td><button data="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/" class="repo-delete-btn">删除</button></td>
|
||||
|
@ -28,8 +28,8 @@
|
||||
{% else %}
|
||||
<td><button data="{{ SITE_ROOT }}useradmin/activate/{{ user.id }}/" class="activate">激活</button></td>
|
||||
{% endif %}
|
||||
{% if user.user_id %}
|
||||
<td>{{ user.user_id }}</td>
|
||||
{% if user.userid_list %}
|
||||
<td>{{ user.userid_list|first }}</td>
|
||||
{% else %}
|
||||
<td></td>
|
||||
{% endif %}
|
||||
|
@ -10,6 +10,7 @@ from service import get_peers_by_role, get_peers_by_myrole, send_command
|
||||
from service import get_groups, get_group
|
||||
from service import get_users, get_user, get_events, count_event
|
||||
from service import get_repos, get_repo, get_commits, get_branches
|
||||
from service import get_binding_userids
|
||||
|
||||
from service import CCNET_CONF_PATH
|
||||
|
||||
|
@ -364,3 +364,16 @@ def get_branches(repo_id):
|
||||
"""Get branches of a given repo"""
|
||||
return seafserv_threaded_rpc.branch_gets(repo_id)
|
||||
|
||||
def get_binding_userids(email):
|
||||
"""Get user ids of a given email"""
|
||||
try:
|
||||
user_ids = ccnet_rpc.get_binding_userids(email)
|
||||
except SearpcError:
|
||||
return []
|
||||
|
||||
userid_list = []
|
||||
for user_id in user_ids.split("\n"):
|
||||
if user_id == '':
|
||||
continue
|
||||
userid_list.append(user_id)
|
||||
return userid_list
|
||||
|
4
urls.py
4
urls.py
@ -26,12 +26,12 @@ urlpatterns = patterns('',
|
||||
|
||||
(r'^$', root),
|
||||
url(r'^home/my/$', myhome, name='myhome'),
|
||||
url(r'^home/owner/(?P<owner_id>[^/]+)/$', ownerhome, name='ownerhome'),
|
||||
url(r'^home/owner/(?P<owner_name>[^/]+)/$', ownerhome, name='ownerhome'),
|
||||
(r'^download/$', direct_to_template, { 'template': 'download.html' } ),
|
||||
(r'^repo/(?P<repo_id>[^/]+)/$', repo),
|
||||
(r'^repo/token/modify/(?P<repo_id>[^/]+)/$', modify_token),
|
||||
(r'^repo/remove/(?P<repo_id>[^/]+)/$', remove_repo),
|
||||
(r'^repo/removefetched/(?P<user_id>[^/]+)/(?P<repo_id>[^/]+)/$', remove_fetched_repo),
|
||||
(r'^repo/removefetched/(?P<username>[^/]+)/(?P<repo_id>[^/]+)/$', remove_fetched_repo),
|
||||
|
||||
(r'^seafadmin/$', seafadmin),
|
||||
url(r'^useradmin/$', useradmin, name='useradmin'),
|
||||
|
67
views.py
67
views.py
@ -10,7 +10,7 @@ from django.contrib.auth.forms import AuthenticationForm, PasswordResetForm, Set
|
||||
|
||||
from seaserv import cclient, ccnet_rpc, get_groups, get_users, get_repos, \
|
||||
get_repo, get_commits, get_branches, \
|
||||
seafserv_threaded_rpc
|
||||
seafserv_threaded_rpc, get_binding_userids
|
||||
|
||||
from seahub.share.models import GroupShare, UserShare
|
||||
from seahub.share.forms import GroupAddRepoForm
|
||||
@ -89,7 +89,14 @@ def group_add_repo(request, group_id):
|
||||
'form': form, 'group': group
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
def validate_owner(request, repo_id):
|
||||
is_owner = False
|
||||
cid_list = request.user.userid_list
|
||||
for cid in cid_list:
|
||||
if seafserv_threaded_rpc.is_repo_owner(cid, repo_id):
|
||||
is_owner = True
|
||||
|
||||
return is_owner
|
||||
|
||||
def repo(request, repo_id):
|
||||
# TODO: check permission
|
||||
@ -114,11 +121,9 @@ def repo(request, repo_id):
|
||||
|
||||
token = ""
|
||||
is_owner = False
|
||||
if request.user.is_authenticated():
|
||||
cid = request.user.user_id
|
||||
if seafserv_threaded_rpc.is_repo_owner(cid, repo_id):
|
||||
is_owner = True
|
||||
token = seafserv_threaded_rpc.get_repo_token(repo_id)
|
||||
if request.user.is_authenticated() and validate_owner(request, repo_id):
|
||||
is_owner = True
|
||||
token = seafserv_threaded_rpc.get_repo_token(repo_id)
|
||||
|
||||
return render_to_response('repo.html', {
|
||||
"repo": repo,
|
||||
@ -133,6 +138,7 @@ def repo(request, repo_id):
|
||||
"token": token,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@login_required
|
||||
def repo_share(request, repo_id):
|
||||
return render_to_response('repo_share.html', {
|
||||
@ -144,8 +150,7 @@ def repo_share(request, repo_id):
|
||||
|
||||
@login_required
|
||||
def modify_token(request, repo_id):
|
||||
cid = request.user.user_id
|
||||
if not seafserv_threaded_rpc.is_repo_owner(cid, repo_id):
|
||||
if not validate_owner(request, repo_id):
|
||||
return HttpResponseRedirect(reverse(repo, args=[repo_id]))
|
||||
|
||||
token = request.POST.get('token', '')
|
||||
@ -157,8 +162,7 @@ def modify_token(request, repo_id):
|
||||
|
||||
@login_required
|
||||
def remove_repo(request, repo_id):
|
||||
cid = request.user.user_id
|
||||
if not seafserv_threaded_rpc.is_repo_owner(cid, repo_id) and not request.user.is_staff:
|
||||
if not validate_owner(request, repo_id) and not request.user.is_staff:
|
||||
return render_to_response('permission_error.html', {
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@ -166,9 +170,11 @@ def remove_repo(request, repo_id):
|
||||
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
||||
|
||||
@login_required
|
||||
def remove_fetched_repo(request, repo_id, user_id):
|
||||
if user_id and repo_id:
|
||||
seafserv_threaded_rpc.remove_fetched_repo (user_id, repo_id)
|
||||
def remove_fetched_repo(request, repo_id, username):
|
||||
userid_list = get_binding_userids(username)
|
||||
for user_id in userid_list:
|
||||
if user_id and repo_id:
|
||||
seafserv_threaded_rpc.remove_fetched_repo (user_id, repo_id)
|
||||
|
||||
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
||||
|
||||
@ -178,12 +184,15 @@ def myhome(request):
|
||||
fetched_repos = []
|
||||
quota_usage = 0
|
||||
|
||||
user_id = request.user.user_id
|
||||
if user_id:
|
||||
owned_repos = seafserv_threaded_rpc.list_owned_repos(user_id)
|
||||
quota_usage = seafserv_threaded_rpc.get_user_quota_usage(user_id)
|
||||
fetched_repos = seafserv_threaded_rpc.list_fetched_repos(user_id)
|
||||
|
||||
userid_list = get_binding_userids(request.user.username)
|
||||
for user_id in userid_list:
|
||||
try:
|
||||
owned_repos.extend(seafserv_threaded_rpc.list_owned_repos(user_id))
|
||||
quota_usage = quota_usage + seafserv_threaded_rpc.get_user_quota_usage(user_id)
|
||||
fetched_repos.extend(seafserv_threaded_rpc.list_fetched_repos(user_id))
|
||||
except:
|
||||
pass
|
||||
|
||||
return render_to_response('myhome.html', {
|
||||
"owned_repos": owned_repos,
|
||||
"quota_usage": quota_usage,
|
||||
@ -191,22 +200,26 @@ def myhome(request):
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
def ownerhome(request, owner_id):
|
||||
def ownerhome(request, owner_name):
|
||||
owned_repos = []
|
||||
fetched_repos = []
|
||||
quota_usage = 0
|
||||
|
||||
owner = request.GET.get('owner')
|
||||
if owner_id:
|
||||
owned_repos = seafserv_threaded_rpc.list_owned_repos(owner_id)
|
||||
quota_usage = seafserv_threaded_rpc.get_user_quota_usage(owner_id)
|
||||
fetched_repos = seafserv_threaded_rpc.list_fetched_repos(owner_id)
|
||||
ownerid_list = get_binding_userids(owner_name)
|
||||
for owner_id in ownerid_list:
|
||||
if owner_id:
|
||||
try:
|
||||
owned_repos.extend(seafserv_threaded_rpc.list_owned_repos(owner_id))
|
||||
quota_usage = quota_usage + seafserv_threaded_rpc.get_user_quota_usage(owner_id)
|
||||
fetched_repos.extend(seafserv_threaded_rpc.list_fetched_repos(owner_id))
|
||||
except:
|
||||
pass
|
||||
|
||||
return render_to_response('ownerhome.html', {
|
||||
"owned_repos": owned_repos,
|
||||
"quota_usage": quota_usage,
|
||||
"fetched_repos": fetched_repos,
|
||||
"owner": owner,
|
||||
"owner": owner_name,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
|
||||
@ -262,7 +275,7 @@ def useradmin(request):
|
||||
users = User.objects.all()
|
||||
for user in users:
|
||||
try:
|
||||
user.user_id = ccnet_rpc.get_binding_userid(user.username)
|
||||
user.userid_list = get_binding_userids(user.username)
|
||||
user.ccnet_user = ccnet_rpc.get_user(user.profile.ccnet_user_id)
|
||||
user.role_list = user.ccnet_user.props.role_list.split(',')
|
||||
except:
|
||||
|
Loading…
Reference in New Issue
Block a user