136 lines
1.9 KiB
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
|
|
}
|