1
0
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:
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):
"""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

View File

@ -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 %}

View File

@ -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")
)

View File

@ -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))

View File

@ -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 %}

View File

@ -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>

View File

@ -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>

View File

@ -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 %}

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_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

View File

@ -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

View File

@ -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'),

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, \
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: