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:
@@ -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
|
||||
|
||||
|
@@ -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):
|
||||
"""
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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, \
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user