This repository has been archived by the owner on Nov 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
lp_connector.go
128 lines (93 loc) · 3.27 KB
/
lp_connector.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package liquidplanner
import (
"bytes"
"encoding/json"
"errors"
"io"
"io/ioutil"
"net/http"
"strconv"
)
//------------------------------------------------------------------------------
//-- Structure to hold a response
//------------------------------------------------------------------------------
type LpResponse struct {
Response *http.Response
Body string
Error error
}
//------------------------------------------------------------------------------
//-- Fetch a request from LiquidPlanner
//------------------------------------------------------------------------------
func Fetch( method, urlStr string, data interface{} ) ( LpResponse ) {
var body io.Reader
if data != nil {
b, _ := json.Marshal( data )
body = bytes.NewBuffer( b )
} else {
body = nil
}
req := request( method, urlStr, body )
if data != nil {
req.Header.Add( "Content-Type", "application/json" )
}
return ProcessRequest( req )
}
//------------------------------------------------------------------------------
//-- Fetch a request from LiquidPlanner and create a model from the response
//------------------------------------------------------------------------------
func FetchJson( method, urlStr string,
data interface{}, rs interface{} ) ( res LpResponse ) {
res = Fetch( method, urlStr, data )
json.Unmarshal( []byte(res.Body), &rs )
return
}
//------------------------------------------------------------------------------
//-- Create and authenticated request
//------------------------------------------------------------------------------
func request( method, urlStr string, body io.Reader ) ( req *http.Request ) {
fullUrl := "https://app.liquidplanner.com/api/" + urlStr
req, err := http.NewRequest( method, fullUrl, body )
if ( err != nil ) { return nil }
return req
}
//------------------------------------------------------------------------------
//-- Handle the result
//------------------------------------------------------------------------------
func ProcessRequest( req *http.Request ) ( LpResponse ) {
client := &http.Client { }
req.SetBasicAuth( username, password )
resp, err := client.Do( req )
defer resp.Body.Close()
var lp_response LpResponse
lp_response.Response = resp
if err != nil {
lp_response.Error = err
} else if resp.StatusCode >= 300 {
lp_response.Error = errors.New( resp.Status )
}
if b, err := ioutil.ReadAll(resp.Body); err == nil {
lp_response.Body = string(b)
}
return lp_response
}
//------------------------------------------------------------------------------
//-- Username and password
//------------------------------------------------------------------------------
var username string
var password string
func Login( user string, pass string ) {
username = user
password = pass
}
//------------------------------------------------------------------------------
//-- Space Id accessors
//------------------------------------------------------------------------------
var lp_space_id string
func SetSpaceId( spaceId int32 ) {
lp_space_id = strconv.FormatInt(int64(spaceId), 10)
}
func SetSpace( space Workspace ) {
lp_space_id = strconv.FormatInt(int64(space.Id), 10)
}
//------------------------------------------------------------------------------