From c7f567fe24d80b999021a4b178ee03ba475d6da4 Mon Sep 17 00:00:00 2001 From: pnguyen215 Date: Sun, 5 Nov 2023 11:12:04 +0700 Subject: [PATCH] :recycle: refactor: added csrf token utils #9 --- utils/converters.go | 16 ++++++++++++++++ utils/csrf.go | 25 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 utils/converters.go create mode 100644 utils/csrf.go diff --git a/utils/converters.go b/utils/converters.go new file mode 100644 index 0000000..b133e6e --- /dev/null +++ b/utils/converters.go @@ -0,0 +1,16 @@ +package utils + +import ( + "bytes" + "encoding/json" +) + +// Convert bytes to buffer helper +func Convert2BytesBuffer(i interface{}) (*bytes.Buffer, error) { + buf := new(bytes.Buffer) + err := json.NewEncoder(buf).Encode(i) + if err != nil { + return buf, err + } + return buf, nil +} diff --git a/utils/csrf.go b/utils/csrf.go new file mode 100644 index 0000000..fb3cfe4 --- /dev/null +++ b/utils/csrf.go @@ -0,0 +1,25 @@ +package utils + +import ( + "crypto/sha256" + "encoding/base64" + "fmt" + "io" +) + +// Create CSRF token +func CreateCSRFToken(sid, salt string) (string, error) { + hash := sha256.New() + _, err := io.WriteString(hash, fmt.Sprintf("%s%s", salt, sid)) + if err != nil { + return "", err + } + token := base64.RawStdEncoding.EncodeToString(hash.Sum(nil)) + return token, nil +} + +// Validate CSRF token +func VerifyCSRFToken(token string, sid, salt string) bool { + t, _ := CreateCSRFToken(sid, salt) + return token == t +}