1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-22 20:08:19 +00:00

Merge branch '2.2'

Conflicts:
	seahub/api2/serializers.py
	seahub/auth/forms.py
This commit is contained in:
zhengxie
2014-04-15 13:43:37 +08:00
4 changed files with 31 additions and 8 deletions

View File

@@ -2,7 +2,7 @@ from rest_framework import serializers
from seahub.auth import authenticate from seahub.auth import authenticate
from seahub.api2.models import Token, TokenV2, DESKTOP_PLATFORMS from seahub.api2.models import Token, TokenV2, DESKTOP_PLATFORMS
from seahub.api2.utils import get_client_ip from seahub.api2.utils import get_client_ip, is_valid_username
def all_none(values): def all_none(values):
for value in values: for value in values:
@@ -51,7 +51,11 @@ class AuthTokenSerializer(serializers.Serializer):
else: else:
raise serializers.ValidationError('invalid params') raise serializers.ValidationError('invalid params')
# first check password # first check username and password
if username:
if not is_valid_username(username):
raise serializers.ValidationError('username is not valid.')
if username and password: if username and password:
user = authenticate(username=username, password=password) user = authenticate(username=username, password=password)
if user: if user:
@@ -88,7 +92,7 @@ class AuthTokenSerializer(serializers.Serializer):
if len(device_id) != 16: if len(device_id) != 16:
raise serializers.ValidationError('invalid device id') raise serializers.ValidationError('invalid device id')
elif platform == 'ios': elif platform == 'ios':
if len(device_id) != 36: if len(device_id) != 36:
raise serializers.ValidationError('invalid device id') raise serializers.ValidationError('invalid device id')
else: else:
raise serializers.ValidationError('invalid platform') raise serializers.ValidationError('invalid platform')

View File

@@ -6,7 +6,8 @@ from django.utils.http import int_to_base36
from seahub.base.accounts import User from seahub.base.accounts import User
from seahub.auth import authenticate from seahub.auth import authenticate
from seahub.auth.tokens import default_token_generator from seahub.auth.tokens import default_token_generator
from seahub.utils import IS_EMAIL_CONFIGURED, send_html_email from seahub.utils import IS_EMAIL_CONFIGURED, send_html_email, \
is_valid_username
from captcha.fields import CaptchaField from captcha.fields import CaptchaField
@@ -15,7 +16,7 @@ class AuthenticationForm(forms.Form):
Base class for authenticating users. Extend this to get a form that accepts Base class for authenticating users. Extend this to get a form that accepts
username/password logins. username/password logins.
""" """
username = forms.EmailField(label=_("Username"), max_length=255) username = forms.CharField(label=_("Username"), max_length=255)
password = forms.CharField(label=_("Password"), widget=forms.PasswordInput) password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
def __init__(self, request=None, *args, **kwargs): def __init__(self, request=None, *args, **kwargs):
@@ -29,6 +30,12 @@ class AuthenticationForm(forms.Form):
self.user_cache = None self.user_cache = None
super(AuthenticationForm, self).__init__(*args, **kwargs) super(AuthenticationForm, self).__init__(*args, **kwargs)
def clean_username(self):
username = self.cleaned_data['username']
if not is_valid_username(username):
raise forms.ValidationError(_("Enter a valid email address."))
return self.cleaned_data['username']
def clean(self): def clean(self):
username = self.cleaned_data.get('username') username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password') password = self.cleaned_data.get('password')

View File

@@ -13,6 +13,7 @@ from registration import signals
from seaserv import ccnet_threaded_rpc, unset_repo_passwd, is_passwd_set from seaserv import ccnet_threaded_rpc, unset_repo_passwd, is_passwd_set
from seahub.profile.models import Profile, DetailedProfile from seahub.profile.models import Profile, DetailedProfile
from seahub.utils import is_valid_username
UNUSABLE_PASSWORD = '!' # This will never be a valid hash UNUSABLE_PASSWORD = '!' # This will never be a valid hash
@@ -386,7 +387,7 @@ class RegistrationForm(forms.Form):
""" """
attrs_dict = { 'class': 'input' } attrs_dict = { 'class': 'input' }
email = forms.EmailField(widget=forms.TextInput(attrs=dict(attrs_dict, email = forms.CharField(widget=forms.TextInput(attrs=dict(attrs_dict,
maxlength=75)), maxlength=75)),
label=_("Email address")) label=_("Email address"))
userid = forms.RegexField(regex=r'^\w+$', userid = forms.RegexField(regex=r'^\w+$',
@@ -403,6 +404,9 @@ class RegistrationForm(forms.Form):
def clean_email(self): def clean_email(self):
email = self.cleaned_data['email'] email = self.cleaned_data['email']
if not is_valid_username(email):
raise forms.ValidationError(_("Enter a valid email address."))
emailuser = ccnet_threaded_rpc.get_emailuser(email) emailuser = ccnet_threaded_rpc.get_emailuser(email)
if not emailuser: if not emailuser:
return self.cleaned_data['email'] return self.cleaned_data['email']

View File

@@ -13,7 +13,6 @@ from urlparse import urlparse
import ccnet import ccnet
from django.core.validators import email_re
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.contrib.sites.models import RequestSite from django.contrib.sites.models import RequestSite
@@ -209,6 +208,15 @@ def normalize_file_path(path):
""" """
return path.rstrip('/') return path.rstrip('/')
# modified from django1.5:/core/validators, and remove the support for single
# quote in email address
email_re = re.compile(
r"(^[-!#$%&*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom
# quoted-string, see also http://tools.ietf.org/html/rfc2822#section-3.2.5
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"'
r')@((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)$)' # domain
r'|\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]$', re.IGNORECASE) # literal form, ipv4 address (SMTP 4.1.3)
def is_valid_email(email): def is_valid_email(email):
"""A heavy email format validation. """A heavy email format validation.
""" """
@@ -218,7 +226,7 @@ def is_valid_username(username):
"""Check whether username is valid, currently only email can be a username. """Check whether username is valid, currently only email can be a username.
""" """
return is_valid_email(username) return is_valid_email(username)
def check_filename_with_rename(repo_id, parent_dir, filename): def check_filename_with_rename(repo_id, parent_dir, filename):
cmmts = get_commits(repo_id, 0, 1) cmmts = get_commits(repo_id, 0, 1)
latest_commit = cmmts[0] if cmmts else None latest_commit = cmmts[0] if cmmts else None