(r *Runner)
| 956 | } |
| 957 | |
| 958 | func (opt *Option) BuildWords(r *Runner) error { |
| 959 | var dicts [][]string |
| 960 | var err error |
| 961 | if opt.DefaultDict { |
| 962 | dicts = append(dicts, pkg.Dicts["default"]) |
| 963 | logs.Log.Info("use default dictionary: https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt") |
| 964 | } |
| 965 | for i, f := range opt.Dictionaries { |
| 966 | dict, err := pkg.LoadFileToSlice(f) |
| 967 | if err != nil { |
| 968 | return err |
| 969 | } |
| 970 | dicts = append(dicts, dict) |
| 971 | if opt.ResumeFrom != "" { |
| 972 | pkg.Dicts[f] = dicts[i] |
| 973 | } |
| 974 | |
| 975 | logs.Log.Logf(pkg.LogVerbose, "Loaded %d word from %s", len(dict), f) |
| 976 | } |
| 977 | |
| 978 | if len(dicts) == 0 && opt.Word == "" && len(opt.Rules) == 0 && len(opt.AppendRule) == 0 { |
| 979 | r.IsCheck = true |
| 980 | } |
| 981 | |
| 982 | if opt.Word == "" { |
| 983 | opt.Word = "{?" |
| 984 | for i, _ := range dicts { |
| 985 | opt.Word += strconv.Itoa(i) |
| 986 | } |
| 987 | opt.Word += "}" |
| 988 | } |
| 989 | |
| 990 | if len(opt.Suffixes) != 0 { |
| 991 | mask.SpecialWords["suffix"] = opt.Suffixes |
| 992 | opt.Word += "{?@suffix}" |
| 993 | } |
| 994 | if len(opt.Prefixes) != 0 { |
| 995 | mask.SpecialWords["prefix"] = opt.Prefixes |
| 996 | opt.Word = "{?@prefix}" + opt.Word |
| 997 | } |
| 998 | |
| 999 | if opt.ForceExtension && opt.Extensions != "" { |
| 1000 | exts := strings.Split(opt.Extensions, ",") |
| 1001 | for i, e := range exts { |
| 1002 | if !strings.HasPrefix(e, ".") { |
| 1003 | exts[i] = "." + e |
| 1004 | } |
| 1005 | } |
| 1006 | mask.SpecialWords["ext"] = exts |
| 1007 | opt.Word += "{?@ext}" |
| 1008 | } |
| 1009 | |
| 1010 | r.Wordlist, err = mask.Run(opt.Word, dicts, nil) |
| 1011 | if err != nil { |
| 1012 | return fmt.Errorf("%s %w", opt.Word, err) |
| 1013 | } |
| 1014 | if len(r.Wordlist) > 0 { |
| 1015 | logs.Log.Logf(pkg.LogVerbose, "Parsed %d words by %s", len(r.Wordlist), opt.Word) |
no test coverage detected