blob: 962b894010728d80f7dee01fa814d196ad3895fa [file] [log] [blame]
// Copyright 2017 The LUCI Authors. All rights reserved.
// Use of this source code is governed under the Apache License, Version 2.0
// that can be found in the LICENSE file.
package frontend
import (
"fmt"
"net/http"
"go.chromium.org/luci/milo/buildsource/buildbucket"
"go.chromium.org/luci/buildbucket/deprecated"
buildbucketpb "go.chromium.org/luci/buildbucket/proto"
"go.chromium.org/luci/server/router"
"go.chromium.org/luci/server/templates"
)
// BuilderHandler renders the builder page.
// Does not control access directly because this endpoint delegates all access
// control to Buildbucket with the RPC calls.
func BuilderHandler(c *router.Context) error {
bid := &buildbucketpb.BuilderID{
Project: c.Params.ByName("project"),
Bucket: c.Params.ByName("bucket"),
Builder: c.Params.ByName("builder"),
}
pageSize := GetLimit(c.Request, -1)
// TODO(iannucci): standardize to "page token" term instead of cursor.
pageToken := c.Request.FormValue("cursor")
// Redirect to short bucket names.
if _, v2Bucket := deprecated.BucketNameToV2(bid.Bucket); v2Bucket != "" {
// Parameter "bucket" is v1, e.g. "luci.chromium.try".
u := *c.Request.URL
u.Path = fmt.Sprintf("/p/%s/builders/%s/%s", bid.Project, v2Bucket, bid.Builder)
http.Redirect(c.Writer, c.Request, u.String(), http.StatusMovedPermanently)
return nil
}
if pageSize <= 0 {
pageSize = 25
}
page, err := buildbucket.GetBuilderPage(c.Context, bid, pageSize, pageToken)
if err != nil {
return err
}
templates.MustRender(c.Context, c.Writer, "pages/builder.html", templates.Args{
"BuilderPage": page,
})
return nil
}