1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-21 03:18:23 +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 seahub.base.accounts import User
from seahub.base.fields import LowerCaseCharField
class Token(models.Model):
"""
The default authorization token model.
"""
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)
def save(self, *args, **kwargs):

View File

@@ -3,6 +3,8 @@ import datetime
import hashlib
import os
from seahub.base.fields import LowerCaseCharField
from django.db import models
from django.core.files.base import ContentFile
from django.utils.translation import ugettext as _
@@ -127,7 +129,7 @@ class AvatarBase(object):
)
class Avatar(models.Model, AvatarBase):
emailuser = models.CharField(max_length=255)
emailuser = LowerCaseCharField(max_length=255)
primary = models.BooleanField(default=False)
avatar = models.ImageField(max_length=1024, upload_to=avatar_file_path, blank=True)
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.
"""
# 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()])
# Lowercasing email address to avoid confusion.
email = email.lower()
user = User(email=email)
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.utils.translation import ugettext as _
from seahub.base.fields import LowerCaseCharField
from settings import CONTACT_EMAIL_LENGTH
class ContactManager(models.Manager):
@@ -33,8 +34,8 @@ class ContactManager(models.Manager):
class Contact(models.Model):
"""Record user's contacts."""
user_email = models.CharField(max_length=CONTACT_EMAIL_LENGTH, db_index=True)
contact_email = models.CharField(max_length=CONTACT_EMAIL_LENGTH)
user_email = LowerCaseCharField(max_length=CONTACT_EMAIL_LENGTH, db_index=True)
contact_email = LowerCaseCharField(max_length=CONTACT_EMAIL_LENGTH)
contact_name = 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 seahub.base.fields import LowerCaseCharField
from seahub.shortcuts import get_first_object_or_none
from seahub.notifications.models import UserNotification
from seahub.profile.models import Profile
class GroupMessage(models.Model):
group_id = models.IntegerField(db_index=True)
from_email = models.EmailField()
from_email = LowerCaseCharField(max_length=255)
message = models.CharField(max_length=2048)
timestamp = models.DateTimeField(default=datetime.datetime.now)
class MessageReply(models.Model):
reply_to = models.ForeignKey(GroupMessage)
from_email = models.EmailField()
from_email = LowerCaseCharField(max_length=255)
message = models.CharField(max_length=2048)
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_list = string2list(member_name_str)
member_list = [x.lower() for x in member_list]
# Add users to contacts.
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_list = string2list(member_name_str)
member_list = [x.lower() for x in member_list]
for member_name in member_list:
# Add user to contacts.

View File

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

View File

@@ -2,12 +2,14 @@ import datetime
from django.db import models
from django.forms import ModelForm, Textarea
from seahub.base.fields import LowerCaseCharField
class Notification(models.Model):
message = models.CharField(max_length=512)
primary = models.BooleanField(default=False)
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)
detail = models.TextField()
timestamp = models.DateTimeField(default=datetime.datetime.now)

View File

@@ -1,22 +1,23 @@
import datetime
from django.db import models
from seahub.base.fields import LowerCaseCharField
from seahub.utils import normalize_file_path, normalize_dir_path, gen_token
class AnonymousShare(models.Model):
"""
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)
anonymous_email = models.EmailField(max_length=255)
anonymous_email = LowerCaseCharField(max_length=255)
token = models.CharField(max_length=25, unique=True)
class FileShare(models.Model):
"""
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)
path = models.TextField()
token = models.CharField(max_length=10, unique=True)
@@ -102,8 +103,8 @@ class PrivateFileDirShareManager(models.Manager):
class PrivateFileDirShare(models.Model):
from_user = models.CharField(max_length=255, db_index=True)
to_user = models.CharField(max_length=255, db_index=True)
from_user = LowerCaseCharField(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)
path = models.TextField()
token = models.CharField(max_length=10, unique=True)

View File

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

View File

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

View File

@@ -366,7 +366,11 @@ def user_add(request):
content_type = 'application/json; charset=utf-8'
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():
email = form.cleaned_data['email']
password = form.cleaned_data['password1']

View File

@@ -1,5 +1,7 @@
from django.db import models
from seahub.base.fields import LowerCaseCharField
class WikiDoesNotExist(Exception):
pass
@@ -20,7 +22,7 @@ class PersonalWikiManager(models.Manager):
return wiki
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)
objects = PersonalWikiManager()