diff --git a/README.md b/README.md index 6c3f5ee..e19ce34 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ google dorking, but with duck duck go (so, not google dorking...) parse urls in style. read urls from a line-separated file or from stdin. Get domains, keys, a map of keys and values, paths, user info (username and password), or values. ## pw -need a kinda safe(ish?) password and too lazy to log into your pw manager or some rando genderating rando site? type something in and get a mostly gibberish password. +need a kinda sorta safe(ish?) password and too lazy to log into your pw manager or some rando genderating rando site? type something in and get a mostly gibberish password that contains at least one lower-case letter, one upper-case, one special character, and one number. yay for practicing pipelines ## tas throw against site (pull down archived links from Wayback Machine, run against the site, see what status codes currently are) diff --git a/lines/main.go b/lines/main.go index 3deba9a..2316f47 100644 --- a/lines/main.go +++ b/lines/main.go @@ -143,6 +143,7 @@ func readFile(file, ext string) (<-chan []string, error) { c := csv.NewReader(f) go func() { defer close(ch) + defer f.Close() for { record, err := c.Read() if err != nil { @@ -158,6 +159,7 @@ func readFile(file, ext string) (<-chan []string, error) { scanner := bufio.NewScanner(f) go func() { defer close(ch) + defer f.Close() for scanner.Scan() { var lines []string lines = append(lines, scanner.Text()) diff --git a/pw/main.go b/pw/main.go index 282b05a..459c855 100644 --- a/pw/main.go +++ b/pw/main.go @@ -11,18 +11,14 @@ import ( ) func main() { + rand.Seed(time.Now().UnixNano()) ch, err := read() if err != nil { log.Fatal(err) } - var result []string - for c := range specials(nums(lower(upper(ch)))) { - result = append(result, c) - } - noSpace := strings.Replace(strings.Join(result, ""), " ", "", -1) - fmt.Println(noSpace) - // check at least 1 number, at least 1 lower, 1 upper, 1 special char, maybe weigh the - // things differently (instead of 50/50 chance of swapping?) + + pw := checkBoxes(specials(nums(lower(upper(ch))))) + fmt.Println(pw) } func read() (<-chan string, error) { @@ -43,17 +39,12 @@ func read() (<-chan string, error) { return ch, nil } -func gimmeNum(num int) int { - r := rand.New(rand.NewSource(time.Now().UnixNano())) - return r.Intn(num) -} - -func upper(s <-chan string) <-chan string { +func upper(str <-chan string) <-chan string { ch := make(chan string) go func() { defer close(ch) - for char := range s { - if gimmeNum(2) == 1 { + for char := range str { + if rand.Intn(2) == 1 { char = strings.ToUpper(char) } ch <- char @@ -62,12 +53,12 @@ func upper(s <-chan string) <-chan string { return ch } -func lower(s <-chan string) <-chan string { +func lower(str <-chan string) <-chan string { ch := make(chan string) go func() { defer close(ch) - for char := range s { - if gimmeNum(2) == 1 { + for char := range str { + if rand.Intn(2) == 1 { char = strings.ToLower(char) } ch <- char @@ -76,14 +67,14 @@ func lower(s <-chan string) <-chan string { return ch } -func nums(s <-chan string) <-chan string { +func nums(str <-chan string) <-chan string { ch := make(chan string) go func() { defer close(ch) nums := getNums() - for char := range s { - if gimmeNum(2) == 1 { - char = nums[gimmeNum(len(nums))] + for char := range str { + if rand.Intn(2) == 1 { + char = nums[rand.Intn(len(nums))] } ch <- char } @@ -91,14 +82,14 @@ func nums(s <-chan string) <-chan string { return ch } -func specials(s <-chan string) <-chan string { +func specials(str <-chan string) <-chan string { ch := make(chan string) go func() { defer close(ch) sp := getSpecials() - for char := range s { - if gimmeNum(2) == 1 { - char = sp[gimmeNum(len(sp))] + for char := range str { + if rand.Intn(2) == 1 { + char = sp[rand.Intn(len(sp))] } ch <- char } @@ -106,6 +97,32 @@ func specials(s <-chan string) <-chan string { return ch } +func checkBoxes(str <-chan string) string { + var preCheck []string + for char := range str { + preCheck = append(preCheck, char) + } + lowers := getLetters() + newLower := lowers[rand.Intn(len(lowers))] + newUpper := strings.ToUpper(lowers[rand.Intn(len(lowers))]) + specials := getSpecials() + newSpecial := specials[rand.Intn(len(specials))] + nums := getNums() + newNum := nums[rand.Intn(len(nums))] + preCheck = append(preCheck, newLower, newUpper, newSpecial, newNum) + + rand.Shuffle(len(preCheck), func(i, j int) { + preCheck[i], preCheck[j] = preCheck[j], preCheck[i] + }) + + noSpaces := strings.Replace(strings.Join(preCheck, ""), " ", "", -1) + // cause that one time... + noReturn := strings.Replace(noSpaces, "\n", `n\`, -1) + + return noReturn +} + + func getSpecials() []string { return []string{ `"`, " ", "!", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "<", "=", ">", "?", "@", "[", `\`, "`", "]", "^", "_", "{", "|", "}", "~", @@ -116,4 +133,10 @@ func getNums() []string { return []string{ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", } +} + +func getLetters() []string{ + return []string{ + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", + } } \ No newline at end of file