First implementation of certnode

This commit is contained in:
Christopher Talib 2020-02-04 10:22:48 +01:00
parent f0f6457dd3
commit 00bfb5eaaf
2 changed files with 60 additions and 0 deletions

View file

@ -23,6 +23,32 @@ func BuildNode(flag string, dataType string, data string) *Node {
}
}
// BuildCertNode builds a custom node based on CertStream.
func BuildCertNode(rawNode *CertStreamWrapper) *CertNode {
return &CertNode{
Fingerprint: rawNode.Data.Data.LeafCert.Fingerprint,
NotBefore: time.Unix(int64(rawNode.Data.Data.LeafCert.NotBefore), 0).Format(time.RFC3339),
NotAfter: time.Unix(int64(rawNode.Data.Data.LeafCert.NotAfter), 0).Format(time.RFC3339),
CN: rawNode.Data.Data.LeafCert.Subject.CN,
SourceName: rawNode.Data.Data.Source.Name,
BasicConstraints: rawNode.Data.Data.LeafCert.Extensions.BasicConstrains,
RawUUID: rawNode.ID,
}
}
// CertNode represents our custom struct of data extraction from CertStream.
type CertNode struct {
Fingerprint string `json:"fingerprint"`
NotBefore string `json:"notBefore"`
NotAfter string `json:"notAfter"`
CN string `json:"cn"`
SourceName string `json:"sourceName"`
SerialNumber string `json:"serialNumber"`
BasicConstraints string `json:"basicConstraints"`
RawUUID string `json:"rawUUID"`
}
// WrapCertStreamData is a wrapper around CertStreamStruct.
func WrapCertStreamData(data CertStreamStruct) *CertStreamWrapper {
t := time.Now()
rfc3339time := t.Format(time.RFC3339)
@ -48,6 +74,7 @@ func BuildEdge(source string, nodeOneUUID string, nodeTwoUUID string) *Edge {
}
}
// SavePaste saves a object received from PasteBin.
func SavePaste(filename string, data *PasteWrapper) {
err := utils.FileExists(filename)
if err != nil {
@ -77,6 +104,7 @@ func SavePaste(filename string, data *PasteWrapper) {
}
}
// SaveRaw save the raw CertStream data.
func SaveRaw(filename string, data *CertStreamWrapper) {
err := utils.FileExists(filename)
if err != nil {
@ -105,6 +133,35 @@ func SaveRaw(filename string, data *CertStreamWrapper) {
}
}
// SaveCertNode saves a CertNode to a json file.
func SaveCertNode(filename string, node *CertNode) {
err := utils.FileExists(filename)
if err != nil {
logrus.Error(err)
}
nodeFile, err := ioutil.ReadFile(filename)
if err != nil {
logrus.Error(err)
}
nodeDatas := []CertNode{}
if err := json.Unmarshal(nodeFile, &nodeDatas); err != nil {
logrus.Error(err)
}
nodeDatas = append(nodeDatas, *node)
nodeBytes, err := json.Marshal(nodeDatas)
if err != nil {
logrus.Error(err)
}
err = ioutil.WriteFile(filename, nodeBytes, 0644)
if err != nil {
logrus.Error(err)
}
}
// SaveNode saves a node to a file.
func SaveNode(filename string, node *Node) {
err := utils.FileExists(filename)

View file

@ -12,6 +12,7 @@ import (
"github.com/sirupsen/logrus"
)
// PasteWrapper is a node from PasteBin.
type PasteWrapper struct {
ID string `json:"id"`
Type string `json:"type"`
@ -20,6 +21,7 @@ type PasteWrapper struct {
Modified string `json:"modified"`
}
// FullPaste wrape meta and information from Pastebin.
type FullPaste struct {
Meta PasteMeta `json:"meta"`
Full string `json:"full"`
@ -116,6 +118,7 @@ func FetchPaste(paste PasteMeta) (string, error) {
return string(body), nil
}
// BuildPasteNode builds a node from a FullPaste data.
func BuildPasteNode(data *FullPaste) *PasteWrapper {
t := time.Now()
rfc3339time := t.Format(time.RFC3339)