-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrequests.go
112 lines (92 loc) · 2.51 KB
/
requests.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
package backend
import (
"encoding/json"
"io/ioutil"
"log"
"net/http"
"time"
"github.com/captainGeech42/hotline/internal/db"
"github.com/captainGeech42/hotline/internal/web/schema"
)
// GET /api/callback/requests
func getCbRequests(w http.ResponseWriter, r *http.Request) {
// read body bytes
body, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
w.WriteHeader(500)
return
}
reqResp := schema.GetCbRequestsResponse{}
// make sure there was a body
if len(body) == 0 {
reqResp.Error = true
reqResp.Message = "no JSON body provided"
w.WriteHeader(400)
sendResponse(w, reqResp)
return
}
// unmarshal the body
cbReqBody := schema.GetCbRequestsRequest{}
if err := json.Unmarshal(body, &cbReqBody); err != nil {
log.Println(err)
reqResp.Error = true
reqResp.Message = "failed to unmarshal request body"
w.WriteHeader(500)
sendResponse(w, reqResp)
return
}
var afterTs *time.Time
if cbReqBody.All {
afterTs = nil
} else {
afterTs = &cbReqBody.AfterTs
}
// get the dns requests from the db
dnsDbReqs := db.GetDnsRequests(cbReqBody.Name, afterTs)
dnsReqs := ConvertDnsDbToJson(&dnsDbReqs)
// get the http requests from the db
httpDbReqs := db.GetHttpRequests(cbReqBody.Name, afterTs)
httpReqs := ConvertHttpDbToJson(&httpDbReqs)
// build resp object
respBody := schema.GetCbRequestsResponse{}
respBody.Error = false
respBody.DnsRequests = *dnsReqs
respBody.HttpRequests = *httpReqs
sendResponse(w, respBody)
}
func ConvertDnsDbToJson(dnsReqs *[]db.DnsRequest) *[]schema.CbDnsRequest {
outArray := []schema.CbDnsRequest{}
for _, dbReq := range *dnsReqs {
outArray = append(outArray, schema.CbDnsRequest{
// https://github.com/golang/go/issues/9859
// if ^^ ever becomes a lang feature, this can be simplified
CbRequest: schema.CbRequest{
Timestamp: dbReq.CreatedAt,
SourceIP: dbReq.SourceIP,
},
QueryName: dbReq.QueryName,
QueryType: dbReq.QueryType,
})
}
return &outArray
}
func ConvertHttpDbToJson(httpReqs *[]db.HttpRequest) *[]schema.CbHttpRequest {
outArray := []schema.CbHttpRequest{}
for _, dbReq := range *httpReqs {
outArray = append(outArray, schema.CbHttpRequest{
// https://github.com/golang/go/issues/9859
// if ^^ ever becomes a lang feature, this can be simplified
CbRequest: schema.CbRequest{
Timestamp: dbReq.CreatedAt,
SourceIP: dbReq.SourceIP,
},
URI: dbReq.URI,
Host: dbReq.Host,
Method: dbReq.Method,
Headers: dbReq.Headers,
Body: dbReq.Body,
})
}
return &outArray
}