diff pkg/controllers/json.go @ 486:b2dc9c2f69e0 metamorph-for-all

First stab to use the metamorphic db to do all database stuff.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 24 Aug 2018 13:56:06 +0200
parents c1047fd04a3a
children 8a0737aa6ab6
line wrap: on
line diff
--- a/pkg/controllers/json.go	Fri Aug 24 12:14:56 2018 +0200
+++ b/pkg/controllers/json.go	Fri Aug 24 13:56:06 2018 +0200
@@ -19,7 +19,8 @@
 
 type JSONHandler struct {
 	Input  func() interface{}
-	Handle func(interface{}, *http.Request, *sql.DB) (JSONResult, error)
+	Handle func(interface{}, *http.Request, *sql.Conn) (JSONResult, error)
+	NoConn bool
 }
 
 type JSONError struct {
@@ -46,11 +47,15 @@
 	var jr JSONResult
 	var err error
 
-	if token, ok := auth.GetToken(req); ok {
-		err = auth.ConnPool.Do(token, func(db *sql.DB) (err error) {
-			jr, err = j.Handle(input, req, db)
-			return err
-		})
+	if token, ok := auth.GetToken(req); ok && !j.NoConn {
+		var session *auth.Session
+		if session, err = auth.ConnPool.Do(token); err != nil {
+			var conn *sql.Conn
+			if conn, err = auth.MetamorphConn(req.Context(), session.User); err != nil {
+				defer conn.Close()
+				jr, err = j.Handle(input, req, conn)
+			}
+		}
 	} else {
 		jr, err = j.Handle(input, req, nil)
 	}