1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-08 02:23:44 +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

@ -10,7 +10,7 @@ from auth.decorators import login_required, api_login_required
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, \ from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, \
get_repo, get_commits, get_branches, \ 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 get_group_repoids, check_group_staff
from seahub.utils import list_to_string, \ from seahub.utils import list_to_string, \

View File

@ -9,7 +9,7 @@ from django.utils.hashcompat import md5_constructor
from django.utils.encoding import smart_str from django.utils.encoding import smart_str
from django.db.models import signals from django.db.models import signals
from seahub.base.accounts import CcnetUser from seahub.base.accounts import User
try: try:
from cStringIO import StringIO from cStringIO import StringIO

View File

@ -5,8 +5,7 @@ from django.utils.translation import ugettext as _
from django.utils.hashcompat import md5_constructor from django.utils.hashcompat import md5_constructor
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from seahub.base.accounts import CcnetUser from seahub.base.accounts import User
from seaserv import get_ccnetuser
from avatar.settings import (AVATAR_GRAVATAR_BACKUP, AVATAR_GRAVATAR_DEFAULT, from avatar.settings import (AVATAR_GRAVATAR_BACKUP, AVATAR_GRAVATAR_DEFAULT,
AVATAR_DEFAULT_SIZE) AVATAR_DEFAULT_SIZE)
@ -35,12 +34,12 @@ def avatar_url(user, size=AVATAR_DEFAULT_SIZE):
@cache_result @cache_result
@register.simple_tag @register.simple_tag
def avatar(user, size=AVATAR_DEFAULT_SIZE): def avatar(user, size=AVATAR_DEFAULT_SIZE):
if not isinstance(user, CcnetUser): if not isinstance(user, User):
try: try:
user = get_ccnetuser(username=user) user = User.objects.get(email=user)
alt = unicode(user) alt = unicode(user)
url = avatar_url(user, size) url = avatar_url(user, size)
except: except User.DoesNotExist:
url = get_default_avatar_url() url = get_default_avatar_url()
alt = _("Default Avatar") alt = _("Default Avatar")
else: else:

View File

@ -1,9 +1,7 @@
from django.conf import settings from django.conf import settings
from django.core.cache import cache from django.core.cache import cache
from seahub.base.accounts import CcnetUser from seahub.base.accounts import User
from seaserv import get_ccnetuser
from avatar.settings import (AVATAR_DEFAULT_URL, AVATAR_CACHE_TIMEOUT, from avatar.settings import (AVATAR_DEFAULT_URL, AVATAR_CACHE_TIMEOUT,
AUTO_GENERATE_AVATAR_SIZES, AVATAR_DEFAULT_SIZE) 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. 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 user_or_username = user_or_username.username
return '%s_%s_%s' % (prefix, user_or_username, size) 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) return '%s%s' % (base_url, AVATAR_DEFAULT_URL)
def get_primary_avatar(user, size=AVATAR_DEFAULT_SIZE): def get_primary_avatar(user, size=AVATAR_DEFAULT_SIZE):
if not isinstance(user, CcnetUser): if not isinstance(user, User):
try: try:
user = get_ccnetuser(username=user) user = User.objects.get(email=user)
except: except User.DoesNotExist:
return None return None
try: try:
# Order by -primary first; this means if a primary=True avatar exists # Order by -primary first; this means if a primary=True avatar exists

View File

