summaryrefslogtreecommitdiffstats
path: root/modules/secret
diff options
context:
space:
mode:
authorJonas Franz <info@jonasfranz.software>2019-03-08 17:42:50 +0100
committertechknowlogick <matti@mdranta.net>2019-03-08 11:42:50 -0500
commite777c6bdc6f12f9152335f8bfd66b956aedc9957 (patch)
treeb79c9bc2d4f9402dcd15d993b088840e2fad8a54 /modules/secret
parent9d3732dfd512273992855097bba1e909f098db23 (diff)
downloadgitea-e777c6bdc6f12f9152335f8bfd66b956aedc9957.tar.gz
gitea-e777c6bdc6f12f9152335f8bfd66b956aedc9957.zip
Integrate OAuth2 Provider (#5378)
Diffstat (limited to 'modules/secret')
-rw-r--r--modules/secret/secret.go33
-rw-r--r--modules/secret/secret_test.go22
2 files changed, 55 insertions, 0 deletions
diff --git a/modules/secret/secret.go b/modules/secret/secret.go
new file mode 100644
index 0000000000..d0e4deacb9
--- /dev/null
+++ b/modules/secret/secret.go
@@ -0,0 +1,33 @@
+// Copyright 2019 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 secret
+
+import (
+ "crypto/rand"
+ "encoding/base64"
+)
+
+// New creats a new secret
+func New() (string, error) {
+ return NewWithLength(32)
+}
+
+// NewWithLength creates a new secret for a given length
+func NewWithLength(length int64) (string, error) {
+ return randomString(length)
+}
+
+func randomBytes(len int64) ([]byte, error) {
+ b := make([]byte, len)
+ if _, err := rand.Read(b); err != nil {
+ return nil, err
+ }
+ return b, nil
+}
+
+func randomString(len int64) (string, error) {
+ b, err := randomBytes(len)
+ return base64.URLEncoding.EncodeToString(b), err
+}
diff --git a/modules/secret/secret_test.go b/modules/secret/secret_test.go
new file mode 100644
index 0000000000..c47201f2d7
--- /dev/null
+++ b/modules/secret/secret_test.go
@@ -0,0 +1,22 @@
+// Copyright 2019 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 secret
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestNew(t *testing.T) {
+ result, err := New()
+ assert.NoError(t, err)
+ assert.True(t, len(result) > 32)
+
+ result2, err := New()
+ assert.NoError(t, err)
+ // check if secrets
+ assert.NotEqual(t, result, result2)
+}