| @@ -5,7 +5,7 @@ Gogs(Go Git Service) is a Self Hosted Git Service in the Go Programming Language | |||||
|  |  | ||||
| ##### Current version: 0.4.0 Alpha | |||||
| ##### Current version: 0.4.2 Alpha | |||||
| ### NOTICES | ### NOTICES | ||||
| @@ -5,7 +5,7 @@ Gogs(Go Git Service) 是一个由 Go 语言编写的自助 Git 托管服务。 | |||||
|  |  | ||||
| ##### 当前版本: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.Get("/pulls", reqSignIn, user.Pulls) | |||||
| m.Get("/stars", reqSignIn, user.Stars) | |||||
| m.Group("", func(r martini.Router) { | |||||
| r.Get("/issues", user.Issues) | |||||
| 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 | |||||
| func LoginUser(uname, passwd string) (*User, error) { | |||||
| // UserSignIn validates user name and password. | |||||
| 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) { | |||||
| user.LowerName = strings.ToLower(user.Name) | |||||
| func UpdateUser(u *User) (err error) { | |||||
| u.LowerName = strings.ToLower(u.Name) | |||||
| if len(user.Location) > 255 { | |||||
| user.Location = user.Location[:255] | |||||
| if len(u.Location) > 255 { | |||||
| u.Location = u.Location[:255] | |||||
| } | } | ||||
| if len(user.Website) > 255 { | |||||
| user.Website = user.Website[:255] | |||||
| if len(u.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) | |||||
| has, err := orm.Id(id).Get(user) | |||||
| u := new(User) | |||||
| has, err := orm.Id(id).Get(u) | |||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| } | |||||
| if !has { | |||||
| } else 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") | |||||
| if userId == nil { | |||||
| uid := sess.Get("userId") | |||||
| if uid == nil { | |||||
| return 0 | return 0 | ||||
| } | } | ||||
| if s, ok := userId.(int64); ok { | |||||
| if _, err := models.GetUserById(s); err != nil { | |||||
| if id, ok := uid.(int64); ok { | |||||
| 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 { | |||||
| userName := session.Get("userName") | |||||
| if userName == nil { | |||||
| func SignedInName(sess session.SessionStore) string { | |||||
| uname := sess.Get("userName") | |||||
| 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 { | |||||
| id := SignedInId(session) | |||||
| if id <= 0 { | |||||
| func SignedInUser(sess session.SessionStore) *models.User { | |||||
| uid := SignedInId(sess) | |||||
| 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 { | |||||
| return SignedInId(session) > 0 | |||||
| func IsSignedIn(sess session.SessionStore) bool { | |||||
| 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 { | |||||
| data["User"] = user | |||||
| if u != nil { | |||||
| 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) { | |||||
| code := CreateUserActiveCode(user, nil) | |||||
| func SendRegisterMail(r *middleware.Render, u *models.User) { | |||||
| 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.Info = fmt.Sprintf("UID: %d, send register mail", user.Id) | |||||
| msg := NewMailMessage([]string{u.Email}, subject, body) | |||||
| 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) { | |||||
| code := CreateUserActiveCode(user, nil) | |||||
| func SendActiveMail(r *middleware.Render, u *models.User) { | |||||
| 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.Info = fmt.Sprintf("UID: %d, send active mail", user.Id) | |||||
| msg := NewMailMessage([]string{u.Email}, subject, body) | |||||
| 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) { | |||||
| code := CreateUserActiveCode(user, nil) | |||||
| func SendResetPasswdMail(r *middleware.Render, u *models.User) { | |||||
| 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.Info = fmt.Sprintf("UID: %d, send reset password email", user.Id) | |||||
| msg := NewMailMessage([]string{u.Email}, subject, body) | |||||
| 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.Info = fmt.Sprintf("UID: %d, send register mail", user.Id) | |||||
| msg := NewMailMessage([]string{u.Email}, subject, body) | |||||
| 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) | |||||
| if len(userName) == 0 { | |||||
| uname := ctx.GetCookie(setting.CookieUserName) | |||||
| 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}} | ||||