package pkg import ( "regexp" "strconv" "strings" "github.rackspace.com/gorax/tools/util" ) type PasswordPolicy struct { Description string `json:"description,omitempty"` ExpireWarning int `json:"expiration_warning,omitempty"` MaxDuration int `json:"max_duration,omitempty"` MaxLoginFailures int `json:"max_login_failures,omitempty"` MinDuration int `json:"min_duration,omitempty"` MinimumLength int `json:"minimum_length,omitempty"` PolicyEnforcement *bool `json:"policy_enforcement,omitempty"` RequiredLowercase int `json:"required_lowercase,omitempty"` RequiredNumeric int `json:"required_numeric,omitempty"` RequiredSpecial int `json:"required_special,omitempty"` RequiredUppercase int `json:"required_uppercase,omitempty"` } func PasswordPolicyParse(s string) PasswordPolicy { peValue := false pw := PasswordPolicy{ Description: strings.Replace(util.RegexpString(regexp.MustCompile(`(?i)description\s+(.*)`), s), "\"", "", -1), ExpireWarning: getValue(s, regexp.MustCompile(`(?i)expiration-warning\s+(\d+)`)), MaxDuration: getValue(s, regexp.MustCompile(`(?i)max-duration\s+(\d+)`)), MaxLoginFailures: getValue(s, regexp.MustCompile(`(?i)max-login-failures\s+(\d+)`)), MinDuration: getValue(s, regexp.MustCompile(`(?i)min-duration\s+(\d+)`)), MinimumLength: getValue(s, regexp.MustCompile(`(?i)minimum-length\s+(\d+)`)), RequiredLowercase: getValue(s, regexp.MustCompile(`(?i)required-lowercase\s+(\d+)`)), RequiredNumeric: getValue(s, regexp.MustCompile(`(?i)required-numeric\s+(\d+)`)), RequiredSpecial: getValue(s, regexp.MustCompile(`(?i)required-special\s+(\d+)`)), RequiredUppercase: getValue(s, regexp.MustCompile(`(?i)required-uppercase\s+(\d+)`)), PolicyEnforcement: &peValue, } pe := util.RegexpString(regexp.MustCompile(`(?i)policy-enforcement\s+(\S+)`), s) if pe != "" { peValue = true pw.PolicyEnforcement = &peValue } return pw } func getValue(s string, re *regexp.Regexp) int { match := util.RegexpString(re, s) if match == "" { return 0 } r, err := strconv.Atoi(match) if err != nil { return 0 } return r }