@@ -3,6 +3,7 @@ package auth
3
3
import (
4
4
"crypto/rand"
5
5
"encoding/hex"
6
+ "fmt"
6
7
"strings"
7
8
)
8
9
@@ -20,23 +21,36 @@ type Key struct {
20
21
MaskedValue string
21
22
}
22
23
23
- func MaskKey (prefix string , value string ) string {
24
- lastFour := value [len (value )- keySuffixLength :]
25
- stars := strings .Repeat ("*" , len (value )- keySuffixLength )
26
- return prefix + stars + lastFour
24
+ func MaskKey (prefix string , value string ) (string , error ) {
25
+ suffixOffset := len (value ) - keySuffixLength
26
+
27
+ if suffixOffset < 0 {
28
+ return "" , fmt .Errorf ("mask value length is less than key suffix length (%d)" , keySuffixLength )
29
+ }
30
+
31
+ lastFour := value [suffixOffset :]
32
+ stars := strings .Repeat ("*" , suffixOffset )
33
+ return prefix + stars + lastFour , nil
27
34
}
28
35
29
36
func GenerateKey (prefix string ) (Key , error ) {
30
37
keyBytes := make ([]byte , keyLength )
38
+
31
39
_ , err := rand .Read (keyBytes )
32
40
if err != nil {
33
41
return Key {}, err
34
42
}
43
+
35
44
generatedToken := hex .EncodeToString (keyBytes )
36
45
46
+ mask , err := MaskKey (prefix , generatedToken )
47
+ if err != nil {
48
+ return Key {}, err
49
+ }
50
+
37
51
return Key {
38
52
PrefixedRawValue : prefix + generatedToken ,
39
53
HashedValue : hasher .Hash (keyBytes ),
40
- MaskedValue : MaskKey ( prefix , generatedToken ) ,
54
+ MaskedValue : mask ,
41
55
}, nil
42
56
}
0 commit comments