@ -12,76 +12,98 @@ from auth import authenticate, login
from registration import signals from registration import signals
#from registration.forms import RegistrationForm #from registration.forms import RegistrationForm
from registration.models import RegistrationProfile from registration.models import RegistrationProfile
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_ccnetuser from seaserv import ccnet_threaded_rpc
class UserManager(object): class UserManager(object):
def create_user(self, username, password=None, is_staff=False, is_active=False): def create_user(self, email, password=None, is_staff=False, is_active=False):
ccnet_threaded_rpc.add_emailuser(username, password, int(is_staff), int(is_active)) """
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) user = User(email=email)
return ccnetuser user.password = password
user.is_staff = is_staff
user.is_active = is_active
user.save()
def convert_to_ccnetuser(emailuser): return self.get(email=email)
ccnetuser = CcnetUser(emailuser.props.email,
raw_password='') def get(self, email=None, id=None):
ccnetuser.id = emailuser.props.id if email:
ccnetuser.email = emailuser.props.email emailuser = ccnet_threaded_rpc.get_emailuser(email)
ccnetuser.password = emailuser.props.passwd if id:
ccnetuser.is_staff = emailuser.props.is_staff emailuser = ccnet_threaded_rpc.get_emailuser_by_id(id)
ccnetuser.is_active = emailuser.props.is_active if not emailuser:
ccnetuser.ctime = emailuser.props.ctime raise User.DoesNotExist, 'User matching query does not exits.'
ccnetuser.org = emailuser.org
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_staff = False
is_active = False is_active = False
objects = UserManager() is_superuser = False
groups = []
org = None org = None
objects = UserManager()
class DoesNotExist(Exception):
pass
def __init__(self, username, raw_password): def __init__(self, email):
self.username = username self.username = email
self.raw_password = raw_password self.email = email
def __unicode__(self): def __unicode__(self):
return self.username 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): def is_anonymous(self):
""" """
Always returns False. This is a way of comparing User objects to Always returns False. This is a way of comparing User objects to
anonymous users. anonymous users.
""" """
return False 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): def save(self):
emailuser = ccnet_threaded_rpc.get_emailuser(self.username) emailuser = ccnet_threaded_rpc.get_emailuser(self.username)
if emailuser: if emailuser:
ccnet_threaded_rpc.update_emailuser(self.id, self.password, ccnet_threaded_rpc.update_emailuser(emailuser.id, self.password,
int(self.is_staff), int(self.is_active)) int(self.is_staff),
int(self.is_active))
else: else:
self.objects.create_user(username=self.username, ccnet_threaded_rpc.add_emailuser(self.username, self.password,
password=self.raw_password, int(self.is_staff),
is_staff=self.is_staff, int(self.is_active))
is_active=self.is_active)
def delete(self): 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_emailuser(self.username)
ccnet_threaded_rpc.remove_binding(self.username) ccnet_threaded_rpc.remove_binding(self.username)
ccnet_threaded_rpc.remove_group_user(self.username)
def get_and_delete_messages(self): def get_and_delete_messages(self):
messages = [] messages = []
@ -104,15 +126,15 @@ class CcnetUser(object):
# algorithm or salt. # algorithm or salt.
if '$' not in self.password: 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 is_correct
return check_password(raw_password, self.password) return check_password(raw_password, self.password)
def email_user(self, subject, message, from_email=None): def email_user(self, subject, message, from_email=None):
"Sends an e-mail to this User." "Sends an e-mail to this User."
from django.core.mail import send_mail 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): class RegistrationBackend(object):
""" """

View File

@ -1,10 +1,11 @@
# encoding: utf-8 # encoding: utf-8
from django import forms from django import forms
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from seaserv import ccnet_rpc, ccnet_threaded_rpc, is_valid_filename from seaserv import ccnet_rpc, ccnet_threaded_rpc, is_valid_filename
from seahub.base.accounts import User
class AddUserForm(forms.Form): class AddUserForm(forms.Form):
""" """
Form for adding a user. Form for adding a user.
@ -16,11 +17,12 @@ class AddUserForm(forms.Form):
def clean_email(self): def clean_email(self):
email = self.cleaned_data['email'] email = self.cleaned_data['email']
emailuser = ccnet_threaded_rpc.get_emailuser(email) try:
if not emailuser: user = User.objects.get(email=email)
return self.cleaned_data['email'] raise forms.ValidationError(_("A user with this email already"))
else: except User.DoesNotExist:
raise forms.ValidationError(_("A user with this email already")) return self.cleaned_data['email']
def clean(self): def clean(self):
""" """
Verifiy that the values entered into the two password fields Verifiy that the values entered into the two password fields

View File

@ -21,7 +21,7 @@ from seahub.profile.models import Profile
from seahub.settings import SITE_ROOT from seahub.settings import SITE_ROOT
from seahub.utils import render_error, render_permission_error, \ from seahub.utils import render_error, render_permission_error, \
validate_group_name, emails2list validate_group_name, emails2list
from seahub.views import validate_emailuser from seahub.views import is_registered_user
@login_required @login_required
def group_list(request): def group_list(request):
@ -397,7 +397,7 @@ def group_members(request, group_id):
mail_sended.send(sender=None, user=request.user.username, mail_sended.send(sender=None, user=request.user.username,
email=member_name) email=member_name)
if not validate_emailuser(member_name): if not is_registered_user(member_name):
err_msg = u'无法添加成员,用户 %s 不存在' % member_name err_msg = u'无法添加成员,用户 %s 不存在' % member_name
return render_error(request, err_msg) return render_error(request, err_msg)
else: else:

View File

@ -15,7 +15,7 @@ from pysearpc import SearpcError
from seaserv import ccnet_threaded_rpc, seafserv_threaded_rpc, \ from seaserv import ccnet_threaded_rpc, seafserv_threaded_rpc, \
get_orgs_by_user, get_org_repos, \ get_orgs_by_user, get_org_repos, \
get_org_by_url_prefix, create_org, get_user_current_org, add_org_user, \ 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 create_org_repo, get_org_id_by_group
from decorators import org_staff_required from decorators import org_staff_required
@ -23,6 +23,7 @@ from forms import OrgCreateForm
from signals import org_user_added from signals import org_user_added
from notifications.models import UserNotification from notifications.models import UserNotification
from registration.models import RegistrationProfile from registration.models import RegistrationProfile
from seahub.base.accounts import User
from seahub.contacts import Contact from seahub.contacts import Contact
from seahub.forms import RepoCreateForm from seahub.forms import RepoCreateForm
import seahub.settings as seahub_settings import seahub.settings as seahub_settings
@ -160,7 +161,8 @@ def org_useradmin(request, url_prefix):
continue continue
org_id = request.user.org['org_id'] org_id = request.user.org['org_id']
if get_ccnetuser(username=email): try:
User.objects.get(email=email)
email = email.strip(' ') email = email.strip(' ')
org_id = request.user.org['org_id'] org_id = request.user.org['org_id']
add_org_user(org_id, email, 0) 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, org_user_added.send(sender=None, org_id=org_id,
from_email=request.user.username, from_email=request.user.username,
to_email=email) to_email=email)
else: except User.DoesNotExist:
# User is not registered, just create account and # User is not registered, just create account and
# add that account to org # add that account to org
password = gen_token(max_length=6) password = gen_token(max_length=6)

View File

@ -12,6 +12,7 @@ from pysearpc import SearpcError
from forms import ProfileForm from forms import ProfileForm
from models import Profile from models import Profile
from utils import render_error from utils import render_error
from seahub.base.accounts import User
from seahub.contacts.models import Contact from seahub.contacts.models import Contact
#@login_required #@login_required
@ -74,10 +75,10 @@ def user_profile(request, user):
user_nickname = '' user_nickname = ''
user_intro = '' user_intro = ''
err_msg = '' err_msg = ''
try: try:
user_check = ccnet_threaded_rpc.get_emailuser(user) user_check = User.objects.get(email=user)
except: except User.DoesNotExist:
user_check = None user_check = None
if user_check: if user_check:
@ -114,10 +115,10 @@ def get_user_profile(request, user):
'new_user': '' 'new_user': ''
} }
content_type = 'application/json; charset=utf-8' content_type = 'application/json; charset=utf-8'
try: try:
user_check = ccnet_threaded_rpc.get_emailuser(user) user_check = User.objects.get(email=user)
except: except User.DoesNotExist:
user_check = None user_check = None
if user_check: if user_check:

View File

@ -19,7 +19,7 @@ from settings import ANONYMOUS_SHARE_COOKIE_TIMEOUT
from tokens import anon_share_token_generator from tokens import anon_share_token_generator
from seahub.contacts.signals import mail_sended from seahub.contacts.signals import mail_sended
from seahub.share.models import FileShare 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 from seahub.utils import render_permission_error, emails2list
@login_required @login_required
@ -86,7 +86,7 @@ def share_repo(request):
messages.add_message(request, messages.ERROR, to_email) messages.add_message(request, messages.ERROR, to_email)
continue 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. # Generate shared link and send mail if user has not registered.
kwargs = {'repo_id': repo_id, kwargs = {'repo_id': repo_id,
'repo_owner': from_email, 'repo_owner': from_email,

View File

@ -1,8 +1,6 @@
from django.db import connection from django.db import connection
from seahub.base.accounts import CcnetUser from seahub.base.accounts import User
from seaserv import ccnet_rpc, get_ccnetuser
class ModelBackend(object): class ModelBackend(object):
""" """
@ -14,11 +12,12 @@ class ModelBackend(object):
# TODO: Model, login attribute name and password attribute name should be # TODO: Model, login attribute name and password attribute name should be
# configurable. # configurable.
def authenticate(self, username=None, password=None): def authenticate(self, username=None, password=None):
ccnetuser = get_ccnetuser(username=username) try:
if ccnetuser and ccnetuser.check_password(password): user = User.objects.get(email=username)
return ccnetuser if user.check_password(password):
return user
return None except User.DoesNotExist:
return None
def get_group_permissions(self, user_obj): def get_group_permissions(self, user_obj):
""" """
@ -53,5 +52,9 @@ class ModelBackend(object):
return False return False
def get_user(self, username): 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.translation import ugettext_lazy as _
from django.utils.http import int_to_base36 from django.utils.http import int_to_base36
from seaserv import get_ccnetuser from seahub.base.accounts import User
class AuthenticationForm(forms.Form): class AuthenticationForm(forms.Form):
""" """
@ -64,8 +63,10 @@ class PasswordResetForm(forms.Form):
""" """
email = self.cleaned_data["email"] email = self.cleaned_data["email"]
self.users_cache = get_ccnetuser(username=email) # TODO: add filter method to UserManager
if not self.users_cache: 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?")) raise forms.ValidationError(_("That e-mail address doesn't have an associated user account. Are you sure you've registered?"))
return email return email
@ -77,7 +78,7 @@ class PasswordResetForm(forms.Form):
""" """
from django.core.mail import send_mail from django.core.mail import send_mail
ccnetuser = self.users_cache user = self.users_cache
if not domain_override: if not domain_override:
current_site = Site.objects.get_current() current_site = Site.objects.get_current()
site_name = current_site.name site_name = current_site.name
@ -87,16 +88,16 @@ class PasswordResetForm(forms.Form):
t = loader.get_template(email_template_name) t = loader.get_template(email_template_name)
c = { c = {
'email': ccnetuser.username, 'email': user.username,
'domain': domain, 'domain': domain,
'site_name': site_name, 'site_name': site_name,
'uid': int_to_base36(ccnetuser.id), 'uid': int_to_base36(user.id),
'user': ccnetuser, 'user': user,
'token': token_generator.make_token(ccnetuser), 'token': token_generator.make_token(user),
'protocol': use_https and 'https' or 'http', 'protocol': use_https and 'https' or 'http',
} }
send_mail(_("Password reset on %s") % site_name, 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): class SetPasswordForm(forms.Form):
""" """

View File

@ -18,7 +18,7 @@ from auth.forms import AuthenticationForm
from auth.forms import PasswordResetForm, SetPasswordForm, PasswordChangeForm from auth.forms import PasswordResetForm, SetPasswordForm, PasswordChangeForm
from auth.tokens import default_token_generator from auth.tokens import default_token_generator
from seaserv import get_ccnetuser from seahub.base.accounts import User
@csrf_protect @csrf_protect
@never_cache @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') post_reset_redirect = reverse('auth.views.password_reset_complete')
try: try:
uid_int = base36_to_int(uidb36) uid_int = base36_to_int(uidb36)
except ValueError: user = User.objects.get(id=uid_int)
raise Http404 except (ValueError, User.DoesNotExist):
user = None
ccnetuser = get_ccnetuser(userid=uid_int)
if not ccnetuser:
raise Http404
context_instance = RequestContext(request) context_instance = RequestContext(request)
if token_generator.check_token(ccnetuser, token): if token_generator.check_token(user, token):
context_instance['validlink'] = True context_instance['validlink'] = True
if request.method == 'POST': if request.method == 'POST':
form = set_password_form(ccnetuser, request.POST) form = set_password_form(user, request.POST)
if form.is_valid(): if form.is_valid():
form.save() form.save()
return HttpResponseRedirect(post_reset_redirect) 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.hashcompat import sha_constructor
from django.utils.translation import ugettext_lazy as _ 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}$') SHA1_RE = re.compile('^[a-f0-9]{40}$')
@ -52,13 +51,16 @@ class RegistrationManager(models.Manager):
except self.model.DoesNotExist: except self.model.DoesNotExist:
return False return False
if not profile.activation_key_expired(): if not profile.activation_key_expired():
# Activate emailuser # Activate user
ccnetuser = get_ccnetuser(userid=profile.emailuser_id) try:
ccnetuser.is_active = True user = User.objects.get(id=profile.emailuser_id)
ccnetuser.save() user.is_active = True
profile.activation_key = self.model.ACTIVATED user.save()
profile.save() profile.activation_key = self.model.ACTIVATED
return ccnetuser profile.save()
return user
except User.DoesNotExist:
return False
return False return False
def create_email_user(self, username, email, password, def create_email_user(self, username, email, password,
@ -72,19 +74,17 @@ class RegistrationManager(models.Manager):
user. To disable this, pass ``send_email=False``. user. To disable this, pass ``send_email=False``.
""" """
from seahub.base.accounts import CcnetUser
ccnetuser = CcnetUser.objects.create_user(username, password, False, False) user = User.objects.create_user(username, password, False, False)
#TODO: handle None type user.is_active = is_active
ccnetuser.is_active = is_active user.save()
ccnetuser.save()
registration_profile = self.create_profile(ccnetuser) registration_profile = self.create_profile(user)
if send_email: if send_email:
registration_profile.send_activation_email(site) registration_profile.send_activation_email(site)
return ccnetuser return user
def create_inactive_user(self, username, email, password, def create_inactive_user(self, username, email, password,
site, send_email=True): site, send_email=True):
@ -160,9 +160,13 @@ class RegistrationManager(models.Manager):
""" """
for profile in self.all(): for profile in self.all():
if profile.activation_key_expired(): if profile.activation_key_expired():
ccnetuser = get_ccnetuser(userid=profile.emailuser_id) try:
if not ccnetuser.is_active: user = User.objects.get(id=profile.emailuser_id)
ccnet_threaded_rpc.remove_emailuser(ccnetuser.username) if not user.is_active:
user.delete()
except User.DoesNotExist:
pass
class RegistrationProfile(models.Model): class RegistrationProfile(models.Model):
""" """
@ -218,11 +222,14 @@ class RegistrationProfile(models.Model):
""" """
expiration_date = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS) 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 \ 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 activation_key_expired.boolean = True
@ -276,6 +283,11 @@ class RegistrationProfile(models.Model):
message = render_to_string('registration/activation_email.txt', message = render_to_string('registration/activation_email.txt',
ctx_dict) ctx_dict)
ccnetuser = get_ccnetuser(userid=self.emailuser_id) try:
ccnetuser.email_user(subject, message, settings.DEFAULT_FROM_EMAIL) 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, \ from service import ccnet_rpc, monitor_rpc, seafserv_rpc, \
seafserv_threaded_rpc, ccnet_threaded_rpc seafserv_threaded_rpc, ccnet_threaded_rpc
from service import send_command 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, \ 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 check_group_staff, remove_group_user, get_group, get_org_id_by_group
from service import get_repos, get_repo, get_commits, get_branches, \ from service import get_repos, get_repo, get_commits, get_branches, \

View File

@ -86,47 +86,12 @@ else:
#### Basic ccnet API #### #### 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): def get_emailusers(start, limit):
try: try:
users = ccnet_threaded_rpc.get_emailusers(start, limit) users = ccnet_threaded_rpc.get_emailusers(start, limit)
except SearpcError: except SearpcError:
users = [] users = []
return 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): def get_group(group_id):
group_id_int = int(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): def check_group_staff(group_id_int, user_or_username):
"""Check where user is group staff""" """Check where user is group staff"""
from seahub.base.accounts import CcnetUser from seahub.base.accounts import User
if isinstance(user_or_username, CcnetUser): if isinstance(user_or_username, User):
user_or_username = user_or_username.username user_or_username = user_or_username.username
return ccnet_threaded_rpc.check_group_staff(group_id_int, user_or_username) return ccnet_threaded_rpc.check_group_staff(group_id_int, user_or_username)

View File

@ -30,12 +30,12 @@ from auth.tokens import default_token_generator
from share.models import FileShare from share.models import FileShare
from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, get_emailusers, \ from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, get_emailusers, \
get_repo, get_commits, get_branches, is_valid_filename, remove_group_user,\ 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_repoids, check_group_staff, get_personal_groups, is_repo_owner, \
get_group get_group
from pysearpc import SearpcError from pysearpc import SearpcError
from seahub.base.accounts import CcnetUser from seahub.base.accounts import User
from seahub.base.models import UuidObjidMap from seahub.base.models import UuidObjidMap
from seahub.contacts.models import Contact from seahub.contacts.models import Contact
from seahub.contacts.signals import mail_sended from seahub.contacts.signals import mail_sended
@ -68,20 +68,17 @@ def validate_owner(request, repo_id):
return True if ret else False return True if ret else False
def validate_emailuser(emailuser): def is_registered_user(email):
""" """
Check whether user is registerd. Check whether user is registerd.
""" """
try: try:
user = ccnet_threaded_rpc.get_emailuser(emailuser) user = User.objects.get(email=email)
except: except User.DoesNotExist:
user = None user = None
if user: return True if user else False
return True
else:
return False
def check_shared_repo(request, repo_id): def check_shared_repo(request, repo_id):
""" """
@ -1208,22 +1205,25 @@ def user_remove(request, user_id):
if not request.user.is_staff: if not request.user.is_staff:
raise Http404 raise Http404
ccnetuser = get_ccnetuser(userid=int(user_id)) try:
remove_group_user(ccnetuser.email) user = User.objects.get(id=int(user_id))
ccnetuser.delete() user.delete()
except User.DoesNotExist:
pass
return HttpResponseRedirect(reverse('sys_useradmin')) return HttpResponseRedirect(reverse('sys_useradmin'))
@login_required @login_required
def activate_user(request, user_id): def activate_user(request, user_id):
"""The user id is emailuser id."""
if not request.user.is_staff: if not request.user.is_staff:
raise Http404 raise Http404
ccnetuser = get_ccnetuser(userid=int(user_id)) try:
ccnetuser.is_active = True user = User.objects.get(id=int(user_id))
ccnetuser.save() user.is_active = True
user.save()
except User.DoesNotExist:
pass
return HttpResponseRedirect(reverse('useradmin')) return HttpResponseRedirect(reverse('useradmin'))
@ -1264,9 +1264,9 @@ def user_add(request):
email = form.cleaned_data['email'] email = form.cleaned_data['email']
password = form.cleaned_data['password1'] password = form.cleaned_data['password1']
ccnetuser = CcnetUser(username=email, raw_password=password) user = User(email=email, raw_password=password)
ccnetuser.is_active = True user.is_active = True
ccnetuser.save() user.save()
if request.user.org: if request.user.org:
org_id = request.user.org['org_id'] org_id = request.user.org['org_id']