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:
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, \
|
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, \
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
106
base/accounts.py
106
base/accounts.py
@ -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):
|
||||||
"""
|
"""
|
||||||
|
14
forms.py
14
forms.py
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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)
|
||||||
|
@ -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:
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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, \
|
||||||
|
@ -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)
|
||||||
|
42
views.py
42
views.py
@ -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']
|
||||||
|
Loading…
Reference in New Issue
Block a user