100 lines
1.9 KiB
Go
100 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"sync"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/viper"
|
|
"gitlab.dcso.lolcat/LABS/styx/broker"
|
|
"gitlab.dcso.lolcat/LABS/styx/graph"
|
|
"gitlab.dcso.lolcat/LABS/styx/matcher"
|
|
"gitlab.dcso.lolcat/LABS/styx/plugins"
|
|
)
|
|
|
|
func init() {
|
|
// Setting up logging.
|
|
logrus.SetFormatter(&logrus.TextFormatter{
|
|
FullTimestamp: true,
|
|
})
|
|
logrus.SetReportCaller(true)
|
|
viper.SetConfigName("config")
|
|
viper.SetConfigType("yaml")
|
|
viper.AddConfigPath(".")
|
|
}
|
|
|
|
func main() {
|
|
err := viper.ReadInConfig()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
os.Setenv("SHODAN_KEY", viper.GetString("shodan.key"))
|
|
logrus.Info("Starting to get data from the Internet...")
|
|
|
|
logrus.Info("Initializing Kafka...")
|
|
_, err = broker.SetUpKafkaConnecter()
|
|
if err != nil {
|
|
logrus.WithField("err", err).Error("error initialising kafka")
|
|
}
|
|
logrus.Info("done")
|
|
|
|
logrus.Info("Initializing Dgraph...")
|
|
dgraphClient, err := graph.ConnectToDgraph()
|
|
if err != nil {
|
|
logrus.WithField("err", err).Error("error initialising the graph database")
|
|
}
|
|
logrus.Info("done")
|
|
|
|
// stop channel
|
|
stopChan := make(chan os.Signal)
|
|
var wg sync.WaitGroup
|
|
|
|
// go broker.ReadEventFromKafka()
|
|
|
|
// certstream
|
|
c := plugins.CertStreamPlugin{}
|
|
if ok := c.Initialize(); !ok {
|
|
logrus.Info("certstream plugin not activated")
|
|
} else {
|
|
c.Run(&wg, dgraphClient)
|
|
}
|
|
|
|
// pastebin
|
|
p := plugins.PastebinPlugin{}
|
|
if ok := p.Initialize(); !ok {
|
|
logrus.Info("pastebin plugin not activated")
|
|
} else {
|
|
p.Run(&wg, dgraphClient)
|
|
}
|
|
|
|
// shodan
|
|
s := plugins.ShodanPlugin{}
|
|
if ok := s.Initialize(); !ok {
|
|
logrus.Info("shodan plugin not activated")
|
|
} else {
|
|
s.Run(&wg, dgraphClient)
|
|
}
|
|
|
|
// main matcher
|
|
m := matcher.Matcher{}
|
|
if ok := m.Initialize(); !ok {
|
|
logrus.Info("matcher is not activated")
|
|
} else {
|
|
m.Run(&wg, dgraphClient)
|
|
}
|
|
|
|
go func() {
|
|
<-stopChan
|
|
logrus.Info("Shutting down...")
|
|
c.Stop(&wg)
|
|
p.Stop(&wg)
|
|
s.Stop(&wg)
|
|
m.Stop(&wg)
|
|
}()
|
|
|
|
wg.Wait()
|
|
logrus.Info("done")
|
|
|
|
}
|