From 11de8de558145c583f9ab44e784f76bd1d113ed6 Mon Sep 17 00:00:00 2001 From: leo Date: Fri, 26 May 2023 01:59:09 +0200 Subject: [PATCH] go: add local breach data schema --- go.mod | 2 +- go.sum | 1 + modules/localbreach/breach.go | 50 +++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 modules/localbreach/breach.go diff --git a/go.mod b/go.mod index ab885a8..665061f 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( golang.org/x/crypto v0.6.0 golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53 golang.org/x/time v0.3.0 + gopkg.in/yaml.v2 v2.4.0 ) require ( @@ -47,7 +48,6 @@ require ( golang.org/x/sys v0.7.0 // indirect golang.org/x/text v0.9.0 // indirect golang.org/x/tools v0.6.1-0.20230222164832-25d2519c8696 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect lukechampine.com/uint128 v1.2.0 // indirect modernc.org/cc/v3 v3.40.0 // indirect modernc.org/ccgo/v3 v3.16.13 // indirect diff --git a/go.sum b/go.sum index f934e8a..3fb8312 100644 --- a/go.sum +++ b/go.sum @@ -150,6 +150,7 @@ golang.org/x/tools v0.6.1-0.20230222164832-25d2519c8696/go.mod h1:Xwgl3UAJ/d3gWu google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= diff --git a/modules/localbreach/breach.go b/modules/localbreach/breach.go new file mode 100644 index 0000000..a9e6167 --- /dev/null +++ b/modules/localbreach/breach.go @@ -0,0 +1,50 @@ +// Copyright 2023 wanderer +// SPDX-License-Identifier: AGPL-3.0-only + +package localbreach + +import ( + "io/ioutil" + "time" + + "gopkg.in/yaml.v2" +) + +type BreachDataSchema struct { + Name string `yaml:"name" validate:"required,name"` + Time time.Time `yaml:"time"` + IsVerified bool `yaml:"isVerified"` + ContainsPasswords bool `yaml:"containsPasswds"` + ContainsHashes bool `yaml:"containsHashes"` + HashType string `yaml:"hashType"` + HashSalted bool `yaml:"hashSalted"` + ContainsUsernames bool `yaml:"containsUsernames"` + ContainsEmails bool `yaml:"containsEmails"` + Data any `yaml:"data"` +} + +// Load loads local breach data. +func Load(path string) (*BreachDataSchema, error) { + b, err := ioutil.ReadFile(path) + if err != nil { + return nil, err + } + + localBreach, err := loadLocalBreach(b) + if err != nil { + return nil, err + } + + return localBreach, nil +} + +func loadLocalBreach(b []byte) (*BreachDataSchema, error) { + localBreach := new(BreachDataSchema) + + err := yaml.Unmarshal(b, localBreach) + if err != nil { + return nil, err + } + + return localBreach, nil +}