From 1b3f91363fd09e371764f9b68802e4b676bc9cc5 Mon Sep 17 00:00:00 2001 From: Mihai Parparita Date: Tue, 5 Aug 2014 22:14:35 -0700 Subject: [PATCH] Add basic admin UI for viewing the digest as another user. --- app/app.yaml | 3 +++ app/digest.go | 2 +- app/githop.go | 42 +++++++++++++++++++++++++++++++-- app/templates/digest-admin.html | 18 ++++++++++++++ 4 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 app/templates/digest-admin.html diff --git a/app/app.yaml b/app/app.yaml index 24d55b2..c72cd72 100644 --- a/app/app.yaml +++ b/app/app.yaml @@ -10,6 +10,9 @@ handlers: - url: /digest/cron script: _go_app login: admin +- url: /admin/.* + script: _go_app + login: admin - url: /.* script: _go_app secure: always diff --git a/app/digest.go b/app/digest.go index 0db9948..87b5d53 100644 --- a/app/digest.go +++ b/app/digest.go @@ -10,7 +10,7 @@ import ( ) const ( - DisplayDateFormat = "3:04pm" + DisplayDateFormat = "3:04pm" DisplayDateTooltipFormat = "Monday January 2 3:04pm" ) diff --git a/app/githop.go b/app/githop.go index 0995dbd..a0127d9 100644 --- a/app/githop.go +++ b/app/githop.go @@ -9,6 +9,7 @@ import ( "io/ioutil" "log" "net/http" + "strconv" "appengine" "appengine/mail" @@ -50,11 +51,15 @@ func init() { router = mux.NewRouter() router.HandleFunc("/", indexHandler).Name("index") - router.HandleFunc("/digest/send", sendDigestHandler).Name("send-digest").Methods("POST") - router.HandleFunc("/digest/cron", digestCronHandler) + router.HandleFunc("/session/sign-in", signInHandler).Name("sign-in") router.HandleFunc("/session/sign-out", signOutHandler).Name("sign-out") router.HandleFunc("/github/callback", githubOAuthCallbackHandler) + + router.HandleFunc("/digest/send", sendDigestHandler).Name("send-digest").Methods("POST") + router.HandleFunc("/digest/cron", digestCronHandler) + + router.HandleFunc("/admin/digest", digestAdminHandler) http.Handle("/", router) } @@ -242,6 +247,39 @@ func githubOAuthCallbackHandler(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, indexUrl.String(), http.StatusFound) } +func digestAdminHandler(w http.ResponseWriter, r *http.Request) { + userId, err := strconv.Atoi(r.FormValue("user_id")) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + c := appengine.NewContext(r) + account, err := getAccount(c, userId) + if account == nil { + http.Error(w, "Couldn't find account", http.StatusNotFound) + return + } + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + oauthTransport := githubOAuthTransport(c) + oauthTransport.Token = &account.OAuthToken + githubClient := github.NewClient(oauthTransport.Client()) + + digest, err := newDigest(githubClient, account) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + var data = map[string]interface{}{ + "Digest": digest, + } + if err := templates.ExecuteTemplate(w, "digest-admin", data); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} + func githubOAuthTransport(c appengine.Context) *oauth.Transport { appengineTransport := &urlfetch.Transport{Context: c} cachingTransport := &CachingTransport{ diff --git a/app/templates/digest-admin.html b/app/templates/digest-admin.html new file mode 100644 index 0000000..1d329be --- /dev/null +++ b/app/templates/digest-admin.html @@ -0,0 +1,18 @@ +{{define "digest-admin"}} + + + + + + GitHop Admin + + + + +

GitHop Admin

+ + {{template "digest" .Digest}} + + + +{{end}}