go-spectre/template.go

111 lines
2.0 KiB
Go

package spectre
import (
"fmt"
"strings"
)
// Template is a template type
type Template string
const (
Maximum Template = "Maximum"
Long Template = "Long"
Medium Template = "Medium"
Short Template = "Short"
Pin Template = "PIN"
Name Template = "Name"
Phrase Template = "Phrase"
Basic Template = "Basic"
)
// ParseTemplate parses a Template from s
func ParseTemplate(s string) (Template, error) {
switch strings.ToLower(s) {
case "maximum", "max":
return Maximum, nil
case "long", "l":
return Long, nil
case "medium", "med":
return Medium, nil
case "short", "sh":
return Short, nil
case "pin":
return Pin, nil
case "name":
return Name, nil
case "phrase":
return Phrase, nil
case "basic":
return Basic, nil
default:
return "", fmt.Errorf("unknown Template %q; available [maximum, long, medium, short, pin, name, phrase, basic]", s)
}
}
var templates = map[Template][]string{
Maximum: {
"anoxxxxxxxxxxxxxxxxx",
"axxxxxxxxxxxxxxxxxno",
},
Long: {
"CvcvnoCvcvCvcv",
"CvcvCvcvnoCvcv",
"CvcvCvcvCvcvno",
"CvccnoCvcvCvcv",
"CvccCvcvnoCvcv",
"CvccCvcvCvcvno",
"CvcvnoCvccCvcv",
"CvcvCvccnoCvcv",
"CvcvCvccCvcvno",
"CvcvnoCvcvCvcc",
"CvcvCvcvnoCvcc",
"CvcvCvcvCvccno",
"CvccnoCvccCvcv",
"CvccCvccnoCvcv",
"CvccCvccCvcvno",
"CvcvnoCvccCvcc",
"CvcvCvccnoCvcc",
"CvcvCvccCvccno",
"CvccnoCvcvCvcc",
"CvccCvcvnoCvcc",
"CvccCvcvCvccno",
},
Medium: {
"CvcnoCvc",
"CvcCvcno",
},
Short: {
"Cvcn",
},
Pin: {
"nnnn",
},
Name: {
"cvccvcvcv",
},
Phrase: {
"cvcc cvc cvccvcv cvc",
"cvc cvccvcvcv cvcv",
"cv cvccv cvc cvcvccv",
},
Basic: {
"aaanaaan",
"aannaaan",
"aaannaaa",
},
}
var characters = map[string]string{
"V": "AEIOU",
"C": "BCDFGHJKLMNPQRSTVWXYZ",
"v": "aeiou",
"c": "bcdfghjklmnpqrstvwxyz",
"A": "AEIOUBCDFGHJKLMNPQRSTVWXYZ",
"a": "AEIOUaeiouBCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz",
"n": "0123456789",
"o": "@&%?,=[]_:-+*$#!'^~;()/.",
"x": "AEIOUaeiouBCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz0123456789!@#$%^&*()",
" ": " ",
}