mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2026-01-14 18:21:26 +01:00
refactor: remove pocketbase (#1138)
This commit is contained in:
32
app/auth/password/password.go
Normal file
32
app/auth/password/password.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package password
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
func Hash(password string) (hashedPassword, tokenKey string, err error) {
|
||||
hashedPasswordB, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
return "", "", fmt.Errorf("failed to hash password: %w", err)
|
||||
}
|
||||
|
||||
tokenKey, err = GenerateTokenKey()
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
return string(hashedPasswordB), tokenKey, nil
|
||||
}
|
||||
|
||||
func GenerateTokenKey() (string, error) {
|
||||
b := make([]byte, 32)
|
||||
if _, err := rand.Read(b); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return base64.URLEncoding.EncodeToString(b), nil
|
||||
}
|
||||
67
app/auth/password/password_test.go
Normal file
67
app/auth/password/password_test.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package password
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
func TestHash(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
type args struct {
|
||||
password string
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
wantErr require.ErrorAssertionFunc
|
||||
}{
|
||||
{
|
||||
name: "Hash valid password",
|
||||
args: args{
|
||||
password: "securePassword123!",
|
||||
},
|
||||
wantErr: require.NoError,
|
||||
},
|
||||
{
|
||||
name: "Long password",
|
||||
args: args{
|
||||
password: strings.Repeat("a", 75),
|
||||
},
|
||||
wantErr: require.Error,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
gotHashedPassword, gotTokenKey, err := Hash(tt.args.password)
|
||||
tt.wantErr(t, err, "Hash() should not return an error")
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
assert.NotEmpty(t, gotHashedPassword, "Hash() gotHashedPassword should not be empty")
|
||||
assert.NotEmpty(t, gotTokenKey, "Hash() gotTokenKey should not be empty")
|
||||
|
||||
require.NoError(t, bcrypt.CompareHashAndPassword([]byte(gotHashedPassword), []byte(tt.args.password)), "Hash() hashed password does not match original password")
|
||||
|
||||
assert.GreaterOrEqual(t, len(gotTokenKey), 43, "Hash() gotTokenKey should be at least 43 characters long")
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGenerateTokenKey(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tokenKey, err := GenerateTokenKey()
|
||||
require.NoError(t, err)
|
||||
assert.NotEmpty(t, tokenKey, "GenerateTokenKey() tokenKey should not be empty")
|
||||
assert.GreaterOrEqual(t, len(tokenKey), 43, "GenerateTokenKey() tokenKey should be at least 43 characters long")
|
||||
}
|
||||
Reference in New Issue
Block a user