From 7ac9bee09806282ee81fe057e1fe3157f11b4f50 Mon Sep 17 00:00:00 2001 From: Dan Sosedoff Date: Fri, 31 Oct 2014 22:37:58 -0500 Subject: [PATCH] Add API method to connect to server with given url --- api.go | 30 ++++++++++++++++++++++++++++++ client.go | 10 ++++++++++ main.go | 1 + 3 files changed, 41 insertions(+) diff --git a/api.go b/api.go index 0a9a09e..9d54148 100644 --- a/api.go +++ b/api.go @@ -34,6 +34,36 @@ func API_Home(c *gin.Context) { c.Data(200, "text/html; charset=utf-8", data) } +func API_Connect(c *gin.Context) { + url := c.Request.FormValue("url") + + if url == "" { + c.JSON(400, Error{"Url parameter is required"}) + return + } + + client, err := NewClientFromUrl(url) + if err != nil { + c.JSON(400, Error{err.Error()}) + return + } + + err = client.Test() + if err != nil { + c.JSON(400, Error{err.Error()}) + return + } + + info, err := client.Info() + + if err == nil { + dbClient.db.Close() + dbClient = client + } + + c.JSON(200, info.Format()[0]) +} + func API_GetDatabases(c *gin.Context) { names, err := dbClient.Databases() diff --git a/client.go b/client.go index fa40785..863d7bc 100644 --- a/client.go +++ b/client.go @@ -32,6 +32,16 @@ func NewClient() (*Client, error) { return &Client{db: db}, nil } +func NewClientFromUrl(url string) (*Client, error) { + db, err := sqlx.Open("postgres", url) + + if err != nil { + return nil, err + } + + return &Client{db: db}, nil +} + func (client *Client) Test() error { return client.db.Ping() } diff --git a/main.go b/main.go index 5bed99d..fe8f907 100644 --- a/main.go +++ b/main.go @@ -114,6 +114,7 @@ func startServer() { } router.GET("/", API_Home) + router.POST("/connect", API_Connect) router.GET("/databases", API_GetDatabases) router.GET("/info", API_Info) router.GET("/tables", API_GetTables)