func (h HomeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { c, err := goship.ParseETCD(h.ecl) if err != nil { log.Printf("Failed to Parse to ETCD data %s", err) http.Error(w, err.Error(), http.StatusInternalServerError) } u, err := auth.CurrentUser(r) if err != nil { log.Println("Failed to get User! ") http.Error(w, err.Error(), http.StatusUnauthorized) } t, err := template.New("index.html").ParseFiles("templates/index.html", "templates/base.html") if err != nil { log.Printf("Failed to parse template: %s", err) http.Error(w, err.Error(), http.StatusInternalServerError) } c.Projects = acl.ReadableProjects(h.ac, c.Projects, u) sort.Sort(ByName(c.Projects)) // apply each plugin for _, pl := range plugin.Plugins { err := pl.Apply(c) if err != nil { log.Printf("Failed to apply plugin: %s", err) http.Error(w, err.Error(), http.StatusInternalServerError) } } js, css := h.assets.Templates() gt := os.Getenv(gitHubAPITokenEnvVar) pt := c.Pivotal.Token t.ExecuteTemplate(w, "base", map[string]interface{}{"Javascript": js, "Stylesheet": css, "Projects": c.Projects, "User": u, "Page": "home", "ConfirmDeployFlag": *confirmDeployFlag, "GithubToken": gt, "PivotalToken": pt}) }
func (h HomeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { c, err := config.Load(h.ecl) if err != nil { glog.Errorf("Failed to Parse to ETCD data %s", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } u, err := auth.CurrentUser(r) if err != nil { glog.Errorf("Failed to get current user: %v", err) http.Error(w, err.Error(), http.StatusUnauthorized) return } t, err := template.New("index.html").ParseFiles("templates/index.html", "templates/base.html") if err != nil { glog.Errorf("Failed to parse template: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } projs := acl.ReadableProjects(h.ac, c.Projects, u) sort.Sort(ByName(c.Projects)) // columns maps a plugin name to a list of columns columns := make(map[string][]plugin.Column) for _, pl := range plugin.Plugins { for _, p := range c.Projects { cols, err := pl.Apply(p) if err != nil { glog.Errorf("Failed to apply plugin: %s", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } columns[p.Name] = append(columns[p.Name], cols...) } } js, css := h.assets.Templates() gt := os.Getenv(gitHubAPITokenEnvVar) pt := c.Pivotal.Token params := map[string]interface{}{ "Javascript": js, "Stylesheet": css, "Projects": projs, "PluginColumns": columns, "User": u, "Page": "home", "ConfirmDeployFlag": *confirmDeployFlag, "GithubToken": gt, "PivotalToken": pt, } helpers.RespondWithTemplate(w, "text/html", t, "base", params) }
func (h ProjCommitsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request, projName string) { c, err := goship.ParseETCD(h.ecl) if err != nil { log.Println("ERROR: Parsing etc ", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } u, err := auth.CurrentUser(r) if err != nil { log.Println("ERROR: Getting User", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } proj, err := goship.ProjectFromName(c.Projects, projName) if err != nil { log.Println("ERROR: Getting Project from name", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } // Remove projects that the user is not a collaborator on... fp := acl.ReadableProjects(h.ac, []goship.Project{*proj}, u) p, err := retrieveCommits(h.gcl, h.ac, r, fp[0], c.DeployUser) if err != nil { log.Println("ERROR: Retrieving Commits ", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } j, err := json.Marshal(p) if err != nil { log.Println("ERROR: Marshalling Retrieving Commits ", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") _, err = w.Write(j) if err != nil { log.Println("ERROR: ", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } }
func extractDeployLogHandler(ac acl.AccessControl, ecl *etcd.Client, fn func(http.ResponseWriter, *http.Request, string, config.Environment, string)) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { m := validPathWithEnv.FindStringSubmatch(r.URL.Path) if m == nil { http.NotFound(w, r) return } c, err := config.Load(ecl) if err != nil { glog.Errorf("Failed to get current configuration: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } // auth check for user u, err := auth.CurrentUser(r) if err != nil { glog.Error("Failed to get a user while deploying in Auth Mode: %v", err) http.Error(w, err.Error(), http.StatusUnauthorized) } c.Projects = acl.ReadableProjects(ac, c.Projects, u) // get project name and env from url a := strings.Split(m[2], "-") l := len(a) environmentName := a[l-1] var projectName string if m[1] == "commits" { projectName = m[2] } else { projectName = strings.Join(a[0:l-1], "-") } e, err := config.EnvironmentFromName(c.Projects, projectName, environmentName) if err != nil { glog.Errorf("Can't get environment from name: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } fn(w, r, m[2], *e, projectName) } }