adding apigee clientID support
This commit is contained in:
parent
d966bc7c5d
commit
03de6a9b1c
3 changed files with 108 additions and 6 deletions
|
@ -344,6 +344,60 @@ func (fe *frontendServer) setCurrencyHandler(w http.ResponseWriter, r *http.Requ
|
||||||
w.WriteHeader(http.StatusFound)
|
w.WriteHeader(http.StatusFound)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// viewConfigHandler adds an endpoint for administrators to add custom configuration items.
|
||||||
|
// I.E. apigeeClientID
|
||||||
|
// TODO(phriscage) update for multiple config values
|
||||||
|
func (fe *frontendServer) viewConfigHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
log := r.Context().Value(ctxKeyLog{}).(logrus.FieldLogger)
|
||||||
|
currencies, err := fe.getCurrencies(r.Context())
|
||||||
|
if err != nil {
|
||||||
|
renderHTTPError(log, r, w, errors.Wrap(err, "could not retrieve currencies"), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cart, err := fe.getCart(r.Context(), sessionID(r))
|
||||||
|
if err != nil {
|
||||||
|
renderHTTPError(log, r, w, errors.Wrap(err, "could not retrieve cart"), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
apigeeClientID := currentApigeeClientID(r)
|
||||||
|
|
||||||
|
if err := templates.ExecuteTemplate(w, "config", map[string]interface{}{
|
||||||
|
"session_id": sessionID(r),
|
||||||
|
"request_id": r.Context().Value(ctxKeyRequestID{}),
|
||||||
|
"user_currency": currentCurrency(r),
|
||||||
|
"currencies": currencies,
|
||||||
|
"apigee_client_id": apigeeClientID,
|
||||||
|
"cart_size": len(cart),
|
||||||
|
}); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// setConfigHandler we set the config variables from the FORM POST.
|
||||||
|
// Currently utilizing Cookies until appropriate storage library is determined
|
||||||
|
func (fe *frontendServer) setConfigHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
log := r.Context().Value(ctxKeyLog{}).(logrus.FieldLogger)
|
||||||
|
apigeeClientID := r.FormValue("apigee_client_id")
|
||||||
|
log.WithField("apigee_client_id.new", apigeeClientID).WithField("apigeeClientID.old", currentApigeeClientID(r)).
|
||||||
|
Debug("setting apigee_client_id")
|
||||||
|
|
||||||
|
if apigeeClientID != "" {
|
||||||
|
http.SetCookie(w, &http.Cookie{
|
||||||
|
Name: apigeeClientIDHeaderName,
|
||||||
|
Value: apigeeClientID,
|
||||||
|
MaxAge: cookieMaxAge,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
referer := r.Header.Get("referer")
|
||||||
|
if referer == "" {
|
||||||
|
referer = "/"
|
||||||
|
}
|
||||||
|
w.Header().Set("Location", referer)
|
||||||
|
w.WriteHeader(http.StatusFound)
|
||||||
|
}
|
||||||
|
|
||||||
// chooseAd queries for advertisements available and randomly chooses one, if
|
// chooseAd queries for advertisements available and randomly chooses one, if
|
||||||
// available. It ignores the error retrieving the ad since it is not critical.
|
// available. It ignores the error retrieving the ad since it is not critical.
|
||||||
func (fe *frontendServer) chooseAd(ctx context.Context, ctxKeys []string, log logrus.FieldLogger) *pb.Ad {
|
func (fe *frontendServer) chooseAd(ctx context.Context, ctxKeys []string, log logrus.FieldLogger) *pb.Ad {
|
||||||
|
@ -376,6 +430,14 @@ func currentCurrency(r *http.Request) string {
|
||||||
return defaultCurrency
|
return defaultCurrency
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func currentApigeeClientID(r *http.Request) string {
|
||||||
|
c, _ := r.Cookie(apigeeClientIDHeaderName)
|
||||||
|
if c != nil {
|
||||||
|
return c.Value
|
||||||
|
}
|
||||||
|
return defaultApigeeClientID
|
||||||
|
}
|
||||||
|
|
||||||
func sessionID(r *http.Request) string {
|
func sessionID(r *http.Request) string {
|
||||||
v := r.Context().Value(ctxKeySessionID{})
|
v := r.Context().Value(ctxKeySessionID{})
|
||||||
if v != nil {
|
if v != nil {
|
||||||
|
|
|
@ -35,13 +35,15 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
port = "8080"
|
port = "8080"
|
||||||
defaultCurrency = "USD"
|
defaultCurrency = "USD"
|
||||||
cookieMaxAge = 60 * 60 * 48
|
cookieMaxAge = 60 * 60 * 48
|
||||||
|
defaultApigeeClientID = "Add your Apigee Application Client ID here"
|
||||||
|
|
||||||
cookiePrefix = "shop_"
|
cookiePrefix = "shop_"
|
||||||
cookieSessionID = cookiePrefix + "session-id"
|
cookieSessionID = cookiePrefix + "session-id"
|
||||||
cookieCurrency = cookiePrefix + "currency"
|
cookieCurrency = cookiePrefix + "currency"
|
||||||
|
apigeeClientIDHeaderName = "x-api-key"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -124,6 +126,8 @@ func main() {
|
||||||
r.HandleFunc("/cart", svc.viewCartHandler).Methods(http.MethodGet, http.MethodHead)
|
r.HandleFunc("/cart", svc.viewCartHandler).Methods(http.MethodGet, http.MethodHead)
|
||||||
r.HandleFunc("/cart", svc.addToCartHandler).Methods(http.MethodPost)
|
r.HandleFunc("/cart", svc.addToCartHandler).Methods(http.MethodPost)
|
||||||
r.HandleFunc("/cart/empty", svc.emptyCartHandler).Methods(http.MethodPost)
|
r.HandleFunc("/cart/empty", svc.emptyCartHandler).Methods(http.MethodPost)
|
||||||
|
r.HandleFunc("/config", svc.viewConfigHandler).Methods(http.MethodGet, http.MethodHead)
|
||||||
|
r.HandleFunc("/config", svc.setConfigHandler).Methods(http.MethodPost)
|
||||||
r.HandleFunc("/setCurrency", svc.setCurrencyHandler).Methods(http.MethodPost)
|
r.HandleFunc("/setCurrency", svc.setCurrencyHandler).Methods(http.MethodPost)
|
||||||
r.HandleFunc("/logout", svc.logoutHandler).Methods(http.MethodGet)
|
r.HandleFunc("/logout", svc.logoutHandler).Methods(http.MethodGet)
|
||||||
r.HandleFunc("/cart/checkout", svc.placeOrderHandler).Methods(http.MethodPost)
|
r.HandleFunc("/cart/checkout", svc.placeOrderHandler).Methods(http.MethodPost)
|
||||||
|
|
36
src/frontend/templates/config.html
Normal file
36
src/frontend/templates/config.html
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{{ define "config" }}
|
||||||
|
{{ template "header" . }}
|
||||||
|
|
||||||
|
<main role="main">
|
||||||
|
<div class="py-5">
|
||||||
|
<div class="container bg-light py-3 px-lg-5 py-lg-5">
|
||||||
|
<div class="row py-3 my-2">
|
||||||
|
<div class="col-12 col-lg-8 offset-lg-2">
|
||||||
|
<h2>Hipster App Configuration</h2>
|
||||||
|
<hr/>
|
||||||
|
<form action="/config" method="POST">
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="col-lg-3 mb-3 text-center">Apigee Client ID:</div>
|
||||||
|
<div class="col-lg-8 mb-3">
|
||||||
|
<input type="text" class="form-control" id="apigee_client_id" name="apigee_client_id" value="{{ .apigee_client_id }}" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="col">
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-5 mb-3">
|
||||||
|
<button class="btn btn-primary btn-block" type="submit">Save</button>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
{{ template "footer" . }}
|
||||||
|
{{ end }}
|
Loading…
Add table
Add a link
Reference in a new issue