styx/graph/main.go

136 lines
1.9 KiB
Go

package graph
import (
"context"
"github.com/dgraph-io/dgo/v2"
"github.com/dgraph-io/dgo/v2/protos/api"
"google.golang.org/grpc"
)
func ConnectToDgraph() (*dgo.Dgraph, error) {
conn, err := grpc.Dial("localhost:9080", grpc.WithInsecure())
if err != nil {
return nil, err
}
dgraphClient := dgo.NewDgraphClient(api.NewDgraphClient(conn))
err = setupDgraphSchema(dgraphClient)
if err != nil {
return nil, err
}
return dgraphClient, nil
}
func setupDgraphSchema(c *dgo.Dgraph) error {
err := c.Alter(context.Background(), &api.Operation{
DropOp: api.Operation_ALL,
})
if err != nil {
return err
}
err = c.Alter(context.Background(), &api.Operation{
Schema: `
id: string @index(term) .
type: string @index(term) .
ndata: string .
nodeOne: uid .
nodeTwo: uid .
subNode: uid .
sourceName: string @index(term) .
timestamp: string .
created: string .
modified: string .
cert_node: uid .
type Node {
id: string
type: string
ndata: string
created: string
modified: string
cert_node: CertNode
}
type Edge {
id: string
nodeOne: uid
nodeTwo: uid
timestamp: string
sourceName: string
}
fingerprint: string .
notBefore: string .
notAfter: string .
cn: string .
sourceName: string .
serialNumber: string .
basicConstraints: string .
chain: [uid].
csdata: uid .
raw: uid .
type CertNode {
id: string
fingerprint: string
notBefore: string
notAfter: string
cn: string
sourceName: string
serialNumber: string
basicConstraints: string
raw: CertRaw
chain: CertNode
}
type CertRaw {
id: string
type: string
created: string
modified: string
csdata: string
}
type PasteNode {
id: string
type: string
created: string
modified: string
ndata: uid
}
meta: uid .
full: string .
type FullPaste {
meta: PasteNode
full: string
}
type ShodanNode {
id: string
type: string
ndata: string
created: string
modified: string
}
type BalboaNode {
id: string
type: string
ndata: string
created: string
modified: string
}
`})
if err != nil {
return err
}
return nil
}