Files
blackbox/pkg/crypters/crypters.go
Tom Limoncelli 1c77c87555 Implement blackbox in Golang (#250)
* Initial release
2020-07-24 14:21:33 -04:00

59 lines
1.2 KiB
Go

package crypters
import (
"sort"
"strings"
"github.com/StackExchange/blackbox/v2/models"
)
// Crypter is the handle
type Crypter interface {
models.Crypter
}
// NewFnSig function signature needed by reg.
type NewFnSig func(debug bool) (Crypter, error)
// Item stores one item
type Item struct {
Name string
New NewFnSig
Priority int
}
// Catalog is the list of registered vcs's.
var Catalog []*Item
// SearchByName returns a Crypter handle for name.
// The search is case insensitive.
func SearchByName(name string, debug bool) Crypter {
name = strings.ToLower(name)
for _, v := range Catalog {
//fmt.Printf("Trying %v %v\n", v.Name)
if strings.ToLower(v.Name) == name {
chandle, err := v.New(debug)
if err != nil {
return nil // No idea how that would happen.
}
//fmt.Printf("USING! %v\n", v.Name)
return chandle
}
}
return nil
}
// Register a new VCS.
func Register(name string, priority int, newfn NewFnSig) {
//fmt.Printf("CRYPTER registered: %v\n", name)
item := &Item{
Name: name,
New: newfn,
Priority: priority,
}
Catalog = append(Catalog, item)
// Keep the list sorted.
sort.Slice(Catalog, func(i, j int) bool { return Catalog[j].Priority < Catalog[i].Priority })
}