woodpecker/server/ui.go

79 lines
1.6 KiB
Go
Raw Normal View History

2017-06-30 18:39:25 +00:00
package server
import (
"net/http"
"os"
"github.com/drone/drone-ui/dist"
"github.com/drone/drone/model"
"github.com/drone/drone/server/template"
"github.com/drone/drone/shared/token"
)
// Website defines an interface to serve the user interface.
type Website interface {
Page(rw http.ResponseWriter, r *http.Request, u *model.User)
File(rw http.ResponseWriter, r *http.Request)
Routes() []string
}
type website struct {
fs http.Handler
}
// NewWebsite returns a new website loader.
func NewWebsite() Website {
2017-07-16 16:27:01 +00:00
// TODO change to DRONE_WEB_PATH and add DRONE_WEB_PROXY
2017-06-30 18:39:25 +00:00
path := os.Getenv("DRONE_WWW")
if path != "" {
return NewLocalWebsite(path)
}
return &website{
2017-07-16 16:27:01 +00:00
fs: http.FileServer(dist.New()),
2017-06-30 18:39:25 +00:00
}
}
// Page serves a page in the user interface.
func (w *website) Page(rw http.ResponseWriter, r *http.Request, u *model.User) {
rw.WriteHeader(200)
path := r.URL.Path
switch path {
case "/login":
if err := r.FormValue("error"); err != "" {
2017-07-16 16:27:01 +00:00
// TODO login error
2017-06-30 18:39:25 +00:00
} else {
http.Redirect(rw, r, "/authorize", 303)
}
default:
var csrf string
if u != nil {
csrf, _ = token.New(
token.CsrfToken,
u.Login,
).Sign(u.Hash)
}
params := map[string]interface{}{
"user": u,
"csrf": csrf,
}
2017-07-16 16:27:01 +00:00
template.T.ExecuteTemplate(rw, "index_polymer.html", params)
2017-06-30 18:39:25 +00:00
}
}
// File serves a static file for the user interface.
func (w *website) File(rw http.ResponseWriter, r *http.Request) {
w.fs.ServeHTTP(rw, r)
}
func (w *website) Routes() []string {
return []string{
2017-07-16 16:27:01 +00:00
"/favicon-32x32.png",
"/favicon-16x16.png",
"/src/*filepath",
"/bower_components/*filepath",
2017-06-30 18:39:25 +00:00
}
}