gitee.com/lonely0422/gometalinter.git@v3.0.1-0.20190307123442-32416ab75314+incompatible/_linters/src/github.com/nbutton23/zxcvbn-go/matching/matching.go (about) 1 package matching 2 3 import ( 4 "sort" 5 6 "github.com/nbutton23/zxcvbn-go/adjacency" 7 "github.com/nbutton23/zxcvbn-go/frequency" 8 "github.com/nbutton23/zxcvbn-go/match" 9 ) 10 11 var ( 12 DICTIONARY_MATCHERS []match.Matcher 13 MATCHERS []match.Matcher 14 ADJACENCY_GRAPHS []adjacency.AdjacencyGraph 15 L33T_TABLE adjacency.AdjacencyGraph 16 17 SEQUENCES map[string]string 18 ) 19 20 const ( 21 DATE_RX_YEAR_SUFFIX string = `((\d{1,2})(\s|-|\/|\\|_|\.)(\d{1,2})(\s|-|\/|\\|_|\.)(19\d{2}|200\d|201\d|\d{2}))` 22 DATE_RX_YEAR_PREFIX string = `((19\d{2}|200\d|201\d|\d{2})(\s|-|/|\\|_|\.)(\d{1,2})(\s|-|/|\\|_|\.)(\d{1,2}))` 23 DATE_WITHOUT_SEP_MATCH string = `\d{4,8}` 24 ) 25 26 func init() { 27 loadFrequencyList() 28 } 29 30 func Omnimatch(password string, userInputs []string, filters ...func(match.Matcher) bool) (matches []match.Match) { 31 32 //Can I run into the issue where nil is not equal to nil? 33 if DICTIONARY_MATCHERS == nil || ADJACENCY_GRAPHS == nil { 34 loadFrequencyList() 35 } 36 37 if userInputs != nil { 38 userInputMatcher := buildDictMatcher("user_inputs", buildRankedDict(userInputs)) 39 matches = userInputMatcher(password) 40 } 41 42 for _, matcher := range MATCHERS { 43 shouldBeFiltered := false 44 for i := range filters { 45 if filters[i](matcher) { 46 shouldBeFiltered = true 47 break 48 } 49 } 50 if !shouldBeFiltered { 51 matches = append(matches, matcher.MatchingFunc(password)...) 52 } 53 } 54 sort.Sort(match.Matches(matches)) 55 return matches 56 } 57 58 func loadFrequencyList() { 59 60 for n, list := range frequency.FrequencyLists { 61 DICTIONARY_MATCHERS = append(DICTIONARY_MATCHERS, match.Matcher{MatchingFunc: buildDictMatcher(n, buildRankedDict(list.List)), ID: n}) 62 } 63 64 L33T_TABLE = adjacency.AdjacencyGph["l33t"] 65 66 ADJACENCY_GRAPHS = append(ADJACENCY_GRAPHS, adjacency.AdjacencyGph["qwerty"]) 67 ADJACENCY_GRAPHS = append(ADJACENCY_GRAPHS, adjacency.AdjacencyGph["dvorak"]) 68 ADJACENCY_GRAPHS = append(ADJACENCY_GRAPHS, adjacency.AdjacencyGph["keypad"]) 69 ADJACENCY_GRAPHS = append(ADJACENCY_GRAPHS, adjacency.AdjacencyGph["macKeypad"]) 70 71 //l33tFilePath, _ := filepath.Abs("adjacency/L33t.json") 72 //L33T_TABLE = adjacency.GetAdjancencyGraphFromFile(l33tFilePath, "l33t") 73 74 SEQUENCES = make(map[string]string) 75 SEQUENCES["lower"] = "abcdefghijklmnopqrstuvwxyz" 76 SEQUENCES["upper"] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 77 SEQUENCES["digits"] = "0123456789" 78 79 MATCHERS = append(MATCHERS, DICTIONARY_MATCHERS...) 80 MATCHERS = append(MATCHERS, match.Matcher{MatchingFunc: spatialMatch, ID: SPATIAL_MATCHER_NAME}) 81 MATCHERS = append(MATCHERS, match.Matcher{MatchingFunc: repeatMatch, ID: REPEAT_MATCHER_NAME}) 82 MATCHERS = append(MATCHERS, match.Matcher{MatchingFunc: sequenceMatch, ID: SEQUENCE_MATCHER_NAME}) 83 MATCHERS = append(MATCHERS, match.Matcher{MatchingFunc: l33tMatch, ID: L33T_MATCHER_NAME}) 84 MATCHERS = append(MATCHERS, match.Matcher{MatchingFunc: dateSepMatcher, ID: DATESEP_MATCHER_NAME}) 85 MATCHERS = append(MATCHERS, match.Matcher{MatchingFunc: dateWithoutSepMatch, ID: DATEWITHOUTSEP_MATCHER_NAME}) 86 87 }