1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-21 11:27:18 +00:00

Add custom charfiled to lower email address

This commit is contained in:
zhengxie
2013-10-14 12:06:02 +08:00
parent 27bd64af0d
commit 4cffa7eeab
14 changed files with 59 additions and 26 deletions

View File

@@ -4,13 +4,14 @@ from hashlib import sha1
from django.db import models from django.db import models
from seahub.base.accounts import User from seahub.base.accounts import User
from seahub.base.fields import LowerCaseCharField
class Token(models.Model): class Token(models.Model):
""" """
The default authorization token model. The default authorization token model.
""" """
key = models.CharField(max_length=40, primary_key=True) key = models.CharField(max_length=40, primary_key=True)
user = models.CharField(max_length=255, unique=True) user = LowerCaseCharField(max_length=255, unique=True)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):

View File

@@ -3,6 +3,8 @@ import datetime
import hashlib import hashlib
import os import os
from seahub.base.fields import LowerCaseCharField
from django.db import models from django.db import models
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
@@ -127,7 +129,7 @@ class AvatarBase(object):
) )
class Avatar(models.Model, AvatarBase): class Avatar(models.Model, AvatarBase):
emailuser = models.CharField(max_length=255) emailuser = LowerCaseCharField(max_length=255)
primary = models.BooleanField(default=False) primary = models.BooleanField(default=False)
avatar = models.ImageField(max_length=1024, upload_to=avatar_file_path, blank=True) avatar = models.ImageField(max_length=1024, upload_to=avatar_file_path, blank=True)
date_uploaded = models.DateTimeField(default=datetime.datetime.now) date_uploaded = models.DateTimeField(default=datetime.datetime.now)

View File

@@ -22,14 +22,8 @@ class UserManager(object):
""" """
Creates and saves a User with given username and password. Creates and saves a User with given username and password.
""" """
# Normalize the address by lowercasing the domain part of the email # Lowercasing email address to avoid confusion.
# address. email = email.lower()
try:
email_name, domain_part = email.strip().split('@', 1)
except ValueError:
pass
else:
email = '@'.join([email_name, domain_part.lower()])
user = User(email=email) user = User(email=email)
user.is_staff = is_staff user.is_staff = is_staff

22
seahub/base/fields.py Normal file
View File

@@ -0,0 +1,22 @@
from django.db.models import CharField
class ModifyingFieldDescriptor(object):
""" Modifies a field when set using the field's (overriden) .to_python() method. """
def __init__(self, field):
self.field = field
def __get__(self, instance, owner=None):
if instance is None:
raise AttributeError('Can only be accessed via an instance.')
return instance.__dict__[self.field.name]
def __set__(self, instance, value):
instance.__dict__[self.field.name] = self.field.to_python(value)
class LowerCaseCharField(CharField):
def to_python(self, value):
value = super(LowerCaseCharField, self).to_python(value)
if isinstance(value, basestring):
return value.lower()
return value
def contribute_to_class(self, cls, name):
super(LowerCaseCharField, self).contribute_to_class(cls, name)
setattr(cls, self.name, ModifyingFieldDescriptor(self))

View File

@@ -4,6 +4,7 @@ from django.db import models
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from seahub.base.fields import LowerCaseCharField
from settings import CONTACT_EMAIL_LENGTH from settings import CONTACT_EMAIL_LENGTH
class ContactManager(models.Manager): class ContactManager(models.Manager):
@@ -33,8 +34,8 @@ class ContactManager(models.Manager):
class Contact(models.Model): class Contact(models.Model):
"""Record user's contacts.""" """Record user's contacts."""
user_email = models.CharField(max_length=CONTACT_EMAIL_LENGTH, db_index=True) user_email = LowerCaseCharField(max_length=CONTACT_EMAIL_LENGTH, db_index=True)
contact_email = models.CharField(max_length=CONTACT_EMAIL_LENGTH) contact_email = LowerCaseCharField(max_length=CONTACT_EMAIL_LENGTH)
contact_name = models.CharField(max_length=255, blank=True, null=True, \ contact_name = models.CharField(max_length=255, blank=True, null=True, \
default='') default='')
note = models.CharField(max_length=255, blank=True, null=True, default='') note = models.CharField(max_length=255, blank=True, null=True, default='')

