summary refs log tree commit diff stats
path: root/cmd/orion/orion.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/orion/orion.go')
-rw-r--r--cmd/orion/orion.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/cmd/orion/orion.go b/cmd/orion/orion.go
new file mode 100644
index 0000000..e3ce011
--- /dev/null
+++ b/cmd/orion/orion.go
@@ -0,0 +1,55 @@
+package main
+
+import (
+	"os"
+	"time"
+
+	"framagit.org/andinus/orion/hibp"
+
+	"github.com/AlecAivazis/survey/v2"
+	"github.com/AlecAivazis/survey/v2/terminal"
+	"github.com/briandowns/spinner"
+	"github.com/fatih/color"
+)
+
+func main() {
+	var pass string
+
+	prompt := &survey.Password{
+		Message: "Password:",
+		Help:    "Enter password to be checked against HIBP's Database",
+	}
+	err := survey.AskOne(prompt, &pass, survey.WithValidator(survey.Required))
+	if err == terminal.InterruptErr {
+		color.Yellow("Interrupt Received")
+		os.Exit(0)
+	} else if err != nil {
+		panic(err)
+	}
+
+	s := spinner.New(spinner.CharSets[12], 32*time.Millisecond)
+	s.Start()
+	s.Color("cyan")
+
+	// get password hash
+	hsh := hibp.GetHsh(pass)
+
+	// get list of pwned passwords
+	list, err := hibp.GetPwned(hsh)
+	if err != nil {
+		color.Yellow(err.Error())
+		os.Exit(1)
+	}
+
+	// check if pass is pwned
+	pwn, fq := hibp.ChkPwn(list, hsh)
+	s.Stop()
+
+	if pwn {
+		color.New(color.FgRed).Add(color.Bold).Println("\nPwned!")
+		color.Yellow("This password has been seen %s times before.", fq)
+		return
+	}
+
+	color.Green("\nPassword wasn't found in Have I Been Pwned's Database")
+}