| // 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 |
| } |