1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-13 05:39:59 +00:00

Refactor auth and rename CcnetUser to User

This commit is contained in:
xiez
2012-08-07 16:48:26 +08:00
parent 8349e5f9c7
commit 85fb879c74
17 changed files with 188 additions and 186 deletions

View File

@@ -1,8 +1,6 @@
from django.db import connection
from seahub.base.accounts import CcnetUser
from seaserv import ccnet_rpc, get_ccnetuser
from seahub.base.accounts import User
class ModelBackend(object):
"""
@@ -14,11 +12,12 @@ class ModelBackend(object):
# TODO: Model, login attribute name and password attribute name should be
# configurable.
def authenticate(self, username=None, password=None):
ccnetuser = get_ccnetuser(username=username)
if ccnetuser and ccnetuser.check_password(password):
return ccnetuser
return None
try:
user = User.objects.get(email=username)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_group_permissions(self, user_obj):
"""
@@ -53,5 +52,9 @@ class ModelBackend(object):
return False
def get_user(self, username):
return get_ccnetuser(username=username)
try:
user = User.objects.get(email=username)
except User.DoesNotExist:
user = None
return user

View File

@@ -7,8 +7,7 @@ from django import forms
from django.utils.translation import ugettext_lazy as _
from django.utils.http import int_to_base36
from seaserv import get_ccnetuser
from seahub.base.accounts import User
class AuthenticationForm(forms.Form):
"""
@@ -64,8 +63,10 @@ class PasswordResetForm(forms.Form):
"""
email = self.cleaned_data["email"]
self.users_cache = get_ccnetuser(username=email)
if not self.users_cache:
# TODO: add filter method to UserManager
try:
self.users_cache = User.objects.get(email=email)
except User.DoesNotExist:
raise forms.ValidationError(_("That e-mail address doesn't have an associated user account. Are you sure you've registered?"))
return email
@@ -77,7 +78,7 @@ class PasswordResetForm(forms.Form):
"""
from django.core.mail import send_mail
ccnetuser = self.users_cache
user = self.users_cache
if not domain_override:
current_site = Site.objects.get_current()
site_name = current_site.name
@@ -87,16 +88,16 @@ class PasswordResetForm(forms.Form):
t = loader.get_template(email_template_name)
c = {
'email': ccnetuser.username,
'email': user.username,
'domain': domain,
'site_name': site_name,
'uid': int_to_base36(ccnetuser.id),
'user': ccnetuser,
'token': token_generator.make_token(ccnetuser),
'uid': int_to_base36(user.id),
'user': user,
'token': token_generator.make_token(user),
'protocol': use_https and 'https' or 'http',
}
send_mail(_("Password reset on %s") % site_name,
t.render(Context(c)), None, [ccnetuser.username])
t.render(Context(c)), None, [user.username])
class SetPasswordForm(forms.Form):
"""

View File

