1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 15:38:15 +00:00

Add user id list in middleware, and do some related modifications

This commit is contained in:
xiez
2012-04-02 23:56:41 +08:00
parent 50fe2bb91a
commit 63530f01ef
12 changed files with 78 additions and 49 deletions

View File

@@ -1,16 +1,16 @@
from seaserv import ccnet_rpc from seaserv import get_binding_userids
class UseridMiddleware(object): 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): def process_request(self, request):
if not request.user.is_authenticated(): if not request.user.is_authenticated():
return None return None
try: try:
request.user.user_id = ccnet_rpc.get_binding_userid(request.user.username) request.user.userid_list = get_binding_userids(request.user.username)
except: except:
request.user.user_id = '' request.user.userid_list = []
return None return None

View File

@@ -2,14 +2,14 @@
{% block left_panel %} {% block left_panel %}
<h3>操作</h3>
<ul> <ul>
<li><a href="{{ SITE_ROOT }}accounts/password/change/">修改网站帐号密码</a></li> <li><a href="{{ SITE_ROOT }}accounts/password/change/">修改网站帐号密码</a></li>
<li><a href="{{ SITE_ROOT}}profile/userids/">列出所有个人ID</a></li>
</ul> </ul>
{% endblock %} {% endblock %}
{% block right_panel %} {% block right_panel %}
<h2>当前设置</h2> <h2>当前设置</h2>
<ul> <ul>
{% if user_id %} {% if user_id %}
@@ -22,5 +22,4 @@
<li><span class="bold">帐号文件:</span>您的帐号文件还未上传,请在本地 seafile 界面 "帐号" 标签下上传</li> <li><span class="bold">帐号文件:</span>您的帐号文件还未上传,请在本地 seafile 界面 "帐号" 标签下上传</li>
{% endif %} {% endif %}
</ul> </ul>
{% endblock %} {% endblock %}

View File

@@ -6,4 +6,5 @@ urlpatterns = patterns('profile.views',
# url(r'^edit/$', 'set_profile', name="profile_setting"), # url(r'^edit/$', 'set_profile', name="profile_setting"),
url(r'^edit/ccnet/$', 'set_ccnet_profile', name="ccnet_profile_setting"), url(r'^edit/ccnet/$', 'set_ccnet_profile', name="ccnet_profile_setting"),
url(r'^download/$', 'download_profile', name="profile_download"), url(r'^download/$', 'download_profile', name="profile_download"),
url(r'userids/$', 'list_userids', name="list_userids")
) )

View File

@@ -10,11 +10,11 @@ import datetime
from forms import SetUserProfileForm from forms import SetUserProfileForm
from models import UserCcnetConf 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 @login_required
def show_profile(request): def show_profile(request):
user_id = ccnet_rpc.get_binding_userid(request.user.username) userid_list = get_binding_userids(request.user.username)
try: try:
profile_timestamp = ccnet_rpc.get_user_profile_timestamp(profile.ccnet_user_id) profile_timestamp = ccnet_rpc.get_user_profile_timestamp(profile.ccnet_user_id)
@@ -23,7 +23,7 @@ def show_profile(request):
profile_timestamp = None profile_timestamp = None
return render_to_response('profile/profile.html', { return render_to_response('profile/profile.html', {
'user_id': user_id, 'userid_list': userid_list,
'profile_timestamp': profile_timestamp}, 'profile_timestamp': profile_timestamp},
context_instance=RequestContext(request)) context_instance=RequestContext(request))
@@ -112,3 +112,11 @@ def download_profile(request):
return response return response
else: else:
return HttpResponse("Error: " + err_msg) 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))

View File

@@ -34,15 +34,9 @@
<div id="header"> <div id="header">
<div class="logo ovhd"> <div class="logo ovhd">
<img src="{{ MEDIA_URL }}img/logo.png" id="logo-img" title="Seafile" alt="Seafile logo" /> <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"> <div id="logo-info">
Hope our efforts will bring you benefits. Hope our efforts will bring you benefits.
</div> </div>
{% endif %}
</div> </div>
<div class="navs"> <div class="navs">
{% block nav %} {% block nav %}

View File

@@ -47,7 +47,7 @@
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}">{{ repo.props.name }}</a></td> <td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}">{{ repo.props.name }}</a></td>
<td>{{ repo.props.id }}</td> <td>{{ repo.props.id }}</td>
<td>{{ repo.props.desc }}</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> </tr>
{% endfor %} {% endfor %}
</table> </table>

View File

@@ -15,7 +15,7 @@
{% for repo in repos %} {% for repo in repos %}
<tr> <tr>
<td><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/">{{ repo.props.name }}</a></td> <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.id }}</td>
<td>{{ repo.props.desc }}</td> <td>{{ repo.props.desc }}</td>
<td><button data="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/" class="repo-delete-btn">删除</button></td> <td><button data="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/" class="repo-delete-btn">删除</button></td>

View File

@@ -28,8 +28,8 @@
{% else %} {% else %}
<td><button data="{{ SITE_ROOT }}useradmin/activate/{{ user.id }}/" class="activate">激活</button></td> <td><button data="{{ SITE_ROOT }}useradmin/activate/{{ user.id }}/" class="activate">激活</button></td>
{% endif %} {% endif %}
{% if user.user_id %} {% if user.userid_list %}
<td>{{ user.user_id }}</td> <td>{{ user.userid_list|first }}</td>
{% else %} {% else %}
<td></td> <td></td>
{% endif %} {% endif %}

View File

@@ -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_groups, get_group
from service import get_users, get_user, get_events, count_event 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_repos, get_repo, get_commits, get_branches
from service import get_binding_userids
from service import CCNET_CONF_PATH from service import CCNET_CONF_PATH

View File

@@ -364,3 +364,16 @@ def get_branches(repo_id):
"""Get branches of a given repo""" """Get branches of a given repo"""
return seafserv_threaded_rpc.branch_gets(repo_id) 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

View File

@@ -26,12 +26,12 @@ urlpatterns = patterns('',
(r'^$', root), (r'^$', root),
url(r'^home/my/$', myhome, name='myhome'), 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'^download/$', direct_to_template, { 'template': 'download.html' } ),
(r'^repo/(?P<repo_id>[^/]+)/$', repo), (r'^repo/(?P<repo_id>[^/]+)/$', repo),
(r'^repo/token/modify/(?P<repo_id>[^/]+)/$', modify_token), (r'^repo/token/modify/(?P<repo_id>[^/]+)/$', modify_token),
(r'^repo/remove/(?P<repo_id>[^/]+)/$', remove_repo), (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), (r'^seafadmin/$', seafadmin),
url(r'^useradmin/$', useradmin, name='useradmin'), url(r'^useradmin/$', useradmin, name='useradmin'),

View File

