// GlobalInit is for global configuration reload-able. func GlobalInit() { base.NewConfigContext() mailer.NewMailerContext() models.LoadModelsConfig() models.LoadRepoConfig() models.NewRepoContext() if base.InstallLock { if err := models.NewEngine(); err != nil { fmt.Println("%v", err) os.Exit(2) } models.HasEngine = true } base.NewServices() checkRunMode() }
func runWeb(*cli.Context) { globalInit() base.NewServices() checkRunMode() log.Info("%s %s", base.AppName, base.AppVer) m := newMartini() // Middlewares. m.Use(middleware.Renderer(middleware.RenderOptions{Funcs: []template.FuncMap{base.TemplateFuncs}})) m.Use(middleware.InitContext()) reqSignIn := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true}) ignSignIn := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: base.Service.RequireSignInView}) reqSignOut := middleware.Toggle(&middleware.ToggleOptions{SignOutRequire: true}) // Routers. m.Get("/", ignSignIn, routers.Home) m.Get("/issues", reqSignIn, user.Issues) m.Get("/pulls", reqSignIn, user.Pulls) m.Get("/stars", reqSignIn, user.Stars) m.Get("/help", routers.Help) avatarCache := avatar.HttpHandler("public/img/avatar/", "public/img/avatar_default.jpg") m.Get("/avatar/:hash", avatarCache.ServeHTTP) m.Group("/user", func(r martini.Router) { r.Any("/login", binding.BindIgnErr(auth.LogInForm{}), user.SignIn) r.Any("/sign_up", binding.BindIgnErr(auth.RegisterForm{}), user.SignUp) }, reqSignOut) m.Group("/user", func(r martini.Router) { r.Any("/logout", user.SignOut) r.Any("/delete", user.Delete) r.Any("/setting", binding.BindIgnErr(auth.UpdateProfileForm{}), user.Setting) }, reqSignIn) m.Group("/user", func(r martini.Router) { r.Get("/feeds", binding.Bind(auth.FeedsForm{}), user.Feeds) r.Get("/activate", user.Activate) }) m.Group("/user/setting", func(r martini.Router) { r.Any("/password", binding.BindIgnErr(auth.UpdatePasswdForm{}), user.SettingPassword) r.Any("/ssh", binding.BindIgnErr(auth.AddSSHKeyForm{}), user.SettingSSHKeys) r.Any("/notification", user.SettingNotification) r.Any("/security", user.SettingSecurity) }, reqSignIn) m.Get("/user/:username", ignSignIn, user.Profile) m.Any("/repo/create", reqSignIn, binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) adminReq := middleware.Toggle(&middleware.ToggleOptions{SignInRequire: true, AdminRequire: true}) m.Get("/admin", adminReq, admin.Dashboard) m.Group("/admin", func(r martini.Router) { r.Get("/users", admin.Users) r.Get("/repos", admin.Repositories) r.Get("/config", admin.Config) }, adminReq) m.Group("/admin/users", func(r martini.Router) { r.Any("/new", binding.BindIgnErr(auth.RegisterForm{}), admin.NewUser) r.Any("/:userid", binding.BindIgnErr(auth.AdminEditUserForm{}), admin.EditUser) r.Any("/:userid/delete", admin.DeleteUser) }, adminReq) m.Group("/:username/:reponame", func(r martini.Router) { r.Post("/settings", repo.SettingPost) r.Get("/settings", repo.Setting) r.Get("/action/:action", repo.Action) }, reqSignIn, middleware.RepoAssignment(true)) m.Group("/:username/:reponame", func(r martini.Router) { r.Get("/commits/:branchname", repo.Commits) r.Get("/issues", repo.Issues) r.Any("/issues/new", binding.BindIgnErr(auth.CreateIssueForm{}), repo.CreateIssue) r.Get("/issues/:index", repo.ViewIssue) r.Post("/issues/:index", binding.BindIgnErr(auth.CreateIssueForm{}), repo.UpdateIssue) r.Get("/pulls", repo.Pulls) r.Get("/branches", repo.Branches) r.Get("/src/:branchname", repo.Single) r.Get("/src/:branchname/**", repo.Single) r.Get("/commits/:branchname", repo.Commits) r.Get("/commits/:branchname", repo.Commits) }, ignSignIn, middleware.RepoAssignment(true)) // TODO: implement single commit page // m.Get("/:username/:reponame/commit/:commitid/**", ignSignIn, middleware.RepoAssignment(true), repo.Single) // m.Get("/:username/:reponame/commit/:commitid", ignSignIn, middleware.RepoAssignment(true), repo.Single) m.Group("/:username", func(r martini.Router) { r.Get("/:reponame", middleware.RepoAssignment(true), repo.Single) r.Any("/:reponame/**", repo.Http) }, ignSignIn) if martini.Env == martini.Dev { m.Get("/template/**", dev.TemplatePreview) } // Not found handler. m.NotFound(routers.NotFound) listenAddr := fmt.Sprintf("%s:%s", base.Cfg.MustValue("server", "HTTP_ADDR"), base.Cfg.MustValue("server", "HTTP_PORT", "3000")) log.Info("Listen: %s", listenAddr) if err := http.ListenAndServe(listenAddr, m); err != nil { log.Critical(err.Error()) } }