mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-01 15:23:05 +00:00
Refactor auth and rename CcnetUser to User
This commit is contained in:
parent
8349e5f9c7
commit
85fb879c74
@ -10,7 +10,7 @@ from auth.decorators import login_required, api_login_required
|
||||
|
||||
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, \
|
||||
get_repo, get_commits, get_branches, \
|
||||
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, get_ccnetuser, \
|
||||
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, \
|
||||
get_group_repoids, check_group_staff
|
||||
|
||||
from seahub.utils import list_to_string, \
|
||||
|
@ -9,7 +9,7 @@ from django.utils.hashcompat import md5_constructor
|
||||
from django.utils.encoding import smart_str
|
||||
from django.db.models import signals
|
||||
|
||||
from seahub.base.accounts import CcnetUser
|
||||
from seahub.base.accounts import User
|
||||
|
||||
try:
|
||||
from cStringIO import StringIO
|
||||
|
@ -5,8 +5,7 @@ from django.utils.translation import ugettext as _
|
||||
from django.utils.hashcompat import md5_constructor
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
from seahub.base.accounts import CcnetUser
|
||||
from seaserv import get_ccnetuser
|
||||
from seahub.base.accounts import User
|
||||
|
||||
from avatar.settings import (AVATAR_GRAVATAR_BACKUP, AVATAR_GRAVATAR_DEFAULT,
|
||||
AVATAR_DEFAULT_SIZE)
|
||||
@ -35,12 +34,12 @@ def avatar_url(user, size=AVATAR_DEFAULT_SIZE):
|
||||
@cache_result
|
||||
@register.simple_tag
|
||||
def avatar(user, size=AVATAR_DEFAULT_SIZE):
|
||||
if not isinstance(user, CcnetUser):
|
||||
if not isinstance(user, User):
|
||||
try:
|
||||
user = get_ccnetuser(username=user)
|
||||
user = User.objects.get(email=user)
|
||||
alt = unicode(user)
|
||||
url = avatar_url(user, size)
|
||||
except:
|
||||
except User.DoesNotExist:
|
||||
url = get_default_avatar_url()
|
||||
alt = _("Default Avatar")
|
||||
else:
|
||||
|
@ -1,9 +1,7 @@
|
||||
from django.conf import settings
|
||||
from django.core.cache import cache
|
||||
|
||||
from seahub.base.accounts import CcnetUser
|
||||
|
||||
from seaserv import get_ccnetuser
|
||||
from seahub.base.accounts import User
|
||||
|
||||
from avatar.settings import (AVATAR_DEFAULT_URL, AVATAR_CACHE_TIMEOUT,
|
||||
AUTO_GENERATE_AVATAR_SIZES, AVATAR_DEFAULT_SIZE)
|
||||
@ -14,7 +12,7 @@ def get_cache_key(user_or_username, size, prefix):
|
||||
"""
|
||||
Returns a cache key consisten of a username and image size.
|
||||
"""
|
||||
if isinstance(user_or_username, CcnetUser):
|
||||
if isinstance(user_or_username, User):
|
||||
user_or_username = user_or_username.username
|
||||
return '%s_%s_%s' % (prefix, user_or_username, size)
|
||||
|
||||
@ -62,10 +60,10 @@ def get_default_avatar_url():
|
||||
return '%s%s' % (base_url, AVATAR_DEFAULT_URL)
|
||||
|
||||
def get_primary_avatar(user, size=AVATAR_DEFAULT_SIZE):
|
||||
if not isinstance(user, CcnetUser):
|
||||
if not isinstance(user, User):
|
||||
try:
|
||||
user = get_ccnetuser(username=user)
|
||||
except:
|
||||
user = User.objects.get(email=user)
|
||||
except User.DoesNotExist:
|
||||
return None
|
||||
try:
|
||||
# Order by -primary first; this means if a primary=True avatar exists
|
||||
|
106
base/accounts.py
106
base/accounts.py
@ -12,76 +12,98 @@ from auth import authenticate, login
|
||||
from registration import signals
|
||||
#from registration.forms import RegistrationForm
|
||||
from registration.models import RegistrationProfile
|
||||
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_ccnetuser
|
||||
from seaserv import ccnet_threaded_rpc
|
||||
|
||||
class UserManager(object):
|
||||
def create_user(self, username, password=None, is_staff=False, is_active=False):
|
||||
ccnet_threaded_rpc.add_emailuser(username, password, int(is_staff), int(is_active))
|
||||
def create_user(self, email, password=None, is_staff=False, is_active=False):
|
||||
"""
|
||||
Creates and saves a User with given username and password.
|
||||
"""
|
||||
# Normalize the address by lowercasing the domain part of the email
|
||||
# address.
|
||||
try:
|
||||
email_name, domain_part = email.strip().split('@', 1)
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
email = '@'.join([email_name, domain_part.lower()])
|
||||
|
||||
ccnetuser = get_ccnetuser(username=username)
|
||||
return ccnetuser
|
||||
user = User(email=email)
|
||||
user.password = password
|
||||
user.is_staff = is_staff
|
||||
user.is_active = is_active
|
||||
user.save()
|
||||
|
||||
def convert_to_ccnetuser(emailuser):
|
||||
ccnetuser = CcnetUser(emailuser.props.email,
|
||||
raw_password='')
|
||||
ccnetuser.id = emailuser.props.id
|
||||
ccnetuser.email = emailuser.props.email
|
||||
ccnetuser.password = emailuser.props.passwd
|
||||
ccnetuser.is_staff = emailuser.props.is_staff
|
||||
ccnetuser.is_active = emailuser.props.is_active
|
||||
ccnetuser.ctime = emailuser.props.ctime
|
||||
ccnetuser.org = emailuser.org
|
||||
return self.get(email=email)
|
||||
|
||||
def get(self, email=None, id=None):
|
||||
if email:
|
||||
emailuser = ccnet_threaded_rpc.get_emailuser(email)
|
||||
if id:
|
||||
emailuser = ccnet_threaded_rpc.get_emailuser_by_id(id)
|
||||
if not emailuser:
|
||||
raise User.DoesNotExist, 'User matching query does not exits.'
|
||||
|
||||
return ccnetuser
|
||||
user = User(emailuser.email)
|
||||
user.id = emailuser.id
|
||||
user.password = emailuser.passwd
|
||||
user.is_staff = emailuser.is_staff
|
||||
user.is_active = emailuser.is_active
|
||||
user.ctime = emailuser.ctime
|
||||
user.org = emailuser.org
|
||||
return user
|
||||
|
||||
class CcnetUser(object):
|
||||
class User(object):
|
||||
is_staff = False
|
||||
is_active = False
|
||||
objects = UserManager()
|
||||
is_superuser = False
|
||||
groups = []
|
||||
org = None
|
||||
objects = UserManager()
|
||||
|
||||
class DoesNotExist(Exception):
|
||||
pass
|
||||
|
||||
def __init__(self, username, raw_password):
|
||||
self.username = username
|
||||
self.raw_password = raw_password
|
||||
def __init__(self, email):
|
||||
self.username = email
|
||||
self.email = email
|
||||
|
||||
def __unicode__(self):
|
||||
return self.username
|
||||
|
||||
def validate_emailuser(self, email, raw_password):
|
||||
self.set_password(raw_password)
|
||||
return ccnet_threaded_rpc.validate_emailuser(email, raw_password)
|
||||
|
||||
def is_authenticated(self):
|
||||
"""
|
||||
Always return True. This is a way to tell if the user has been
|
||||
authenticated in templates.
|
||||
"""
|
||||
return True
|
||||
|
||||
def is_anonymous(self):
|
||||
"""
|
||||
Always returns False. This is a way of comparing User objects to
|
||||
anonymous users.
|
||||
"""
|
||||
return False
|
||||
|
||||
def is_authenticated(self):
|
||||
"""
|
||||
Always return True. This is a way to tell if the user has been
|
||||
authenticated in templates.
|
||||
"""
|
||||
return True
|
||||
|
||||
def save(self):
|
||||
emailuser = ccnet_threaded_rpc.get_emailuser(self.username)
|
||||
if emailuser:
|
||||
ccnet_threaded_rpc.update_emailuser(self.id, self.password,
|
||||
int(self.is_staff), int(self.is_active))
|
||||
ccnet_threaded_rpc.update_emailuser(emailuser.id, self.password,
|
||||
int(self.is_staff),
|
||||
int(self.is_active))
|
||||
else:
|
||||
self.objects.create_user(username=self.username,
|
||||
password=self.raw_password,
|
||||
is_staff=self.is_staff,
|
||||
is_active=self.is_active)
|
||||
ccnet_threaded_rpc.add_emailuser(self.username, self.password,
|
||||
int(self.is_staff),
|
||||
int(self.is_active))
|
||||
|
||||
def delete(self):
|
||||
"""
|
||||
Remove from ccnet EmailUser table and Binding table
|
||||
When delete user, we should also delete group relationships.
|
||||
"""
|
||||
# TODO: what about repo and org?
|
||||
ccnet_threaded_rpc.remove_emailuser(self.username)
|
||||
ccnet_threaded_rpc.remove_binding(self.username)
|
||||
ccnet_threaded_rpc.remove_group_user(self.username)
|
||||
|
||||
def get_and_delete_messages(self):
|
||||
messages = []
|
||||
@ -104,15 +126,15 @@ class CcnetUser(object):
|
||||
# algorithm or salt.
|
||||
|
||||
if '$' not in self.password:
|
||||
is_correct = (self.password == get_hexdigest('sha1', '', raw_password))
|
||||
is_correct = (self.password == \
|
||||
get_hexdigest('sha1', '', raw_password))
|
||||
return is_correct
|
||||
return check_password(raw_password, self.password)
|
||||
|
||||
def email_user(self, subject, message, from_email=None):
|
||||
"Sends an e-mail to this User."
|
||||
from django.core.mail import send_mail
|
||||
send_mail(subject, message, from_email, [self.username])
|
||||
|
||||
send_mail(subject, message, from_email, [self.email])
|
||||
|
||||
class RegistrationBackend(object):
|
||||
"""
|
||||
|
14
forms.py
14
forms.py
@ -1,10 +1,11 @@
|
||||
# encoding: utf-8
|
||||
from django import forms
|
||||
from django.contrib.auth.models import User
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from seaserv import ccnet_rpc, ccnet_threaded_rpc, is_valid_filename
|
||||
|
||||
from seahub.base.accounts import User
|
||||
|
||||
class AddUserForm(forms.Form):
|
||||
"""
|
||||
Form for adding a user.
|
||||
@ -16,11 +17,12 @@ class AddUserForm(forms.Form):
|
||||
|
||||
def clean_email(self):
|
||||
email = self.cleaned_data['email']
|
||||
emailuser = ccnet_threaded_rpc.get_emailuser(email)
|
||||
if not emailuser:
|
||||
return self.cleaned_data['email']
|
||||
else:
|
||||
raise forms.ValidationError(_("A user with this email already"))
|
||||
try:
|
||||
user = User.objects.get(email=email)
|
||||
raise forms.ValidationError(_("A user with this email already"))
|
||||
except User.DoesNotExist:
|
||||
return self.cleaned_data['email']
|
||||
|
||||
def clean(self):
|
||||
"""
|
||||
Verifiy that the values entered into the two password fields
|
||||
|
@ -21,7 +21,7 @@ from seahub.profile.models import Profile
|
||||
from seahub.settings import SITE_ROOT
|
||||
from seahub.utils import render_error, render_permission_error, \
|
||||
validate_group_name, emails2list
|
||||
from seahub.views import validate_emailuser
|
||||
from seahub.views import is_registered_user
|
||||
|
||||
@login_required
|
||||
def group_list(request):
|
||||
@ -397,7 +397,7 @@ def group_members(request, group_id):
|
||||
mail_sended.send(sender=None, user=request.user.username,
|
||||
email=member_name)
|
||||
|
||||
if not validate_emailuser(member_name):
|
||||
if not is_registered_user(member_name):
|
||||
err_msg = u'无法添加成员,用户 %s 不存在' % member_name
|
||||
return render_error(request, err_msg)
|
||||
else:
|
||||
|
@ -15,7 +15,7 @@ from pysearpc import SearpcError
|
||||
from seaserv import ccnet_threaded_rpc, seafserv_threaded_rpc, \
|
||||
get_orgs_by_user, get_org_repos, \
|
||||
get_org_by_url_prefix, create_org, get_user_current_org, add_org_user, \
|
||||
get_ccnetuser, remove_org_user, get_org_groups, is_valid_filename, \
|
||||
remove_org_user, get_org_groups, is_valid_filename, \
|
||||
create_org_repo, get_org_id_by_group
|
||||
|
||||
from decorators import org_staff_required
|
||||
@ -23,6 +23,7 @@ from forms import OrgCreateForm
|
||||
from signals import org_user_added
|
||||
from notifications.models import UserNotification
|
||||
from registration.models import RegistrationProfile
|
||||
from seahub.base.accounts import User
|
||||
from seahub.contacts import Contact
|
||||
from seahub.forms import RepoCreateForm
|
||||
import seahub.settings as seahub_settings
|
||||
@ -160,7 +161,8 @@ def org_useradmin(request, url_prefix):
|
||||
continue
|
||||
|
||||
org_id = request.user.org['org_id']
|
||||
if get_ccnetuser(username=email):
|
||||
try:
|
||||
User.objects.get(email=email)
|
||||
email = email.strip(' ')
|
||||
org_id = request.user.org['org_id']
|
||||
add_org_user(org_id, email, 0)
|
||||
@ -169,7 +171,7 @@ def org_useradmin(request, url_prefix):
|
||||
org_user_added.send(sender=None, org_id=org_id,
|
||||
from_email=request.user.username,
|
||||
to_email=email)
|
||||
else:
|
||||
except User.DoesNotExist:
|
||||
# User is not registered, just create account and
|
||||
# add that account to org
|
||||
password = gen_token(max_length=6)
|
||||
|
@ -12,6 +12,7 @@ from pysearpc import SearpcError
|
||||
from forms import ProfileForm
|
||||
from models import Profile
|
||||
from utils import render_error
|
||||
from seahub.base.accounts import User
|
||||
from seahub.contacts.models import Contact
|
||||
|
||||
#@login_required
|
||||
@ -74,10 +75,10 @@ def user_profile(request, user):
|
||||
user_nickname = ''
|
||||
user_intro = ''
|
||||
err_msg = ''
|
||||
|
||||
|
||||
try:
|
||||
user_check = ccnet_threaded_rpc.get_emailuser(user)
|
||||
except:
|
||||
user_check = User.objects.get(email=user)
|
||||
except User.DoesNotExist:
|
||||
user_check = None
|
||||
|
||||
if user_check:
|
||||
@ -114,10 +115,10 @@ def get_user_profile(request, user):
|
||||
'new_user': ''
|
||||
}
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
|
||||
try:
|
||||
user_check = ccnet_threaded_rpc.get_emailuser(user)
|
||||
except:
|
||||
user_check = User.objects.get(email=user)
|
||||
except User.DoesNotExist:
|
||||
user_check = None
|
||||
|
||||
if user_check:
|
||||
|
@ -19,7 +19,7 @@ from settings import ANONYMOUS_SHARE_COOKIE_TIMEOUT
|
||||
from tokens import anon_share_token_generator
|
||||
from seahub.contacts.signals import mail_sended
|
||||
from seahub.share.models import FileShare
|
||||
from seahub.views import validate_owner, validate_emailuser
|
||||
from seahub.views import validate_owner, is_registered_user
|
||||
from seahub.utils import render_permission_error, emails2list
|
||||
|
||||
@login_required
|
||||
@ -86,7 +86,7 @@ def share_repo(request):
|
||||
messages.add_message(request, messages.ERROR, to_email)
|
||||
continue
|
||||
|
||||
if not validate_emailuser(to_email):
|
||||
if not is_registered_user(to_email):
|
||||
# Generate shared link and send mail if user has not registered.
|
||||
kwargs = {'repo_id': repo_id,
|
||||
'repo_owner': from_email,
|
||||
|
@ -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)
|
||||
|
42
views.py
42
views.py
@ -30,12 +30,12 @@ from auth.tokens import default_token_generator
|
||||
from share.models import FileShare
|
||||
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, get_emailusers, \
|
||||
get_repo, get_commits, get_branches, is_valid_filename, remove_group_user,\
|
||||
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, get_ccnetuser, \
|
||||
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, \
|
||||
get_group_repoids, check_group_staff, get_personal_groups, is_repo_owner, \
|
||||
get_group
|
||||
from pysearpc import SearpcError
|
||||
|
||||
from seahub.base.accounts import CcnetUser
|
||||
from seahub.base.accounts import User
|
||||
from seahub.base.models import UuidObjidMap
|
||||
from seahub.contacts.models import Contact
|
||||
from seahub.contacts.signals import mail_sended
|
||||
@ -68,20 +68,17 @@ def validate_owner(request, repo_id):
|
||||
|
||||
return True if ret else False
|
||||
|
||||
def validate_emailuser(emailuser):
|
||||
def is_registered_user(email):
|
||||
"""
|
||||
Check whether user is registerd.
|
||||
|
||||
"""
|
||||
try:
|
||||
user = ccnet_threaded_rpc.get_emailuser(emailuser)
|
||||
except:
|
||||
user = User.objects.get(email=email)
|
||||
except User.DoesNotExist:
|
||||
user = None
|
||||
|
||||
if user:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
return True if user else False
|
||||
|
||||
def check_shared_repo(request, repo_id):
|
||||
"""
|
||||
@ -1208,22 +1205,25 @@ def user_remove(request, user_id):
|
||||
if not request.user.is_staff:
|
||||
raise Http404
|
||||
|
||||
ccnetuser = get_ccnetuser(userid=int(user_id))
|
||||
remove_group_user(ccnetuser.email)
|
||||
ccnetuser.delete()
|
||||
try:
|
||||
user = User.objects.get(id=int(user_id))
|
||||
user.delete()
|
||||
except User.DoesNotExist:
|
||||
pass
|
||||
|
||||
return HttpResponseRedirect(reverse('sys_useradmin'))
|
||||
|
||||
@login_required
|
||||
def activate_user(request, user_id):
|
||||
"""The user id is emailuser id."""
|
||||
|
||||
if not request.user.is_staff:
|
||||
raise Http404
|
||||
|
||||
ccnetuser = get_ccnetuser(userid=int(user_id))
|
||||
ccnetuser.is_active = True
|
||||
ccnetuser.save()
|
||||
try:
|
||||
user = User.objects.get(id=int(user_id))
|
||||
user.is_active = True
|
||||
user.save()
|
||||
except User.DoesNotExist:
|
||||
pass
|
||||
|
||||
return HttpResponseRedirect(reverse('useradmin'))
|
||||
|
||||
@ -1264,9 +1264,9 @@ def user_add(request):
|
||||
email = form.cleaned_data['email']
|
||||
password = form.cleaned_data['password1']
|
||||
|
||||
ccnetuser = CcnetUser(username=email, raw_password=password)
|
||||
ccnetuser.is_active = True
|
||||
ccnetuser.save()
|
||||
user = User(email=email, raw_password=password)
|
||||
user.is_active = True
|
||||
user.save()
|
||||
|
||||
if request.user.org:
|
||||
org_id = request.user.org['org_id']
|
||||
|
Loading…
Reference in New Issue
Block a user