2020-01-14 09:43:12 +01:00
|
|
|
package main
|
|
|
|
|
2020-01-14 14:49:14 +01:00
|
|
|
import (
|
2020-01-15 16:46:13 +01:00
|
|
|
"fmt"
|
|
|
|
|
2020-01-14 14:49:14 +01:00
|
|
|
"github.com/CaliDog/certstream-go"
|
2020-01-16 15:56:57 +01:00
|
|
|
"github.com/sirupsen/logrus"
|
2020-01-29 10:03:52 +01:00
|
|
|
"gitlab.dcso.lolcat/LABS/styx/broker"
|
2020-01-14 16:31:57 +01:00
|
|
|
"gitlab.dcso.lolcat/LABS/styx/models"
|
2020-01-14 14:49:14 +01:00
|
|
|
)
|
|
|
|
|
2020-01-14 09:43:12 +01:00
|
|
|
func main() {
|
2020-01-14 14:49:14 +01:00
|
|
|
// The false flag specifies that we want heartbeat messages.
|
|
|
|
stream, errStream := certstream.CertStreamEventStream(false)
|
2020-01-15 16:46:13 +01:00
|
|
|
fmt.Println("Starting to get data from CertStream...")
|
2020-01-29 10:03:52 +01:00
|
|
|
Conn, err := broker.SetUpKafkaConnecter()
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
go broker.ReadEventFromKafka()
|
2020-01-29 11:05:05 +01:00
|
|
|
// certstream
|
2020-01-14 14:49:14 +01:00
|
|
|
for {
|
|
|
|
select {
|
|
|
|
case jq := <-stream:
|
2020-01-28 16:00:56 +01:00
|
|
|
if data, err := models.ExtractCertFromStream(jq); err == nil {
|
2020-01-23 13:13:59 +01:00
|
|
|
|
2020-01-29 12:47:01 +01:00
|
|
|
rawNode := models.WrapCertStreamData(*data)
|
|
|
|
models.SaveRaw("raw_certstream.json", rawNode)
|
|
|
|
|
2020-01-29 10:03:52 +01:00
|
|
|
fingerprintNode := models.BuildNode("certstream", "fingerprint", data.Data.LeafCert.Fingerprint)
|
2020-01-29 12:47:01 +01:00
|
|
|
models.SaveNode("nodes.json", fingerprintNode)
|
|
|
|
models.BuildEdge("certstream", rawNode.ID, fingerprintNode.ID)
|
2020-01-28 23:52:24 +01:00
|
|
|
fmt.Println(fingerprintNode)
|
|
|
|
allDomains := data.Data.LeafCert.AllDomains
|
|
|
|
var edge *models.Edge
|
|
|
|
for _, domain := range allDomains {
|
2020-01-29 10:03:52 +01:00
|
|
|
domainNode := models.BuildNode("certstream", "domain", domain)
|
2020-01-29 12:47:01 +01:00
|
|
|
models.SaveNode("nodes.json", domainNode)
|
2020-01-28 23:52:24 +01:00
|
|
|
edge = models.BuildEdge("certstream", fingerprintNode.ID, domainNode.ID)
|
|
|
|
fmt.Println(edge)
|
|
|
|
models.SaveEdge(edge)
|
|
|
|
|
|
|
|
}
|
2020-01-29 10:03:52 +01:00
|
|
|
broker.SendEventToKafka(Conn, *fingerprintNode)
|
2020-01-14 16:31:57 +01:00
|
|
|
}
|
|
|
|
|
2020-01-14 14:49:14 +01:00
|
|
|
case err := <-errStream:
|
2020-01-16 15:56:57 +01:00
|
|
|
logrus.Error(err)
|
2020-01-14 14:49:14 +01:00
|
|
|
}
|
|
|
|
}
|
2020-01-29 11:05:05 +01:00
|
|
|
|
|
|
|
// pastebin
|
2020-01-14 09:43:12 +01:00
|
|
|
}
|