go-restapi-login/utils/crypto.go

84 lines
2.0 KiB
Go

package utils
import (
"encoding/base64"
"fmt"
"github.com/golang-jwt/jwt/v5"
"github.com/skip2/go-qrcode"
"net/http"
"strings"
"time"
)
//Mail
type MyCustomClaims struct {
Email string `json:"email"`
jwt.RegisteredClaims
}
func buildTokenLink(token string, w http.ResponseWriter) (string, string) {
tokenCustomTrim := strings.ReplaceAll(token, ".", "&")
emailVerifyLink := "http://www.totoday.com/?p=" + tokenCustomTrim
fmt.Println(emailVerifyLink)
png, err := qrcode.Encode(emailVerifyLink, qrcode.Low, 200)
if err != nil {
fmt.Println("Internal log: error create qr ")
_ = WriteJSONInternalError(w, "error create QR code")
}
base64Image := base64.StdEncoding.EncodeToString(png)
dataURL := "data:image/png;base64," + base64Image
return emailVerifyLink, dataURL
}
func EncryptAESMailLink(data string, key string, w http.ResponseWriter) (string, string) {
claims := MyCustomClaims{
data,
jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)),
IssuedAt: jwt.NewNumericDate(time.Now()),
NotBefore: jwt.NewNumericDate(time.Now()),
Issuer: "totodayShop",
},
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
token.Header["purpose"] = "Email_Verify"
tokenString, err := token.SignedString([]byte(key))
if err != nil {
fmt.Println("Internal Log: Error signed token fail", err.Error())
_ = WriteJSONInternalError(w, "Error signing token fail")
}
return buildTokenLink(tokenString, w)
}
//
//func DecryptAESMailLink(data string, key string) string {
//}
//OTP
//Write preuser to mongo db
//func WriteToMongo(registerInfo *models.PreusersMongo) {
//
//
//}
//Write otp to redis
//func CheckAndWriteRedis(email string, username string, hashOTP string) {
// //checking does it valid or have in redis or not
// //var count int
// exists, err := Redis.Exists(context.Background(), "otp:nhocdl.poro1@gmail.com").Result()
// if err != nil {
// fmt.Println("something went wrong")
// }
// if exists == 0 {
// //count = 0
//
// }
//}