View File

@@ -7,19 +7,20 @@ from django.dispatch import receiver
from seaserv import get_group_members from seaserv import get_group_members
from seahub.base.fields import LowerCaseCharField
from seahub.shortcuts import get_first_object_or_none from seahub.shortcuts import get_first_object_or_none
from seahub.notifications.models import UserNotification from seahub.notifications.models import UserNotification
from seahub.profile.models import Profile from seahub.profile.models import Profile
class GroupMessage(models.Model): class GroupMessage(models.Model):
group_id = models.IntegerField(db_index=True) group_id = models.IntegerField(db_index=True)
from_email = models.EmailField() from_email = LowerCaseCharField(max_length=255)
message = models.CharField(max_length=2048) message = models.CharField(max_length=2048)
timestamp = models.DateTimeField(default=datetime.datetime.now) timestamp = models.DateTimeField(default=datetime.datetime.now)
class MessageReply(models.Model): class MessageReply(models.Model):
reply_to = models.ForeignKey(GroupMessage) reply_to = models.ForeignKey(GroupMessage)
from_email = models.EmailField() from_email = LowerCaseCharField(max_length=255)
message = models.CharField(max_length=2048) message = models.CharField(max_length=2048)
timestamp = models.DateTimeField(default=datetime.datetime.now) timestamp = models.DateTimeField(default=datetime.datetime.now)

View File

@@ -556,6 +556,7 @@ def group_manage(request, group_id):
member_name_str = request.POST.get('user_name', '') member_name_str = request.POST.get('user_name', '')
member_list = string2list(member_name_str) member_list = string2list(member_name_str)
member_list = [x.lower() for x in member_list]
# Add users to contacts. # Add users to contacts.
for email in member_list: for email in member_list:
@@ -682,6 +683,7 @@ def group_add_admin(request, group_id):
member_name_str = request.POST.get('user_name', '') member_name_str = request.POST.get('user_name', '')
member_list = string2list(member_name_str) member_list = string2list(member_name_str)
member_list = [x.lower() for x in member_list]
for member_name in member_list: for member_name in member_list:
# Add user to contacts. # Add user to contacts.

View File

@@ -8,6 +8,7 @@ from django.db.models import Q
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from seahub.base.fields import LowerCaseCharField
class UserMessageManager(models.Manager): class UserMessageManager(models.Manager):
def get_messages_related_to_user(self, username): def get_messages_related_to_user(self, username):
@@ -50,8 +51,8 @@ class UserMessageManager(models.Manager):
class UserMessage(models.Model): class UserMessage(models.Model):
message_id = models.AutoField(primary_key=True) message_id = models.AutoField(primary_key=True)
message = models.CharField(max_length=512) message = models.CharField(max_length=512)
from_email = models.EmailField(db_index=True) from_email = LowerCaseCharField(max_length=255, db_index=True)
to_email = models.EmailField(db_index=True) to_email = LowerCaseCharField(max_length=255, db_index=True)
timestamp = models.DateTimeField(default=datetime.datetime.now) timestamp = models.DateTimeField(default=datetime.datetime.now)
ifread = models.BooleanField() ifread = models.BooleanField()
objects = UserMessageManager() objects = UserMessageManager()

View File

@@ -2,12 +2,14 @@ import datetime
from django.db import models from django.db import models
from django.forms import ModelForm, Textarea from django.forms import ModelForm, Textarea
from seahub.base.fields import LowerCaseCharField
class Notification(models.Model): class Notification(models.Model):
message = models.CharField(max_length=512) message = models.CharField(max_length=512)
primary = models.BooleanField(default=False) primary = models.BooleanField(default=False)
class UserNotification(models.Model): class UserNotification(models.Model):
to_user = models.EmailField(db_index=True, max_length=255) to_user = LowerCaseCharField(db_index=True, max_length=255)
msg_type = models.CharField(db_index=True, max_length=30) msg_type = models.CharField(db_index=True, max_length=30)
detail = models.TextField() detail = models.TextField()
timestamp = models.DateTimeField(default=datetime.datetime.now) timestamp = models.DateTimeField(default=datetime.datetime.now)

View File

