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:
@@ -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):
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
22
seahub/base/fields.py
Normal 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))
|
@@ -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='')
|
||||||
|
@@ -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)
|
||||||
|
|
||||||
|
@@ -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.
|
||||||
|
@@ -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()
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
||||||
|
@@ -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:
|
||||||
|
@@ -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']
|
||||||
|
@@ -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()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user