Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: milo/appengine/common/middleware.go

Issue 2949783002: [milo] appengine/* -> * (Closed)
Patch Set: rebase Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « milo/appengine/common/gitiles/gitiles.go ('k') | milo/appengine/common/model/build_summary.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file.
4
5 package common
6
7 import (
8 "net/http"
9 "strings"
10
11 "golang.org/x/net/context"
12
13 "github.com/luci/gae/impl/cloud"
14 "github.com/luci/gae/service/info"
15 "github.com/luci/luci-go/appengine/gaeauth/server"
16 "github.com/luci/luci-go/appengine/gaemiddleware"
17 "github.com/luci/luci-go/common/clock"
18 "github.com/luci/luci-go/server/analytics"
19 "github.com/luci/luci-go/server/auth"
20 "github.com/luci/luci-go/server/auth/identity"
21 "github.com/luci/luci-go/server/router"
22 "github.com/luci/luci-go/server/templates"
23 )
24
25 var authconfig *auth.Config
26
27 // GetTemplateBundles is used to render HTML templates. It provides base args
28 // passed to all templates. It takes a path to the template folder, relative
29 // to the path of the binary during runtime.
30 func GetTemplateBundle(templatePath string) *templates.Bundle {
31 return &templates.Bundle{
32 Loader: templates.FileSystemLoader(templatePath),
33 DebugMode: info.IsDevAppServer,
34 DefaultTemplate: "base",
35 DefaultArgs: func(c context.Context) (templates.Args, error) {
36 r := getRequest(c)
37 path := r.URL.Path
38 loginURL, err := auth.LoginURL(c, path)
39 if err != nil {
40 return nil, err
41 }
42 logoutURL, err := auth.LogoutURL(c, path)
43 if err != nil {
44 return nil, err
45 }
46 return templates.Args{
47 "AppVersion": strings.Split(info.VersionID(c), ".")[0],
48 "IsAnonymous": auth.CurrentIdentity(c) == identi ty.AnonymousIdentity,
49 "User": auth.CurrentUser(c),
50 "LoginURL": loginURL,
51 "LogoutURL": logoutURL,
52 "CurrentTime": clock.Now(c),
53 "Analytics": analytics.Snippet(c),
54 "RequestID": info.RequestID(c),
55 "Request": r,
56 }, nil
57 },
58 FuncMap: funcMap,
59 }
60 }
61
62 // Base returns the basic LUCI appengine middlewares.
63 func Base(templatePath string) router.MiddlewareChain {
64 return gaemiddleware.BaseProd().Extend(
65 auth.Authenticate(server.CookieAuth),
66 withRequestMiddleware,
67 templates.WithTemplates(GetTemplateBundle(templatePath)),
68 )
69 }
70
71 // FlexBase returns the basic middleware for use on appengine flex. Flex does n ot
72 // allow the use of appengine APIs.
73 func FlexBase() router.MiddlewareChain {
74 // Installs the Info and Datastore services.
75 return router.NewMiddlewareChain(func(c *router.Context, next router.Han dler) {
76 c.Context = cloud.UseFlex(c.Context)
77 next(c)
78 })
79 }
80
81 // The context key, so that we can embed the http.Request object into
82 // the context.
83 var requestKey = "http.request"
84
85 // WithRequest returns a context with the http.Request object
86 // in it.
87 func WithRequest(c context.Context, r *http.Request) context.Context {
88 return context.WithValue(c, &requestKey, r)
89 }
90
91 // withRequestMiddleware is a middleware that installs a request into the contex t.
92 // This is used for various things in the default template.
93 func withRequestMiddleware(c *router.Context, next router.Handler) {
94 c.Context = WithRequest(c.Context, c.Request)
95 next(c)
96 }
97
98 func getRequest(c context.Context) *http.Request {
99 if req, ok := c.Value(&requestKey).(*http.Request); ok {
100 return req
101 }
102 panic("No http.request found in context")
103 }
OLDNEW
« no previous file with comments | « milo/appengine/common/gitiles/gitiles.go ('k') | milo/appengine/common/model/build_summary.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698