From 62240b6bc12abfe257224bb554a75a5712803059 Mon Sep 17 00:00:00 2001
From: Unknown <joe2010xtmf@163.com>
Date: Sun, 27 Apr 2014 01:54:08 -0600
Subject: [PATCH] Add login by email

---
 models/user.go             | 18 ++++++++++++------
 modules/auth/auth.go       |  2 +-
 routers/user/user.go       | 21 ---------------------
 templates/user/signin.tmpl |  2 +-
 4 files changed, 14 insertions(+), 29 deletions(-)

diff --git a/models/user.go b/models/user.go
index df1eb985c2..661eff2fdd 100644
--- a/models/user.go
+++ b/models/user.go
@@ -410,21 +410,27 @@ func GetUserByEmail(email string) (*User, error) {
 }
 
 // LoginUserPlain validates user by raw user name and password.
-func LoginUserPlain(name, passwd string) (*User, error) {
-	user := User{LowerName: strings.ToLower(name)}
-	has, err := orm.Get(&user)
+func LoginUserPlain(uname, passwd string) (*User, error) {
+	var u *User
+	if strings.Contains(uname, "@") {
+		u = &User{Email: uname}
+	} else {
+		u = &User{LowerName: strings.ToLower(uname)}
+	}
+
+	has, err := orm.Get(u)
 	if err != nil {
 		return nil, err
 	} else if !has {
 		return nil, ErrUserNotExist
 	}
 
-	newUser := &User{Passwd: passwd, Salt: user.Salt}
+	newUser := &User{Passwd: passwd, Salt: u.Salt}
 	newUser.EncodePasswd()
-	if user.Passwd != newUser.Passwd {
+	if u.Passwd != newUser.Passwd {
 		return nil, ErrUserNotExist
 	}
-	return &user, nil
+	return u, nil
 }
 
 // Follow is connection request for receiving user notifycation.
diff --git a/modules/auth/auth.go b/modules/auth/auth.go
index 350ef4fcbf..e493faefe7 100644
--- a/modules/auth/auth.go
+++ b/modules/auth/auth.go
@@ -57,7 +57,7 @@ func (f *RegisterForm) Validate(errors *base.BindingErrors, req *http.Request, c
 }
 
 type LogInForm struct {
-	UserName string `form:"username" binding:"Required;AlphaDash;MaxSize(30)"`
+	UserName string `form:"username" binding:"Required;MaxSize(35)"`
 	Password string `form:"passwd" binding:"Required;MinSize(6);MaxSize(30)"`
 	Remember string `form:"remember"`
 }
diff --git a/routers/user/user.go b/routers/user/user.go
index fe53896e41..9cce4e719d 100644
--- a/routers/user/user.go
+++ b/routers/user/user.go
@@ -144,27 +144,6 @@ func SignInPost(ctx *middleware.Context, form auth.LogInForm) {
 	ctx.Redirect("/")
 }
 
-func oauthSignInPost(ctx *middleware.Context, sid int64) {
-	ctx.Data["Title"] = "OAuth Sign Up"
-	ctx.Data["PageIsSignUp"] = true
-
-	if _, err := models.GetOauth2ById(sid); err != nil {
-		if err == models.ErrOauth2RecordNotExist {
-			ctx.Handle(404, "user.oauthSignUp(GetOauth2ById)", err)
-		} else {
-			ctx.Handle(500, "user.oauthSignUp(GetOauth2ById)", err)
-		}
-		return
-	}
-
-	ctx.Data["IsSocialLogin"] = true
-	ctx.Data["username"] = ctx.Session.Get("socialName")
-	ctx.Data["email"] = ctx.Session.Get("socialEmail")
-	log.Trace("user.oauthSignUp(social ID): %v", ctx.Session.Get("socialId"))
-
-	ctx.HTML(200, "user/signup")
-}
-
 func SignOut(ctx *middleware.Context) {
 	ctx.Session.Delete("userId")
 	ctx.Session.Delete("userName")
diff --git a/templates/user/signin.tmpl b/templates/user/signin.tmpl
index 955c82f430..09ce249f7f 100644
--- a/templates/user/signin.tmpl
+++ b/templates/user/signin.tmpl
@@ -10,7 +10,7 @@
         {{end}}
         {{template "base/alert" .}}
         <div class="form-group {{if .Err_UserName}}has-error has-feedback{{end}}">
-            <label class="col-md-4 control-label">Username: </label>
+            <label class="col-md-4 control-label">Username or e-mail: </label>
             <div class="col-md-6">
                 <input name="username" class="form-control" placeholder="Type your username" value="{{.username}}" required="required">
             </div>