summaryrefslogtreecommitdiffstats
path: root/modules/password/pwn.go
diff options
context:
space:
mode:
authorJohn Olheiser <john.olheiser@gmail.com>2020-09-08 17:06:39 -0500
committerGitHub <noreply@github.com>2020-09-08 17:06:39 -0500
commitc6e4bc53aad371210f0cb670e36c57132087b230 (patch)
treeef2eecef855a4257a22eb61aefd5439be23a770e /modules/password/pwn.go
parentbea343ce0997262e61c5d83812a270090896afbf (diff)
downloadgitea-c6e4bc53aad371210f0cb670e36c57132087b230.tar.gz
gitea-c6e4bc53aad371210f0cb670e36c57132087b230.zip
Check passwords against HaveIBeenPwned (#12716)
* Implement pwn Signed-off-by: jolheiser <john.olheiser@gmail.com> * Update module Signed-off-by: jolheiser <john.olheiser@gmail.com> * Apply suggestions mrsdizzie Co-authored-by: mrsdizzie <info@mrsdizzie.com> * Add link to HIBP Signed-off-by: jolheiser <john.olheiser@gmail.com> * Add more details to admin command Signed-off-by: jolheiser <john.olheiser@gmail.com> * Add context to pwn Signed-off-by: jolheiser <john.olheiser@gmail.com> * Consistency and making some noise ;) Signed-off-by: jolheiser <john.olheiser@gmail.com> Co-authored-by: mrsdizzie <info@mrsdizzie.com> Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'modules/password/pwn.go')
-rw-r--r--modules/password/pwn.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/modules/password/pwn.go b/modules/password/pwn.go
new file mode 100644
index 0000000000..938524e6de
--- /dev/null
+++ b/modules/password/pwn.go
@@ -0,0 +1,30 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package password
+
+import (
+ "context"
+
+ "code.gitea.io/gitea/modules/setting"
+
+ "go.jolheiser.com/pwn"
+)
+
+// IsPwned checks whether a password has been pwned
+// NOTE: This func returns true if it encounters an error under the assumption that you ALWAYS want to check against
+// HIBP, so not getting a response should block a password until it can be verified.
+func IsPwned(ctx context.Context, password string) (bool, error) {
+ if !setting.PasswordCheckPwn {
+ return false, nil
+ }
+
+ client := pwn.New(pwn.WithContext(ctx))
+ count, err := client.CheckPassword(password, true)
+ if err != nil {
+ return true, err
+ }
+
+ return count > 0, nil
+}