@@ -18,7 +18,7 @@ from auth.forms import AuthenticationForm
from auth.forms import PasswordResetForm, SetPasswordForm, PasswordChangeForm
from auth.tokens import default_token_generator
from seaserv import get_ccnetuser
from seahub.base.accounts import User
@csrf_protect
@never_cache
@@ -150,19 +150,16 @@ def password_reset_confirm(request, uidb36=None, token=None, template_name='regi
post_reset_redirect = reverse('auth.views.password_reset_complete')
try:
uid_int = base36_to_int(uidb36)
except ValueError:
raise Http404
user = User.objects.get(id=uid_int)
except (ValueError, User.DoesNotExist):
user = None
ccnetuser = get_ccnetuser(userid=uid_int)
if not ccnetuser:
raise Http404
context_instance = RequestContext(request)
if token_generator.check_token(ccnetuser, token):
if token_generator.check_token(user, token):
context_instance['validlink'] = True
if request.method == 'POST':
form = set_password_form(ccnetuser, request.POST)
form = set_password_form(user, request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(post_reset_redirect)

View File

@@ -10,7 +10,6 @@ from django.template.loader import render_to_string
from django.utils.hashcompat import sha_constructor
from django.utils.translation import ugettext_lazy as _
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_ccnetuser
SHA1_RE = re.compile('^[a-f0-9]{40}$')
@@ -52,13 +51,16 @@ class RegistrationManager(models.Manager):
except self.model.DoesNotExist:
return False
if not profile.activation_key_expired():
# Activate emailuser
ccnetuser = get_ccnetuser(userid=profile.emailuser_id)
ccnetuser.is_active = True
ccnetuser.save()
profile.activation_key = self.model.ACTIVATED
profile.save()
return ccnetuser
# Activate user
try:
user = User.objects.get(id=profile.emailuser_id)
user.is_active = True
user.save()
profile.activation_key = self.model.ACTIVATED
profile.save()
return user
except User.DoesNotExist:
return False
return False
def create_email_user(self, username, email, password,
@@ -72,19 +74,17 @@ class RegistrationManager(models.Manager):
user. To disable this, pass ``send_email=False``.
"""
from seahub.base.accounts import CcnetUser
ccnetuser = CcnetUser.objects.create_user(username, password, False, False)
#TODO: handle None type
ccnetuser.is_active = is_active
ccnetuser.save()
user = User.objects.create_user(username, password, False, False)
user.is_active = is_active
user.save()
registration_profile = self.create_profile(ccnetuser)
registration_profile = self.create_profile(user)
if send_email:
registration_profile.send_activation_email(site)
return ccnetuser
return user
def create_inactive_user(self, username, email, password,
site, send_email=True):
@@ -160,9 +160,13 @@ class RegistrationManager(models.Manager):
"""
for profile in self.all():
if profile.activation_key_expired():
ccnetuser = get_ccnetuser(userid=profile.emailuser_id)
if not ccnetuser.is_active:
ccnet_threaded_rpc.remove_emailuser(ccnetuser.username)
try:
user = User.objects.get(id=profile.emailuser_id)
if not user.is_active:
user.delete()
except User.DoesNotExist:
pass
class RegistrationProfile(models.Model):
"""
@@ -218,11 +222,14 @@ class RegistrationProfile(models.Model):
"""
expiration_date = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS)
ccnetuser = get_ccnetuser(userid=self.emailuser_id)
try:
user = User.objects.get(id=self.emailuser_id)
except User.DoesNotExist:
return False
return self.activation_key == self.ACTIVATED or \
(datetime.datetime.fromtimestamp(ccnetuser.ctime/1000000) + expiration_date <= datetime.datetime.now())
(datetime.datetime.fromtimestamp(user.ctime/1000000) + expiration_date <= datetime.datetime.now())
activation_key_expired.boolean = True
@@ -276,6 +283,11 @@ class RegistrationProfile(models.Model):
message = render_to_string('registration/activation_email.txt',
ctx_dict)
ccnetuser = get_ccnetuser(userid=self.emailuser_id)
ccnetuser.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
try:
user = User.objects.get(id=self.emailuser_id)
user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
except User.DoesNotExist:
pass
# We put this import here to prevent circular import
from seahub.base.accounts import User

View File

@@ -3,7 +3,7 @@ import service
from service import ccnet_rpc, monitor_rpc, seafserv_rpc, \
seafserv_threaded_rpc, ccnet_threaded_rpc
from service import send_command
from service import get_ccnetuser, get_emailusers
from service import get_emailusers
from service import get_org_groups, get_personal_groups, get_group_repoids, \
check_group_staff, remove_group_user, get_group, get_org_id_by_group
from service import get_repos, get_repo, get_commits, get_branches, \

View File

@@ -86,47 +86,12 @@ else:
#### Basic ccnet API ####
def get_ccnetuser(username=None, userid=None):
# Get emailuser from db
if username:
emailuser = ccnet_threaded_rpc.get_emailuser(username)
if userid:
emailuser = ccnet_threaded_rpc.get_emailuser_by_id(userid)
if not emailuser:
return None
# Check whether is business account
# orgs = ccnet_threaded_rpc.get_orgs_by_user(emailuser.email)
# emailuser.org = org
# And convert to ccnetuser
from seahub.base.accounts import convert_to_ccnetuser
ccnetuser = convert_to_ccnetuser(emailuser)
return ccnetuser
def get_emailusers(start, limit):
try:
users = ccnet_threaded_rpc.get_emailusers(start, limit)
except SearpcError:
users = []
return users
# def get_groups():
# """Get group object list. """
# group_ids = ccnet_threaded_rpc.list_groups()
# if not group_ids:
# return []
# groups = []
# for group_id in group_ids.split("\n"):
# # too handle the ending '\n'
# if group_id == '':
# continue
# group = ccnet_threaded_rpc.get_group(group_id)
# groups.append(group)
# return groups
def get_group(group_id):
group_id_int = int(group_id)
@@ -138,8 +103,8 @@ def get_group(group_id):
def check_group_staff(group_id_int, user_or_username):
"""Check where user is group staff"""
from seahub.base.accounts import CcnetUser
if isinstance(user_or_username, CcnetUser):
from seahub.base.accounts import User
if isinstance(user_or_username, User):
user_or_username = user_or_username.username
return ccnet_threaded_rpc.check_group_staff(group_id_int, user_or_username)