| @@ -161,3 +161,53 @@ func AssignForm(form interface{}, data base.TmplData) { | |||||
| data[fieldName] = val.Field(i).Interface() | data[fieldName] = val.Field(i).Interface() | ||||
| } | } | ||||
| } | } | ||||
| type InstallForm struct { | |||||
| Database string `form:"database" binding:"Required"` | |||||
| Host string `form:"host"` | |||||
| User string `form:"user"` | |||||
| Passwd string `form:"passwd"` | |||||
| DatabaseName string `form:"database_name"` | |||||
| SslMode string `form:"ssl_mode"` | |||||
| DatabasePath string `form:"database_path"` | |||||
| RepoRootPath string `form:"repo_path"` | |||||
| RunUser string `form:"run_user"` | |||||
| AppUrl string `form:"app_url"` | |||||
| AdminName string `form:"admin_name" binding:"Required"` | |||||
| AdminPasswd string `form:"admin_pwd" binding:"Required;MinSize(6);MaxSize(30)"` | |||||
| AdminEmail string `form:"admin_email" binding:"Required;Email;MaxSize(50)"` | |||||
| SmtpHost string `form:"smtp_host"` | |||||
| SmtpEmail string `form:"mailer_user"` | |||||
| SmtpPasswd string `form:"mailer_pwd"` | |||||
| RegisterConfirm string `form:"register_confirm"` | |||||
| MailNotify string `form:"mail_notify"` | |||||
| } | |||||
| func (f *InstallForm) Name(field string) string { | |||||
| names := map[string]string{ | |||||
| "Database": "Database name", | |||||
| "AdminName": "Admin user name", | |||||
| "AdminPasswd": "Admin password", | |||||
| "AdminEmail": "Admin e-maill address", | |||||
| } | |||||
| return names[field] | |||||
| } | |||||
| func (f *InstallForm) Validate(errors *binding.Errors, req *http.Request, context martini.Context) { | |||||
| if req.Method == "GET" || errors.Count() == 0 { | |||||
| return | |||||
| } | |||||
| data := context.Get(reflect.TypeOf(base.TmplData{})).Interface().(base.TmplData) | |||||
| data["HasError"] = true | |||||
| AssignForm(f, data) | |||||
| if len(errors.Overall) > 0 { | |||||
| for _, err := range errors.Overall { | |||||
| log.Error("InstallForm.Validate: %v", err) | |||||
| } | |||||
| return | |||||
| } | |||||
| validate(errors, data, f) | |||||
| } | |||||
| @@ -8,11 +8,12 @@ import ( | |||||
| "errors" | "errors" | ||||
| "github.com/gogits/gogs/models" | "github.com/gogits/gogs/models" | ||||
| "github.com/gogits/gogs/modules/auth" | |||||
| "github.com/gogits/gogs/modules/base" | "github.com/gogits/gogs/modules/base" | ||||
| "github.com/gogits/gogs/modules/middleware" | "github.com/gogits/gogs/modules/middleware" | ||||
| ) | ) | ||||
| func Install(ctx *middleware.Context) { | |||||
| func Install(ctx *middleware.Context, form auth.InstallForm) { | |||||
| if base.InstallLock { | if base.InstallLock { | ||||
| ctx.Handle(404, "install.Install", errors.New("Installation is prohibited")) | ctx.Handle(404, "install.Install", errors.New("Installation is prohibited")) | ||||
| return | return | ||||
| @@ -43,7 +43,7 @@ | |||||
| <label class="col-md-3 control-label">Database Name: </label> | <label class="col-md-3 control-label">Database Name: </label> | ||||
| <div class="col-md-8"> | <div class="col-md-8"> | ||||
| <input name="database" type="text" class="form-control" placeholder="Type mysql database name" value="{{.DbCfg.Name}}" required="required"> | |||||
| <input name="database_name" type="text" class="form-control" placeholder="Type mysql database name" value="{{.DbCfg.Name}}" required="required"> | |||||
| <p class="help-block">Recommend use INNODB engine with utf8_general_ci charset.</p> | <p class="help-block">Recommend use INNODB engine with utf8_general_ci charset.</p> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -64,7 +64,7 @@ | |||||
| <label class="col-md-3 control-label">Path: </label> | <label class="col-md-3 control-label">Path: </label> | ||||
| <div class="col-md-8"> | <div class="col-md-8"> | ||||
| <input name="path" class="form-control" placeholder="Type sqlite3 file path" value="{{.DbCfg.Path}}"> | |||||
| <input name="database_path" class="form-control" placeholder="Type sqlite3 file path" value="{{.DbCfg.Path}}"> | |||||
| <p class="help-block">The file path of SQLite3 database.</p> | <p class="help-block">The file path of SQLite3 database.</p> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -78,7 +78,7 @@ | |||||
| <label class="col-md-3 control-label">Repository Path: </label> | <label class="col-md-3 control-label">Repository Path: </label> | ||||
| <div class="col-md-8"> | <div class="col-md-8"> | ||||
| <input name="repo-path" type="text" class="form-control" placeholder="Type your repository directory" value="{{.RepoRootPath}}" required="required"> | |||||
| <input name="repo_path" type="text" class="form-control" placeholder="Type your repository directory" value="{{.RepoRootPath}}" required="required"> | |||||
| <p class="help-block">The git copy of each repository is saved in this directory.</p> | <p class="help-block">The git copy of each repository is saved in this directory.</p> | ||||
| </div> | </div> | ||||
| @@ -88,7 +88,7 @@ | |||||
| <label class="col-md-3 control-label">Run User: </label> | <label class="col-md-3 control-label">Run User: </label> | ||||
| <div class="col-md-8"> | <div class="col-md-8"> | ||||
| <input name="system-user" type="text" class="form-control" placeholder="Type system user name" value="{{.RunUser}}" required="required"> | |||||
| <input name="run_user" type="text" class="form-control" placeholder="Type system user name" value="{{.RunUser}}" required="required"> | |||||
| <p class="help-block">The user has access to visit and run Gogs.</p> | <p class="help-block">The user has access to visit and run Gogs.</p> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -90,7 +90,7 @@ func runWeb(*cli.Context) { | |||||
| // Routers. | // Routers. | ||||
| m.Get("/", ignSignIn, routers.Home) | m.Get("/", ignSignIn, routers.Home) | ||||
| m.Get("/install", routers.Install) | |||||
| m.Any("/install", routers.Install) | |||||
| m.Get("/issues", reqSignIn, user.Issues) | m.Get("/issues", reqSignIn, user.Issues) | ||||
| m.Get("/pulls", reqSignIn, user.Pulls) | m.Get("/pulls", reqSignIn, user.Pulls) | ||||
| m.Get("/stars", reqSignIn, user.Stars) | m.Get("/stars", reqSignIn, user.Stars) | ||||