Anpassung Leet: LEET_PROB=0.4
All checks were successful
release-tag / release-image (push) Successful in 2m7s
All checks were successful
release-tag / release-image (push) Successful in 2m7s
This commit is contained in:
46
main.go
46
main.go
@@ -26,6 +26,7 @@ type Config struct {
|
|||||||
LeetMap map[rune]string
|
LeetMap map[rune]string
|
||||||
Suggestions int
|
Suggestions int
|
||||||
RuleSets []string // e.g. ["random","passphrase","hybrid"]
|
RuleSets []string // e.g. ["random","passphrase","hybrid"]
|
||||||
|
LeetProb float64
|
||||||
}
|
}
|
||||||
|
|
||||||
type genRequest struct {
|
type genRequest struct {
|
||||||
@@ -86,6 +87,23 @@ func main() {
|
|||||||
|
|
||||||
/* -------------------- Config & ENV -------------------- */
|
/* -------------------- Config & ENV -------------------- */
|
||||||
|
|
||||||
|
func floatEnv(k string, def float64) float64 {
|
||||||
|
if v := os.Getenv(k); v != "" {
|
||||||
|
v = strings.ReplaceAll(v, ",", ".") // deutsche Kommas erlauben
|
||||||
|
if f, err := strconv.ParseFloat(v, 64); err == nil && f >= 0 && f <= 1 {
|
||||||
|
return f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return def
|
||||||
|
}
|
||||||
|
|
||||||
|
func randChance(p float64) bool {
|
||||||
|
if p <= 0 { return false }
|
||||||
|
if p >= 1 { return true }
|
||||||
|
// 1e6 Auflösung reicht; kryptografisch sicher über mustCryptoInt
|
||||||
|
return mustCryptoInt(1_000_000) < int(p*1_000_000)
|
||||||
|
}
|
||||||
|
|
||||||
func loadConfig() Config {
|
func loadConfig() Config {
|
||||||
minLen := intEnv("MIN_LENGTH", 12)
|
minLen := intEnv("MIN_LENGTH", 12)
|
||||||
minLower := intEnv("MIN_LOWER", 2)
|
minLower := intEnv("MIN_LOWER", 2)
|
||||||
@@ -95,6 +113,7 @@ func loadConfig() Config {
|
|||||||
addr := strEnv("SERVER_ADDR", ":8080")
|
addr := strEnv("SERVER_ADDR", ":8080")
|
||||||
specials := strEnv("SPECIALS", "!@#$%&*()-=+:?")
|
specials := strEnv("SPECIALS", "!@#$%&*()-=+:?")
|
||||||
leet := parseLeetMap(strEnv("LEET_MAP", "a:4,e:3,o:0,t:7"))
|
leet := parseLeetMap(strEnv("LEET_MAP", "a:4,e:3,o:0,t:7"))
|
||||||
|
leetProb := floatEnv("LEET_PROB", 0.35)
|
||||||
sug := intEnv("SUGGESTION_COUNT", 5)
|
sug := intEnv("SUGGESTION_COUNT", 5)
|
||||||
rules := strEnv("RULESETS", "random,passphrase,hybrid")
|
rules := strEnv("RULESETS", "random,passphrase,hybrid")
|
||||||
rs := []string{}
|
rs := []string{}
|
||||||
@@ -118,6 +137,7 @@ func loadConfig() Config {
|
|||||||
LeetMap: leet,
|
LeetMap: leet,
|
||||||
Suggestions: sug,
|
Suggestions: sug,
|
||||||
RuleSets: rs,
|
RuleSets: rs,
|
||||||
|
LeetProb: leetProb,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,7 +190,7 @@ func generateFromSentence(sentence string, cfg Config) (string, complexity) {
|
|||||||
if i > 0 {
|
if i > 0 {
|
||||||
b.WriteString(randFrom(cfg.Specials))
|
b.WriteString(randFrom(cfg.Specials))
|
||||||
}
|
}
|
||||||
b.WriteString(applyLeet(w, cfg.LeetMap))
|
b.WriteString(applyLeet(w, cfg.LeetMap, cfg.LeetProb))
|
||||||
}
|
}
|
||||||
pw := b.String()
|
pw := b.String()
|
||||||
|
|
||||||
@@ -181,17 +201,17 @@ func generateFromSentence(sentence string, cfg Config) (string, complexity) {
|
|||||||
return ensureAll(pw, cfg)
|
return ensureAll(pw, cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyLeet(s string, leet map[rune]string) string {
|
func applyLeet(s string, leet map[rune]string, p float64) string {
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
for _, r := range s {
|
for _, r := range s {
|
||||||
lr := unicode.ToLower(r)
|
lr := unicode.ToLower(r)
|
||||||
if rep, ok := leet[lr]; ok {
|
if rep, ok := leet[lr]; ok && randChance(p) {
|
||||||
b.WriteString(rep)
|
b.WriteString(rep) // Ersetze nur mit Chance p
|
||||||
} else {
|
} else {
|
||||||
b.WriteRune(r)
|
b.WriteRune(r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return b.String()
|
return b.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func sprinkleCase(s string) string {
|
func sprinkleCase(s string) string {
|
||||||
@@ -370,7 +390,7 @@ func genHybrid(cfg Config) string {
|
|||||||
if coin() {
|
if coin() {
|
||||||
w2 = strings.ToUpper(w2[:1]) + w2[1:]
|
w2 = strings.ToUpper(w2[:1]) + w2[1:]
|
||||||
}
|
}
|
||||||
base := applyLeet(w1, cfg.LeetMap) + randFrom(cfg.Specials) + applyLeet(w2, cfg.LeetMap)
|
base := applyLeet(w1, cfg.LeetMap, cfg.LeetProb) + randFrom(cfg.Specials) + applyLeet(w2, cfg.LeetMap, cfg.LeetProb)
|
||||||
// streue zweite Sonderzeichen
|
// streue zweite Sonderzeichen
|
||||||
base = insertAt(base, randPos(base), randFrom(cfg.Specials))
|
base = insertAt(base, randPos(base), randFrom(cfg.Specials))
|
||||||
// 3–5 Ziffern an zufälligen Stellen
|
// 3–5 Ziffern an zufälligen Stellen
|
||||||
|
|||||||
Reference in New Issue
Block a user