1
0
Fork 0

Refactor server sessions

This commit is contained in:
Gregory Eremin 2015-03-06 19:36:35 +07:00
parent e7a2494305
commit 9f36068c54
6 changed files with 48 additions and 37 deletions

View File

@ -9,23 +9,23 @@ import (
) )
var ( var (
conn *sqlx.DB db *sqlx.DB
) )
func Connect(params string) (err error) { func Connect(params string) (err error) {
conn, err = sqlx.Connect("mysql", params) db, err = sqlx.Connect("mysql", params)
conn.Mapper = reflectx.NewMapperFunc("json", strings.ToLower) db.Mapper = reflectx.NewMapperFunc("json", strings.ToLower)
return return
} }
func mustExecN(query string, arg interface{}) { func mustExecN(query string, arg interface{}) {
if _, err := conn.NamedExec(query, arg); err != nil { if _, err := db.NamedExec(query, arg); err != nil {
panic(err) panic(err)
} }
} }
func mustSelect(dest interface{}, query string, args ...interface{}) { func mustSelect(dest interface{}, query string, args ...interface{}) {
if err := conn.Select(dest, query, args...); err != nil { if err := db.Select(dest, query, args...); err != nil {
panic(err) panic(err)
} }
} }

View File

@ -7,7 +7,7 @@ import (
) )
func apiOrgsHandler(w http.ResponseWriter, r *http.Request) { func apiOrgsHandler(w http.ResponseWriter, r *http.Request) {
login := currentUser(r) login := sessionUser(r)
orgs := db.UserOrgs(login) orgs := db.UserOrgs(login)
respondWith(w, orgs) respondWith(w, orgs)
} }

15
server/app.go Normal file
View File

@ -0,0 +1,15 @@
package server
import (
"net/http"
)
func appHelloHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html; charset=utf8")
helloTmpl.ExecuteTemplate(w, "hello", map[string]interface{}{})
}
func appAppHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html; charset=utf8")
appTmpl.ExecuteTemplate(w, "app", map[string]interface{}{})
}

View File

@ -1,7 +1,7 @@
package server package server
import ( import (
"fmt" "log"
"net/http" "net/http"
"net/url" "net/url"
@ -9,11 +9,6 @@ import (
"github.com/localhots/empact/task" "github.com/localhots/empact/task"
) )
func authHelloHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html; charset=utf8")
helloTmpl.ExecuteTemplate(w, "hello", map[string]interface{}{})
}
func authSigninHandler(w http.ResponseWriter, r *http.Request) { func authSigninHandler(w http.ResponseWriter, r *http.Request) {
params := url.Values{} params := url.Values{}
params.Set("client_id", config.C().ClientID) params.Set("client_id", config.C().ClientID)
@ -25,20 +20,20 @@ func authSigninHandler(w http.ResponseWriter, r *http.Request) {
func authCallbackHandler(w http.ResponseWriter, r *http.Request) { func authCallbackHandler(w http.ResponseWriter, r *http.Request) {
if r.FormValue("error") != "" { if r.FormValue("error") != "" {
w.Write([]byte(r.FormValue("error_description"))) w.Write([]byte(r.FormValue("error_description")))
} else { return
code := r.FormValue("code") }
fmt.Println("Got code: ", code)
if _, login, err := task.Authenticate(code); err == nil { code := r.FormValue("code")
authorize(r, login) log.Println("Got code: ", code)
} else { if _, login, err := task.Authenticate(code); err == nil {
panic(err) createSession(r, login)
} } else {
panic(err)
} }
} }
func authHandler(w http.ResponseWriter, r *http.Request) { func authHandler(w http.ResponseWriter, r *http.Request) {
if currentUser(r) == "" { if sessionUser(r) == "" {
http.Redirect(w, r, "/auth/hello", 302) http.Redirect(w, r, "/auth/hello", 302)
} }
} }

View File

@ -23,13 +23,14 @@ func init() {
http.Handle("/app/", http.StripPrefix("/app/", http.FileServer(box.HTTPBox()))) http.Handle("/app/", http.StripPrefix("/app/", http.FileServer(box.HTTPBox())))
http.HandleFunc("/", sessionHandler) http.HandleFunc("/", sessionHandler)
http.HandleFunc("/hello", appHelloHandler)
http.HandleFunc("/app", appAppHandler)
http.HandleFunc("/auth/signin", authSigninHandler)
http.HandleFunc("/auth/callback", authCallbackHandler)
http.HandleFunc("/api/", authHandler) http.HandleFunc("/api/", authHandler)
http.HandleFunc("/api/orgs", apiOrgsHandler) http.HandleFunc("/api/orgs", apiOrgsHandler)
http.HandleFunc("/api/teams", apiTeamsHandler) http.HandleFunc("/api/teams", apiTeamsHandler)
http.HandleFunc("/api/repos", apiReposHandler) http.HandleFunc("/api/repos", apiReposHandler)
http.HandleFunc("/auth/hello", authHelloHandler)
http.HandleFunc("/auth/signin", authSigninHandler)
http.HandleFunc("/auth/callback", authCallbackHandler)
} }
func Start() { func Start() {

View File

@ -9,21 +9,17 @@ import (
) )
const ( const (
sessionCookie = "session_id" cookieName = "session_id"
) )
var ( var (
redisC = redis.NewPool(dialRedis, 10) redisPool = redis.NewPool(dialRedis, 10)
) )
func dialRedis() (redis.Conn, error) {
return redis.Dial("tcp", ":6379")
}
func sessionHandler(w http.ResponseWriter, r *http.Request) { func sessionHandler(w http.ResponseWriter, r *http.Request) {
if cook, err := r.Cookie(sessionCookie); err != nil { if cook, err := r.Cookie(cookieName); err != nil {
cook = &http.Cookie{ cook = &http.Cookie{
Name: sessionCookie, Name: cookieName,
Value: uuid.New(), Value: uuid.New(),
Path: "/", Path: "/",
Expires: time.Now().Add(365 * 24 * time.Hour), Expires: time.Now().Add(365 * 24 * time.Hour),
@ -33,16 +29,20 @@ func sessionHandler(w http.ResponseWriter, r *http.Request) {
} }
} }
func createSession(r *http.Request, login string) {
redisPool.Get().Do("HSET", "sessions", sessionID(r), login)
}
func sessionID(r *http.Request) string { func sessionID(r *http.Request) string {
cook, _ := r.Cookie(sessionCookie) cook, _ := r.Cookie(cookieName)
return cook.Value return cook.Value
} }
func currentUser(r *http.Request) (login string) { func sessionUser(r *http.Request) (login string) {
login, _ = redis.String(redisC.Get().Do("HGET", "sessions", sessionID(r))) login, _ = redis.String(redisPool.Get().Do("HGET", "sessions", sessionID(r)))
return return
} }
func authorize(r *http.Request, login string) { func dialRedis() (redis.Conn, error) {
redisC.Get().Do("HSET", "sessions", sessionID(r), login) return redis.Dial("tcp", ":6379")
} }