go: add local breach data schema
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
leo 2023-05-26 01:59:09 +02:00
parent ff68a7dbe3
commit 11de8de558
Signed by: wanderer
SSH Key Fingerprint: SHA256:Dp8+iwKHSlrMEHzE3bJnPng70I7LEsa3IJXRH/U+idQ
3 changed files with 52 additions and 1 deletions

2
go.mod
View File

@ -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

1
go.sum
View File

@ -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=

View File

@ -0,0 +1,50 @@
// Copyright 2023 wanderer <a_mirre at utb dot cz>
// 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
}