summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--auth/checkpass.go14
-rw-r--r--auth/checkpass_test.go19
2 files changed, 33 insertions, 0 deletions
diff --git a/auth/checkpass.go b/auth/checkpass.go
new file mode 100644
index 0000000..64e3c9f
--- /dev/null
+++ b/auth/checkpass.go
@@ -0,0 +1,14 @@
+package auth
+
+import (
+	"golang.org/x/crypto/bcrypt"
+)
+
+// checkPass takes a string and hash as input and returns an error. If
+// the error is not nil then the consider the password wrong. We're
+// returning error instead of a bool so that we can print failed
+// logins to log and logging shouldn't happen here.
+func checkPass(password, hash string) error {
+	err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
+	return err
+}
diff --git a/auth/checkpass_test.go b/auth/checkpass_test.go
new file mode 100644
index 0000000..d22bf48
--- /dev/null
+++ b/auth/checkpass_test.go
@@ -0,0 +1,19 @@
+package auth
+
+import (
+	"testing"
+)
+
+// TestCheckPass tests the checkPass function.
+func TestCheckPass(t *testing.T) {
+	var passhash = make(map[string]string)
+	passhash["password"] = "$2a$10$hyV9vtsYXX88wz1rmA1x0.tcdkyvd6QsmV6gLOcR5wtYBE2GaSqT."
+
+	for p, h := range passhash {
+		err := checkPass(p, h)
+		if err != nil {
+			t.Errorf("password: %s, hash: %s didn't match.",
+				p, h)
+		}
+	}
+}