Code convention

tokarchuk/v1.17
Unknown 11 years ago
parent 11f9d738e8
commit 4f2f3c2857
  1. 2
      README.md
  2. 2
      README_ZH.md
  3. 8
      cmd/web.go
  4. 2
      gogs.go
  5. 4
      models/login.go
  6. 27
      models/user.go
  7. 34
      modules/auth/user.go
  8. 58
      modules/mailer/mail.go
  9. 18
      routers/user/user.go
  10. 2
      templates/VERSION
  11. 6
      templates/admin/auths/edit.tmpl

@ -5,7 +5,7 @@ Gogs(Go Git Service) is a Self Hosted Git Service in the Go Programming Language
![Demo](http://gowalker.org/public/gogs_demo.gif) ![Demo](http://gowalker.org/public/gogs_demo.gif)
##### Current version: 0.4.0 Alpha ##### Current version: 0.4.2 Alpha
### NOTICES ### NOTICES

@ -5,7 +5,7 @@ Gogs(Go Git Service) 是一个由 Go 语言编写的自助 Git 托管服务。
![Demo](http://gowalker.org/public/gogs_demo.gif) ![Demo](http://gowalker.org/public/gogs_demo.gif)
##### 当前版本:0.4.0 Alpha ##### 当前版本:0.4.2 Alpha
## 开发目的 ## 开发目的

@ -89,9 +89,11 @@ func runWeb(*cli.Context) {
m.Get("/", ignSignIn, routers.Home) m.Get("/", ignSignIn, routers.Home)
m.Get("/install", bindIgnErr(auth.InstallForm{}), routers.Install) m.Get("/install", bindIgnErr(auth.InstallForm{}), routers.Install)
m.Post("/install", bindIgnErr(auth.InstallForm{}), routers.InstallPost) m.Post("/install", bindIgnErr(auth.InstallForm{}), routers.InstallPost)
m.Get("/issues", reqSignIn, user.Issues) m.Group("", func(r martini.Router) {
m.Get("/pulls", reqSignIn, user.Pulls) r.Get("/issues", user.Issues)
m.Get("/stars", reqSignIn, user.Stars) r.Get("/pulls", user.Pulls)
r.Get("/stars", user.Stars)
}, reqSignIn)
m.Group("/api", func(r martini.Router) { m.Group("/api", func(r martini.Router) {
m.Group("/v1", func(r martini.Router) { m.Group("/v1", func(r martini.Router) {

@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/setting"
) )
const APP_VER = "0.4.1.0603 Alpha" const APP_VER = "0.4.2.0605 Alpha"
func init() { func init() {
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())

@ -150,8 +150,8 @@ func DelLoginSource(source *LoginSource) error {
return err return err
} }
// login a user // UserSignIn validates user name and password.
func LoginUser(uname, passwd string) (*User, error) { func UserSignIn(uname, passwd string) (*User, error) {
var u *User var u *User
if strings.Contains(uname, "@") { if strings.Contains(uname, "@") {
u = &User{Email: uname} u = &User{Email: uname}

@ -72,7 +72,7 @@ func (user *User) HomeLink() string {
return "/user/" + user.Name return "/user/" + user.Name
} }
// AvatarLink returns the user gravatar link. // AvatarLink returns user gravatar link.
func (user *User) AvatarLink() string { func (user *User) AvatarLink() string {
if setting.DisableGravatar { if setting.DisableGravatar {
return "/img/avatar_default.jpg" return "/img/avatar_default.jpg"
@ -268,17 +268,17 @@ func ChangeUserName(user *User, newUserName string) (err error) {
} }
// UpdateUser updates user's information. // UpdateUser updates user's information.
func UpdateUser(user *User) (err error) { func UpdateUser(u *User) (err error) {
user.LowerName = strings.ToLower(user.Name) u.LowerName = strings.ToLower(u.Name)
if len(user.Location) > 255 { if len(u.Location) > 255 {
user.Location = user.Location[:255] u.Location = u.Location[:255]
} }
if len(user.Website) > 255 { if len(u.Website) > 255 {
user.Website = user.Website[:255] u.Website = u.Website[:255]
} }
_, err = orm.Id(user.Id).AllCols().Update(user) _, err = orm.Id(u.Id).AllCols().Update(u)
return err return err
} }
@ -356,17 +356,16 @@ func GetUserByKeyId(keyId int64) (*User, error) {
return user, nil return user, nil
} }
// GetUserById returns the user object by given id if exists. // GetUserById returns the user object by given ID if exists.
func GetUserById(id int64) (*User, error) { func GetUserById(id int64) (*User, error) {
user := new(User) u := new(User)
has, err := orm.Id(id).Get(user) has, err := orm.Id(id).Get(u)
if err != nil { if err != nil {
return nil, err return nil, err
} } else if !has {
if !has {
return nil, ErrUserNotExist return nil, ErrUserNotExist
} }
return user, nil return u, nil
} }
// GetUserByName returns the user object by given name if exists. // GetUserByName returns the user object by given name if exists.

@ -19,54 +19,54 @@ import (
) )
// SignedInId returns the id of signed in user. // SignedInId returns the id of signed in user.
func SignedInId(session session.SessionStore) int64 { func SignedInId(sess session.SessionStore) int64 {
if !models.HasEngine { if !models.HasEngine {
return 0 return 0
} }
userId := session.Get("userId") uid := sess.Get("userId")
if userId == nil { if uid == nil {
return 0 return 0
} }
if s, ok := userId.(int64); ok { if id, ok := uid.(int64); ok {
if _, err := models.GetUserById(s); err != nil { if _, err := models.GetUserById(id); err != nil {
return 0 return 0
} }
return s return id
} }
return 0 return 0
} }
// SignedInName returns the name of signed in user. // SignedInName returns the name of signed in user.
func SignedInName(session session.SessionStore) string { func SignedInName(sess session.SessionStore) string {
userName := session.Get("userName") uname := sess.Get("userName")
if userName == nil { if uname == nil {
return "" return ""
} }
if s, ok := userName.(string); ok { if s, ok := uname.(string); ok {
return s return s
} }
return "" return ""
} }
// SignedInUser returns the user object of signed user. // SignedInUser returns the user object of signed user.
func SignedInUser(session session.SessionStore) *models.User { func SignedInUser(sess session.SessionStore) *models.User {
id := SignedInId(session) uid := SignedInId(sess)
if id <= 0 { if uid <= 0 {
return nil return nil
} }
user, err := models.GetUserById(id) u, err := models.GetUserById(uid)
if err != nil { if err != nil {
log.Error("user.SignedInUser: %v", err) log.Error("user.SignedInUser: %v", err)
return nil return nil
} }
return user return u
} }
// IsSignedIn check if any user has signed in. // IsSignedIn check if any user has signed in.
func IsSignedIn(session session.SessionStore) bool { func IsSignedIn(sess session.SessionStore) bool {
return SignedInId(session) > 0 return SignedInId(sess) > 0
} }
type FeedsForm struct { type FeedsForm struct {

@ -29,7 +29,7 @@ func NewMailMessage(To []string, subject, body string) Message {
return NewMailMessageFrom(To, setting.MailService.From, subject, body) return NewMailMessageFrom(To, setting.MailService.From, subject, body)
} }
func GetMailTmplData(user *models.User) map[interface{}]interface{} { func GetMailTmplData(u *models.User) map[interface{}]interface{} {
data := make(map[interface{}]interface{}, 10) data := make(map[interface{}]interface{}, 10)
data["AppName"] = setting.AppName data["AppName"] = setting.AppName
data["AppVer"] = setting.AppVer data["AppVer"] = setting.AppVer
@ -37,29 +37,29 @@ func GetMailTmplData(user *models.User) map[interface{}]interface{} {
data["AppLogo"] = setting.AppLogo data["AppLogo"] = setting.AppLogo
data["ActiveCodeLives"] = setting.Service.ActiveCodeLives / 60 data["ActiveCodeLives"] = setting.Service.ActiveCodeLives / 60
data["ResetPwdCodeLives"] = setting.Service.ResetPwdCodeLives / 60 data["ResetPwdCodeLives"] = setting.Service.ResetPwdCodeLives / 60
if user != nil { if u != nil {
data["User"] = user data["User"] = u
} }
return data return data
} }
// create a time limit code for user active // create a time limit code for user active
func CreateUserActiveCode(user *models.User, startInf interface{}) string { func CreateUserActiveCode(u *models.User, startInf interface{}) string {
minutes := setting.Service.ActiveCodeLives minutes := setting.Service.ActiveCodeLives
data := base.ToStr(user.Id) + user.Email + user.LowerName + user.Passwd + user.Rands data := base.ToStr(u.Id) + u.Email + u.LowerName + u.Passwd + u.Rands
code := base.CreateTimeLimitCode(data, minutes, startInf) code := base.CreateTimeLimitCode(data, minutes, startInf)
// add tail hex username // add tail hex username
code += hex.EncodeToString([]byte(user.LowerName)) code += hex.EncodeToString([]byte(u.LowerName))
return code return code
} }
// Send user register mail with active code // Send user register mail with active code
func SendRegisterMail(r *middleware.Render, user *models.User) { func SendRegisterMail(r *middleware.Render, u *models.User) {
code := CreateUserActiveCode(user, nil) code := CreateUserActiveCode(u, nil)
subject := "Register success, Welcome" subject := "Register success, Welcome"
data := GetMailTmplData(user) data := GetMailTmplData(u)
data["Code"] = code data["Code"] = code
body, err := r.HTMLString("mail/auth/register_success", data) body, err := r.HTMLString("mail/auth/register_success", data)
if err != nil { if err != nil {
@ -67,19 +67,19 @@ func SendRegisterMail(r *middleware.Render, user *models.User) {
return return
} }
msg := NewMailMessage([]string{user.Email}, subject, body) msg := NewMailMessage([]string{u.Email}, subject, body)
msg.Info = fmt.Sprintf("UID: %d, send register mail", user.Id) msg.Info = fmt.Sprintf("UID: %d, send register mail", u.Id)
SendAsync(&msg) SendAsync(&msg)
} }
// Send email verify active email. // Send email verify active email.
func SendActiveMail(r *middleware.Render, user *models.User) { func SendActiveMail(r *middleware.Render, u *models.User) {
code := CreateUserActiveCode(user, nil) code := CreateUserActiveCode(u, nil)
subject := "Verify your e-mail address" subject := "Verify your e-mail address"
data := GetMailTmplData(user) data := GetMailTmplData(u)
data["Code"] = code data["Code"] = code
body, err := r.HTMLString("mail/auth/active_email", data) body, err := r.HTMLString("mail/auth/active_email", data)
if err != nil { if err != nil {
@ -87,19 +87,19 @@ func SendActiveMail(r *middleware.Render, user *models.User) {
return return
} }
msg := NewMailMessage([]string{user.Email}, subject, body) msg := NewMailMessage([]string{u.Email}, subject, body)
msg.Info = fmt.Sprintf("UID: %d, send active mail", user.Id) msg.Info = fmt.Sprintf("UID: %d, send active mail", u.Id)
SendAsync(&msg) SendAsync(&msg)
} }
// Send reset password email. // Send reset password email.
func SendResetPasswdMail(r *middleware.Render, user *models.User) { func SendResetPasswdMail(r *middleware.Render, u *models.User) {
code := CreateUserActiveCode(user, nil) code := CreateUserActiveCode(u, nil)
subject := "Reset your password" subject := "Reset your password"
data := GetMailTmplData(user) data := GetMailTmplData(u)
data["Code"] = code data["Code"] = code
body, err := r.HTMLString("mail/auth/reset_passwd", data) body, err := r.HTMLString("mail/auth/reset_passwd", data)
if err != nil { if err != nil {
@ -107,14 +107,14 @@ func SendResetPasswdMail(r *middleware.Render, user *models.User) {
return return
} }
msg := NewMailMessage([]string{user.Email}, subject, body) msg := NewMailMessage([]string{u.Email}, subject, body)
msg.Info = fmt.Sprintf("UID: %d, send reset password email", user.Id) msg.Info = fmt.Sprintf("UID: %d, send reset password email", u.Id)
SendAsync(&msg) SendAsync(&msg)
} }
// SendIssueNotifyMail sends mail notification of all watchers of repository. // SendIssueNotifyMail sends mail notification of all watchers of repository.
func SendIssueNotifyMail(user, owner *models.User, repo *models.Repository, issue *models.Issue) ([]string, error) { func SendIssueNotifyMail(u, owner *models.User, repo *models.Repository, issue *models.Issue) ([]string, error) {
ws, err := models.GetWatchers(repo.Id) ws, err := models.GetWatchers(repo.Id)
if err != nil { if err != nil {
return nil, errors.New("mail.NotifyWatchers(GetWatchers): " + err.Error()) return nil, errors.New("mail.NotifyWatchers(GetWatchers): " + err.Error())
@ -123,7 +123,7 @@ func SendIssueNotifyMail(user, owner *models.User, repo *models.Repository, issu
tos := make([]string, 0, len(ws)) tos := make([]string, 0, len(ws))
for i := range ws { for i := range ws {
uid := ws[i].UserId uid := ws[i].UserId
if user.Id == uid { if u.Id == uid {
continue continue
} }
u, err := models.GetUserById(uid) u, err := models.GetUserById(uid)
@ -141,14 +141,14 @@ func SendIssueNotifyMail(user, owner *models.User, repo *models.Repository, issu
content := fmt.Sprintf("%s<br>-<br> <a href=\"%s%s/%s/issues/%d\">View it on Gogs</a>.", content := fmt.Sprintf("%s<br>-<br> <a href=\"%s%s/%s/issues/%d\">View it on Gogs</a>.",
base.RenderSpecialLink([]byte(issue.Content), owner.Name+"/"+repo.Name), base.RenderSpecialLink([]byte(issue.Content), owner.Name+"/"+repo.Name),
setting.AppUrl, owner.Name, repo.Name, issue.Index) setting.AppUrl, owner.Name, repo.Name, issue.Index)
msg := NewMailMessageFrom(tos, user.Email, subject, content) msg := NewMailMessageFrom(tos, u.Email, subject, content)
msg.Info = fmt.Sprintf("Subject: %s, send issue notify emails", subject) msg.Info = fmt.Sprintf("Subject: %s, send issue notify emails", subject)
SendAsync(&msg) SendAsync(&msg)
return tos, nil return tos, nil
} }
// SendIssueMentionMail sends mail notification for who are mentioned in issue. // SendIssueMentionMail sends mail notification for who are mentioned in issue.
func SendIssueMentionMail(r *middleware.Render, user, owner *models.User, func SendIssueMentionMail(r *middleware.Render, u, owner *models.User,
repo *models.Repository, issue *models.Issue, tos []string) error { repo *models.Repository, issue *models.Issue, tos []string) error {
if len(tos) == 0 { if len(tos) == 0 {
@ -166,14 +166,14 @@ func SendIssueMentionMail(r *middleware.Render, user, owner *models.User,
return fmt.Errorf("mail.SendIssueMentionMail(fail to render): %v", err) return fmt.Errorf("mail.SendIssueMentionMail(fail to render): %v", err)
} }
msg := NewMailMessageFrom(tos, user.Email, subject, body) msg := NewMailMessageFrom(tos, u.Email, subject, body)
msg.Info = fmt.Sprintf("Subject: %s, send issue mention emails", subject) msg.Info = fmt.Sprintf("Subject: %s, send issue mention emails", subject)
SendAsync(&msg) SendAsync(&msg)
return nil return nil
} }
// SendCollaboratorMail sends mail notification to new collaborator. // SendCollaboratorMail sends mail notification to new collaborator.
func SendCollaboratorMail(r *middleware.Render, user, owner *models.User, func SendCollaboratorMail(r *middleware.Render, u, owner *models.User,
repo *models.Repository) error { repo *models.Repository) error {
subject := fmt.Sprintf("%s added you to %s", owner.Name, repo.Name) subject := fmt.Sprintf("%s added you to %s", owner.Name, repo.Name)
@ -187,8 +187,8 @@ func SendCollaboratorMail(r *middleware.Render, user, owner *models.User,
return fmt.Errorf("mail.SendCollaboratorMail(fail to render): %v", err) return fmt.Errorf("mail.SendCollaboratorMail(fail to render): %v", err)
} }
msg := NewMailMessage([]string{user.Email}, subject, body) msg := NewMailMessage([]string{u.Email}, subject, body)
msg.Info = fmt.Sprintf("UID: %d, send register mail", user.Id) msg.Info = fmt.Sprintf("UID: %d, send register mail", u.Id)
SendAsync(&msg) SendAsync(&msg)
return nil return nil

@ -32,8 +32,8 @@ func SignIn(ctx *middleware.Context) {
} }
// Check auto-login. // Check auto-login.
userName := ctx.GetCookie(setting.CookieUserName) uname := ctx.GetCookie(setting.CookieUserName)
if len(userName) == 0 { if len(uname) == 0 {
ctx.HTML(200, "user/signin") ctx.HTML(200, "user/signin")
return return
} }
@ -41,14 +41,14 @@ func SignIn(ctx *middleware.Context) {
isSucceed := false isSucceed := false
defer func() { defer func() {
if !isSucceed { if !isSucceed {
log.Trace("user.SignIn(auto-login cookie cleared): %s", userName) log.Trace("user.SignIn(auto-login cookie cleared): %s", uname)
ctx.SetCookie(setting.CookieUserName, "", -1) ctx.SetCookie(setting.CookieUserName, "", -1)
ctx.SetCookie(setting.CookieRememberName, "", -1) ctx.SetCookie(setting.CookieRememberName, "", -1)
return return
} }
}() }()
user, err := models.GetUserByName(userName) user, err := models.GetUserByName(uname)
if err != nil { if err != nil {
ctx.Handle(500, "user.SignIn(GetUserByName)", err) ctx.Handle(500, "user.SignIn(GetUserByName)", err)
return return
@ -90,7 +90,7 @@ func SignInPost(ctx *middleware.Context, form auth.LogInForm) {
return return
} }
user, err := models.LoginUser(form.UserName, form.Password) user, err := models.UserSignIn(form.UserName, form.Password)
if err != nil { if err != nil {
if err == models.ErrUserNotExist { if err == models.ErrUserNotExist {
log.Trace("%s Log in failed: %s", ctx.Req.RequestURI, form.UserName) log.Trace("%s Log in failed: %s", ctx.Req.RequestURI, form.UserName)
@ -98,7 +98,7 @@ func SignInPost(ctx *middleware.Context, form auth.LogInForm) {
return return
} }
ctx.Handle(500, "user.SignIn", err) ctx.Handle(500, "user.SignInPost(UserSignIn)", err)
return return
} }
@ -220,17 +220,18 @@ func SignUpPost(ctx *middleware.Context, form auth.RegisterForm) {
if u, err = models.RegisterUser(u); err != nil { if u, err = models.RegisterUser(u); err != nil {
switch err { switch err {
case models.ErrUserAlreadyExist: case models.ErrUserAlreadyExist:
ctx.Data["Err_UserName"] = true
ctx.RenderWithErr("Username has been already taken", "user/signup", &form) ctx.RenderWithErr("Username has been already taken", "user/signup", &form)
case models.ErrEmailAlreadyUsed: case models.ErrEmailAlreadyUsed:
ctx.Data["Err_Email"] = true
ctx.RenderWithErr("E-mail address has been already used", "user/signup", &form) ctx.RenderWithErr("E-mail address has been already used", "user/signup", &form)
case models.ErrUserNameIllegal: case models.ErrUserNameIllegal:
ctx.RenderWithErr(models.ErrRepoNameIllegal.Error(), "user/signup", &form) ctx.RenderWithErr(models.ErrRepoNameIllegal.Error(), "user/signup", &form)
default: default:
ctx.Handle(500, "user.SignUp(RegisterUser)", err) ctx.Handle(500, "user.SignUpPost(RegisterUser)", err)
} }
return return
} }
log.Trace("%s User created: %s", ctx.Req.RequestURI, form.UserName) log.Trace("%s User created: %s", ctx.Req.RequestURI, form.UserName)
// Bind social account. // Bind social account.
@ -256,6 +257,7 @@ func SignUpPost(ctx *middleware.Context, form auth.RegisterForm) {
} }
return return
} }
ctx.Redirect("/user/login") ctx.Redirect("/user/login")
} }

@ -1 +1 @@
0.4.1.0603 Alpha 0.4.2.0605 Alpha

@ -71,21 +71,21 @@
<div class="form-group {{if .Err_Attributes}}has-error has-feedback{{end}}"> <div class="form-group {{if .Err_Attributes}}has-error has-feedback{{end}}">
<label class="col-md-3 control-label">Search Attributes: </label> <label class="col-md-3 control-label">Search Attributes: </label>
<div class="col-md-7"> <div class="col-md-7">
<input name="attributes" class="form-control" placeholder="Type search attributes" value="{{.Source.LDAP.Attributes}}" required="required"> <input name="attributes" class="form-control" placeholder="Type search attributes" value="{{.Source.LDAP.Attributes}}">
</div> </div>
</div> </div>
<div class="form-group {{if .Err_Filter}}has-error has-feedback{{end}}"> <div class="form-group {{if .Err_Filter}}has-error has-feedback{{end}}">
<label class="col-md-3 control-label">Search Filter: </label> <label class="col-md-3 control-label">Search Filter: </label>
<div class="col-md-7"> <div class="col-md-7">
<input name="filter" class="form-control" placeholder="Type search filter" value="{{.Source.LDAP.Filter}}" required="required"> <input name="filter" class="form-control" placeholder="Type search filter" value="{{.Source.LDAP.Filter}}">
</div> </div>
</div> </div>
<div class="form-group {{if .Err_MsAdSA}}has-error has-feedback{{end}}"> <div class="form-group {{if .Err_MsAdSA}}has-error has-feedback{{end}}">
<label class="col-md-3 control-label">Ms Ad SA: </label> <label class="col-md-3 control-label">Ms Ad SA: </label>
<div class="col-md-7"> <div class="col-md-7">
<input name="ms_ad_sa" class="form-control" placeholder="Type Ms Ad SA" value="{{.Source.LDAP.MsAdSAFormat}}" required="required"> <input name="ms_ad_sa" class="form-control" placeholder="Type Ms Ad SA" value="{{.Source.LDAP.MsAdSAFormat}}">
</div> </div>
</div> </div>
{{else if eq $type 3}} {{else if eq $type 3}}

Loading…
Cancel
Save