@@ -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, \ from seaserv import cclient, ccnet_rpc, get_groups, get_users, get_repos, \
get_repo, get_commits, get_branches, \ 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.models import GroupShare, UserShare
from seahub.share.forms import GroupAddRepoForm from seahub.share.forms import GroupAddRepoForm
@@ -89,7 +89,14 @@ def group_add_repo(request, group_id):
'form': form, 'group': group 'form': form, 'group': group
}, context_instance=RequestContext(request)) }, 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): def repo(request, repo_id):
# TODO: check permission # TODO: check permission
@@ -114,11 +121,9 @@ def repo(request, repo_id):
token = "" token = ""
is_owner = False is_owner = False
if request.user.is_authenticated(): if request.user.is_authenticated() and validate_owner(request, repo_id):
cid = request.user.user_id is_owner = True
if seafserv_threaded_rpc.is_repo_owner(cid, repo_id): token = seafserv_threaded_rpc.get_repo_token(repo_id)
is_owner = True
token = seafserv_threaded_rpc.get_repo_token(repo_id)
return render_to_response('repo.html', { return render_to_response('repo.html', {
"repo": repo, "repo": repo,
@@ -133,6 +138,7 @@ def repo(request, repo_id):
"token": token, "token": token,
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
@login_required @login_required
def repo_share(request, repo_id): def repo_share(request, repo_id):
return render_to_response('repo_share.html', { return render_to_response('repo_share.html', {
@@ -144,8 +150,7 @@ def repo_share(request, repo_id):
@login_required @login_required
def modify_token(request, repo_id): def modify_token(request, repo_id):
cid = request.user.user_id if not validate_owner(request, repo_id):
if not seafserv_threaded_rpc.is_repo_owner(cid, repo_id):
return HttpResponseRedirect(reverse(repo, args=[repo_id])) return HttpResponseRedirect(reverse(repo, args=[repo_id]))
token = request.POST.get('token', '') token = request.POST.get('token', '')
@@ -157,8 +162,7 @@ def modify_token(request, repo_id):
@login_required @login_required
def remove_repo(request, repo_id): def remove_repo(request, repo_id):
cid = request.user.user_id if not validate_owner(request, repo_id) and not request.user.is_staff:
if not seafserv_threaded_rpc.is_repo_owner(cid, repo_id) and not request.user.is_staff:
return render_to_response('permission_error.html', { return render_to_response('permission_error.html', {
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
@@ -166,9 +170,11 @@ def remove_repo(request, repo_id):
return HttpResponseRedirect(request.META['HTTP_REFERER']) return HttpResponseRedirect(request.META['HTTP_REFERER'])
@login_required @login_required
def remove_fetched_repo(request, repo_id, user_id): def remove_fetched_repo(request, repo_id, username):
if user_id and repo_id: userid_list = get_binding_userids(username)
seafserv_threaded_rpc.remove_fetched_repo (user_id, repo_id) 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']) return HttpResponseRedirect(request.META['HTTP_REFERER'])
@@ -178,12 +184,15 @@ def myhome(request):
fetched_repos = [] fetched_repos = []
quota_usage = 0 quota_usage = 0
user_id = request.user.user_id userid_list = get_binding_userids(request.user.username)
if user_id: for user_id in userid_list:
owned_repos = seafserv_threaded_rpc.list_owned_repos(user_id) try:
quota_usage = seafserv_threaded_rpc.get_user_quota_usage(user_id) owned_repos.extend(seafserv_threaded_rpc.list_owned_repos(user_id))
fetched_repos = seafserv_threaded_rpc.list_fetched_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', { return render_to_response('myhome.html', {
"owned_repos": owned_repos, "owned_repos": owned_repos,
"quota_usage": quota_usage, "quota_usage": quota_usage,
@@ -191,22 +200,26 @@ def myhome(request):
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
@login_required @login_required
def ownerhome(request, owner_id): def ownerhome(request, owner_name):
owned_repos = [] owned_repos = []
fetched_repos = [] fetched_repos = []
quota_usage = 0 quota_usage = 0
owner = request.GET.get('owner') ownerid_list = get_binding_userids(owner_name)
if owner_id: for owner_id in ownerid_list:
owned_repos = seafserv_threaded_rpc.list_owned_repos(owner_id) if owner_id:
quota_usage = seafserv_threaded_rpc.get_user_quota_usage(owner_id) try:
fetched_repos = seafserv_threaded_rpc.list_fetched_repos(owner_id) 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', { return render_to_response('ownerhome.html', {
"owned_repos": owned_repos, "owned_repos": owned_repos,
"quota_usage": quota_usage, "quota_usage": quota_usage,
"fetched_repos": fetched_repos, "fetched_repos": fetched_repos,
"owner": owner, "owner": owner_name,
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
@@ -262,7 +275,7 @@ def useradmin(request):
users = User.objects.all() users = User.objects.all()
for user in users: for user in users:
try: 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.ccnet_user = ccnet_rpc.get_user(user.profile.ccnet_user_id)
user.role_list = user.ccnet_user.props.role_list.split(',') user.role_list = user.ccnet_user.props.role_list.split(',')
except: except: