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

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

Issue 2977863002: [milo] Refactor all html knowledge out of backends. (Closed)
Patch Set: now with case insensitivity Created 3 years, 5 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/common/funcs_test.go ('k') | milo/common/utils.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.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package common
16
17 import (
18 "net/http"
19 "strings"
20
21 "golang.org/x/net/context"
22
23 "github.com/luci/gae/impl/cloud"
24 "github.com/luci/gae/service/info"
25 "github.com/luci/luci-go/appengine/gaeauth/server"
26 "github.com/luci/luci-go/appengine/gaemiddleware"
27 "github.com/luci/luci-go/common/clock"
28 "github.com/luci/luci-go/server/analytics"
29 "github.com/luci/luci-go/server/auth"
30 "github.com/luci/luci-go/server/auth/identity"
31 "github.com/luci/luci-go/server/router"
32 "github.com/luci/luci-go/server/templates"
33 )
34
35 var authconfig *auth.Config
36
37 // GetTemplateBundles is used to render HTML templates. It provides base args
38 // passed to all templates. It takes a path to the template folder, relative
39 // to the path of the binary during runtime.
40 func GetTemplateBundle(templatePath string) *templates.Bundle {
41 return &templates.Bundle{
42 Loader: templates.FileSystemLoader(templatePath),
43 DebugMode: info.IsDevAppServer,
44 DefaultTemplate: "base",
45 DefaultArgs: func(c context.Context) (templates.Args, error) {
46 r := getRequest(c)
47 path := r.URL.Path
48 loginURL, err := auth.LoginURL(c, path)
49 if err != nil {
50 return nil, err
51 }
52 logoutURL, err := auth.LogoutURL(c, path)
53 if err != nil {
54 return nil, err
55 }
56 return templates.Args{
57 "AppVersion": strings.Split(info.VersionID(c), ".")[0],
58 "IsAnonymous": auth.CurrentIdentity(c) == identi ty.AnonymousIdentity,
59 "User": auth.CurrentUser(c),
60 "LoginURL": loginURL,
61 "LogoutURL": logoutURL,
62 "CurrentTime": clock.Now(c),
63 "Analytics": analytics.Snippet(c),
64 "RequestID": info.RequestID(c),
65 "Request": r,
66 }, nil
67 },
68 FuncMap: funcMap,
69 }
70 }
71
72 // Base returns the basic LUCI appengine middlewares.
73 func Base(templatePath string) router.MiddlewareChain {
74 return gaemiddleware.BaseProd().Extend(
75 auth.Authenticate(server.CookieAuth),
76 withRequestMiddleware,
77 templates.WithTemplates(GetTemplateBundle(templatePath)),
78 )
79 }
80
81 // FlexBase returns the basic middleware for use on appengine flex. Flex does n ot
82 // allow the use of appengine APIs.
83 func FlexBase() router.MiddlewareChain {
84 // Installs the Info and Datastore services.
85 return router.NewMiddlewareChain(func(c *router.Context, next router.Han dler) {
86 c.Context = cloud.UseFlex(c.Context)
87 next(c)
88 })
89 }
90
91 // The context key, so that we can embed the http.Request object into
92 // the context.
93 var requestKey = "http.request"
94
95 // WithRequest returns a context with the http.Request object
96 // in it.
97 func WithRequest(c context.Context, r *http.Request) context.Context {
98 return context.WithValue(c, &requestKey, r)
99 }
100
101 // withRequestMiddleware is a middleware that installs a request into the contex t.
102 // This is used for various things in the default template.
103 func withRequestMiddleware(c *router.Context, next router.Handler) {
104 c.Context = WithRequest(c.Context, c.Request)
105 next(c)
106 }
107
108 func getRequest(c context.Context) *http.Request {
109 if req, ok := c.Value(&requestKey).(*http.Request); ok {
110 return req
111 }
112 panic("No http.request found in context")
113 }
OLDNEW
« no previous file with comments | « milo/common/funcs_test.go ('k') | milo/common/utils.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698