mirror of
https://github.com/outbackdingo/xmidt.git
synced 2026-01-28 10:20:52 +00:00
144 lines
4.1 KiB
Go
144 lines
4.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/xmidt-org/wrp-go/wrp"
|
|
)
|
|
|
|
const (
|
|
AuthHeaderName = "Authorization"
|
|
TypeHeaderName = "X-Xmidt-Message-Type"
|
|
ContentHeaderName = "X-Xmidt-Content-Type"
|
|
TransIdHeaderName = "X-Xmidt-Transaction-Uuid"
|
|
SourceHeaderName = "X-Xmidt-Source"
|
|
DestHeaderName = "X-Webpa-Device-Name"
|
|
PathURL = "https://api.xmidt.comcast.net/api/v2/device"
|
|
ContentType = "Content-Type"
|
|
XScytaleBuild = "X-Scytale-Build"
|
|
//XmidtStatus = "X-Xmidt-Status"
|
|
XScytaleFlavor = "X-Scytale-Flavor"
|
|
XScytaleRegion = "X-Scytale-Region"
|
|
XScytaleServer = "X-Scytale-Server"
|
|
)
|
|
|
|
var auth string
|
|
|
|
func makeRequest(requestType, messageType, source, transId, dest, contentType, payload string, client *http.Client) {
|
|
|
|
headers := make(map[string]string)
|
|
|
|
headers[AuthHeaderName] = auth
|
|
var req *http.Request
|
|
var err error
|
|
|
|
if "POST" == requestType {
|
|
headers[TypeHeaderName] = messageType
|
|
headers[ContentHeaderName] = contentType
|
|
headers[TransIdHeaderName] = transId
|
|
headers[SourceHeaderName] = source
|
|
headers[DestHeaderName] = dest
|
|
|
|
req, err = http.NewRequest(requestType, PathURL, bytes.NewBufferString(payload))
|
|
}
|
|
|
|
if err != nil {
|
|
fmt.Printf("Request %s failed: %s, %v\n", requestType, PathURL, err)
|
|
}
|
|
|
|
for k, v := range headers {
|
|
req.Header.Set(k, v)
|
|
}
|
|
|
|
resp, err := client.Do(req)
|
|
|
|
if err != nil {
|
|
fmt.Printf("Failed to obtain request: %v\n", err)
|
|
} else {
|
|
|
|
if 200 != resp.StatusCode {
|
|
fmt.Printf("Failed. resp.StatusCode %v \n", resp.StatusCode)
|
|
} else if 200 == resp.StatusCode {
|
|
/*Decode Msgpack response to JSON format*/
|
|
decoder := wrp.NewDecoder(resp.Body, wrp.Msgpack)
|
|
var buffer bytes.Buffer
|
|
encoder := wrp.NewEncoder(&buffer, wrp.JSON)
|
|
|
|
if message, err := wrp.TranscodeMessage(encoder, decoder); err != nil {
|
|
fmt.Println("Error while converting:", wrp.Msgpack, "to", wrp.JSON, err)
|
|
} else {
|
|
//Headers
|
|
fmt.Println(ContentType, ":", resp.Header.Get(ContentType))
|
|
//fmt.Println(XmidtStatus, ":", resp.Header.Get(XmidtStatus))
|
|
fmt.Println(XScytaleBuild, ":", resp.Header.Get(XScytaleBuild))
|
|
fmt.Println(XScytaleFlavor, ":", resp.Header.Get(XScytaleFlavor))
|
|
fmt.Println(XScytaleRegion, ":", resp.Header.Get(XScytaleRegion))
|
|
fmt.Println(XScytaleServer, ":", resp.Header.Get(XScytaleServer))
|
|
//Response from cloud
|
|
fmt.Println("WRP response", string(buffer.Bytes()))
|
|
fmt.Println("payload :", string(message.Payload))
|
|
}
|
|
|
|
} else {
|
|
fmt.Println("Request failed with status ", resp.StatusCode)
|
|
}
|
|
io.Copy(ioutil.Discard, resp.Body)
|
|
resp.Body.Close()
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
if "" == os.Getenv("WEBPA_SAT") {
|
|
fmt.Printf("Environment variable WEBPA_SAT must be set a valid SAT token.")
|
|
return
|
|
}
|
|
|
|
auth = "Bearer " + os.Getenv("WEBPA_SAT")
|
|
|
|
var maxConnReuse uint
|
|
var requestType, messageType, source, dest, contentType, transId, payload string
|
|
|
|
flag.StringVar(&messageType, "messageType", "", "type of the request to send")
|
|
flag.StringVar(&payload, "payload", "", "the payload to send to apply")
|
|
flag.StringVar(&source, "source", "", "source value for CRUD operations")
|
|
flag.StringVar(&dest, "dest", "", "CRUD dest value to apply")
|
|
flag.StringVar(&transId, "transId", "", "transId for CRUD operations")
|
|
flag.StringVar(&contentType, "contentType", "", "contentType for CRUD operations")
|
|
flag.UintVar(&maxConnReuse, "max-reuse", 100, "the maximum number of connection re-use attempts -- (advanced)")
|
|
|
|
flag.Parse()
|
|
|
|
if "" == messageType {
|
|
fmt.Printf("Please provide messageType option\n")
|
|
return
|
|
} else if "" != messageType {
|
|
requestType = "POST"
|
|
if "Create" == messageType || "Update" == messageType {
|
|
if "" == payload {
|
|
fmt.Printf("Please provide payload option\n")
|
|
return
|
|
}
|
|
}
|
|
|
|
if "" == source || "" == dest || "" == transId || "" == contentType {
|
|
fmt.Printf("Please provide the required arguments: source, dest, transId, contentType\n")
|
|
return
|
|
}
|
|
}
|
|
|
|
client := &http.Client{
|
|
Transport: &http.Transport{
|
|
MaxIdleConnsPerHost: int(maxConnReuse),
|
|
},
|
|
}
|
|
|
|
makeRequest(requestType, messageType, source, transId, dest, contentType, payload, client)
|
|
|
|
}
|