@@ -1,22 +1,23 @@
import datetime import datetime
from django.db import models from django.db import models
from seahub.base.fields import LowerCaseCharField
from seahub.utils import normalize_file_path, normalize_dir_path, gen_token from seahub.utils import normalize_file_path, normalize_dir_path, gen_token
class AnonymousShare(models.Model): class AnonymousShare(models.Model):
""" """
Model used for sharing repo to unregistered email. Model used for sharing repo to unregistered email.
""" """
repo_owner = models.EmailField(max_length=255) repo_owner = LowerCaseCharField(max_length=255)
repo_id = models.CharField(max_length=36) repo_id = models.CharField(max_length=36)
anonymous_email = models.EmailField(max_length=255) anonymous_email = LowerCaseCharField(max_length=255)
token = models.CharField(max_length=25, unique=True) token = models.CharField(max_length=25, unique=True)
class FileShare(models.Model): class FileShare(models.Model):
""" """
Model used for file or dir shared link. Model used for file or dir shared link.
""" """
username = models.EmailField(max_length=255, db_index=True) username = LowerCaseCharField(max_length=255, db_index=True)
repo_id = models.CharField(max_length=36, db_index=True) repo_id = models.CharField(max_length=36, db_index=True)
path = models.TextField() path = models.TextField()
token = models.CharField(max_length=10, unique=True) token = models.CharField(max_length=10, unique=True)
@@ -102,8 +103,8 @@ class PrivateFileDirShareManager(models.Manager):
class PrivateFileDirShare(models.Model): class PrivateFileDirShare(models.Model):
from_user = models.CharField(max_length=255, db_index=True) from_user = LowerCaseCharField(max_length=255, db_index=True)
to_user = models.CharField(max_length=255, db_index=True) to_user = LowerCaseCharField(max_length=255, db_index=True)
repo_id = models.CharField(max_length=36, db_index=True) repo_id = models.CharField(max_length=36, db_index=True)
path = models.TextField() path = models.TextField()
token = models.CharField(max_length=10, unique=True) token = models.CharField(max_length=10, unique=True)

View File

@@ -186,7 +186,7 @@ def share_repo(request):
elif share_to.find('@') == -1: elif share_to.find('@') == -1:
share_to_group_names.append(share_to) share_to_group_names.append(share_to)
else: else:
share_to_users.append(share_to) share_to_users.append(share_to.lower())
share_to_groups = [] share_to_groups = []
# get all personal groups # get all personal groups

View File

@@ -519,7 +519,7 @@ def repo_owner(request, repo_id):
raise Http404 raise Http404
content_type = 'application/json; charset=utf-8' content_type = 'application/json; charset=utf-8'
repo_owner = request.POST.get('repo_owner', '') repo_owner = request.POST.get('repo_owner', '').lower()
try: try:
User.objects.get(email=repo_owner) User.objects.get(email=repo_owner)
except User.DoesNotExist: except User.DoesNotExist:

View File

@@ -366,7 +366,11 @@ def user_add(request):
content_type = 'application/json; charset=utf-8' content_type = 'application/json; charset=utf-8'
if request.method == 'POST': if request.method == 'POST':
form = AddUserForm(request.POST) post_values = request.POST.copy()
post_email = request.POST.get('email', '')
post_values.update({'email': post_email.lower()})
form = AddUserForm(post_values)
if form.is_valid(): if form.is_valid():
email = form.cleaned_data['email'] email = form.cleaned_data['email']
password = form.cleaned_data['password1'] password = form.cleaned_data['password1']

View File

@@ -1,5 +1,7 @@
from django.db import models from django.db import models
from seahub.base.fields import LowerCaseCharField
class WikiDoesNotExist(Exception): class WikiDoesNotExist(Exception):
pass pass
@@ -20,7 +22,7 @@ class PersonalWikiManager(models.Manager):
return wiki return wiki
class PersonalWiki(models.Model): class PersonalWiki(models.Model):
username = models.CharField(max_length=255, unique=True) username = LowerCaseCharField(max_length=255, unique=True)
repo_id = models.CharField(max_length=36) repo_id = models.CharField(max_length=36)
objects = PersonalWikiManager() objects = PersonalWikiManager()