woodpecker/controller/pages.go

242 lines
4.6 KiB
Go
Raw Normal View History

2015-09-30 01:21:17 +00:00
package controller
import (
"net/http"
"strconv"
"time"
log "github.com/Sirupsen/logrus"
2015-09-30 01:21:17 +00:00
"github.com/gin-gonic/gin"
"github.com/drone/drone/model"
"github.com/drone/drone/router/middleware/context"
"github.com/drone/drone/router/middleware/session"
"github.com/drone/drone/shared/httputil"
"github.com/drone/drone/shared/token"
)
func ShowIndex(c *gin.Context) {
db := context.Database(c)
2015-09-30 01:21:17 +00:00
user := session.User(c)
if user == nil {
c.HTML(200, "login.html", gin.H{})
return
}
repos, err := model.GetRepoList(db, user)
if err != nil {
2015-10-06 22:58:37 +00:00
log.Error(err)
}
2015-09-30 01:21:17 +00:00
c.HTML(200, "repos.html", gin.H{
"User": user,
"Repos": repos,
2015-09-30 01:21:17 +00:00
})
}
2015-10-15 22:40:27 +00:00
// func ShowIndex(c *gin.Context) {
// db := context.Database(c)
// remote := context.Remote(c)
// user := session.User(c)
// if user == nil {
// c.Redirect(http.StatusSeeOther, "/login")
// return
// }
// var err error
// var repos []*model.RepoLite
// // get the repository list from the cache
// reposv, ok := c.Get("repos")
// if ok {
// repos = reposv.([]*model.RepoLite)
// } else {
// println("GETTING REMOTE REPOS")
// repos, err = remote.Repos(user)
// if err != nil {
// log.Errorf("Failure to get remote repositories for %s. %s.",
// user.Login, err)
// } else {
// c.Set("repos", repos)
// }
// }
// // for each repository in the remote system we get
// // the intersection of those repostiories in Drone
// repos_, err := model.GetRepoListOf(db, repos)
// if err != nil {
// log.Errorf("Failure to get repository list for %s. %s.",
// user.Login, err)
// }
// c.HTML(200, "repos.html", gin.H{
// "User": user,
// "Repos": repos_,
// })
// }
2015-09-30 01:21:17 +00:00
func ShowLogin(c *gin.Context) {
c.HTML(200, "login.html", gin.H{"Error": c.Query("error")})
}
func ShowUser(c *gin.Context) {
user := session.User(c)
token, _ := token.New(
token.CsrfToken,
user.Login,
).Sign(user.Hash)
c.HTML(200, "user.html", gin.H{
"User": user,
"Csrf": token,
})
}
func ShowUsers(c *gin.Context) {
db := context.Database(c)
user := session.User(c)
if !user.Admin {
c.AbortWithStatus(http.StatusForbidden)
return
}
users, _ := model.GetUserList(db)
token, _ := token.New(
token.CsrfToken,
user.Login,
).Sign(user.Hash)
c.HTML(200, "users.html", gin.H{
"User": user,
"Users": users,
"Csrf": token,
})
}
func ShowRepo(c *gin.Context) {
db := context.Database(c)
user := session.User(c)
repo := session.Repo(c)
2015-09-30 01:21:17 +00:00
builds, _ := model.GetBuildList(db, repo)
groups := []*model.BuildGroup{}
var curr *model.BuildGroup
for _, build := range builds {
date := time.Unix(build.Created, 0).Format("Jan 2 2006")
if curr == nil || curr.Date != date {
curr = &model.BuildGroup{}
curr.Date = date
groups = append(groups, curr)
}
curr.Builds = append(curr.Builds, build)
}
httputil.SetCookie(c.Writer, c.Request, "user_last", repo.FullName)
c.HTML(200, "repo.html", gin.H{
"User": user,
"Repo": repo,
"Builds": builds,
"Groups": groups,
})
}
func ShowRepoConf(c *gin.Context) {
db := context.Database(c)
user := session.User(c)
repo := session.Repo(c)
key, _ := model.GetKey(db, repo)
token, _ := token.New(
token.CsrfToken,
user.Login,
).Sign(user.Hash)
c.HTML(200, "repo_config.html", gin.H{
2015-09-30 01:21:17 +00:00
"User": user,
"Repo": repo,
"Key": key,
"Csrf": token,
"Link": httputil.GetURL(c.Request),
})
}
func ShowRepoEncrypt(c *gin.Context) {
user := session.User(c)
repo := session.Repo(c)
token, _ := token.New(
token.CsrfToken,
user.Login,
).Sign(user.Hash)
c.HTML(200, "repo_secret.html", gin.H{
"User": user,
"Repo": repo,
"Csrf": token,
})
}
func ShowRepoBadges(c *gin.Context) {
user := session.User(c)
repo := session.Repo(c)
c.HTML(200, "repo_badge.html", gin.H{
"User": user,
"Repo": repo,
"Link": httputil.GetURL(c.Request),
})
}
2015-09-30 01:21:17 +00:00
func ShowBuild(c *gin.Context) {
db := context.Database(c)
user := session.User(c)
repo := session.Repo(c)
num, _ := strconv.Atoi(c.Param("number"))
seq, _ := strconv.Atoi(c.Param("job"))
if seq == 0 {
seq = 1
}
build, err := model.GetBuildNumber(db, repo, num)
if err != nil {
c.AbortWithError(404, err)
return
}
jobs, err := model.GetJobList(db, build)
if err != nil {
c.AbortWithError(404, err)
return
}
var job *model.Job
for _, j := range jobs {
if j.Number == seq {
job = j
break
}
}
httputil.SetCookie(c.Writer, c.Request, "user_last", repo.FullName)
var csrf string
if user != nil {
csrf, _ = token.New(
token.CsrfToken,
user.Login,
).Sign(user.Hash)
}
2015-09-30 01:21:17 +00:00
c.HTML(200, "build.html", gin.H{
"User": user,
"Repo": repo,
"Build": build,
"Jobs": jobs,
"Job": job,
"Csrf": csrf,
2015-09-30 01:21:17 +00:00
})
}