84 lines
2.0 KiB
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
|
|
//
|
|
// }
|
|
//}
|