reinstall os
This commit is contained in:
1 parent
b9c745c17c
commit
ed6776df74
8 files changed
+150
-36
No files matched your search
+68
-13
@@ -1,18 +1,20 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base32"
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
"github.com/pquerna/otp"
|
||||
"github.com/pquerna/otp/hotp"
|
||||
"github.com/skip2/go-qrcode"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"linhdevtran99/rest-api/models"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
@@ -28,9 +30,8 @@ type MyCustomClaims struct {
|
||||
jwt.RegisteredClaims
|
||||
}
|
||||
|
||||
func buildTokenLink(token string, w http.ResponseWriter) (string, string) {
|
||||
tokenCustomTrim := strings.ReplaceAll(token, ".", "&")
|
||||
emailVerifyLink := "https://api.wliafdew.dev/?p=" + tokenCustomTrim
|
||||
func buildTokenLink(registerInfo *models.PreusersMongo, token string, w http.ResponseWriter) (string, string) {
|
||||
emailVerifyLink := "http://localhost:4200/register?uuid=" + registerInfo.UUID + "®ister_step=verify_with_jwt" + "&p=" + token
|
||||
png, err := qrcode.Encode(emailVerifyLink, qrcode.Low, 200)
|
||||
if err != nil {
|
||||
fmt.Println("Internal log: error create qr ")
|
||||
@@ -41,27 +42,28 @@ func buildTokenLink(token string, w http.ResponseWriter) (string, string) {
|
||||
return emailVerifyLink, base64Image
|
||||
}
|
||||
|
||||
func EncryptAESMailLink(registerInfo *models.PreusersMongo, w http.ResponseWriter, mailChan chan models.MailVefiry, wg *sync.WaitGroup) chan models.MailVefiry {
|
||||
func EncryptAESMailLink(registerInfo *models.PreusersMongo, w http.ResponseWriter, mailChan chan models.MailVefiry, wg *sync.WaitGroup, timeCreate time.Time) chan models.MailVefiry {
|
||||
claims := MyCustomClaims{
|
||||
registerInfo.Email,
|
||||
jwt.RegisteredClaims{
|
||||
ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)),
|
||||
IssuedAt: jwt.NewNumericDate(time.Now()),
|
||||
ExpiresAt: jwt.NewNumericDate(time.Now().Add(5 * time.Hour)),
|
||||
IssuedAt: jwt.NewNumericDate(timeCreate),
|
||||
NotBefore: jwt.NewNumericDate(time.Now()),
|
||||
Issuer: "totodayShop",
|
||||
Issuer: "totodayShopRegister",
|
||||
},
|
||||
}
|
||||
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||
token.Header["purpose"] = "Email_Verify"
|
||||
|
||||
tokenString, err := token.SignedString([]byte(serect))
|
||||
tokenString, err := token.SignedString([]byte(serect + registerInfo.UUID))
|
||||
if err != nil {
|
||||
fmt.Println("Internal Log: Error signed token fail", err.Error())
|
||||
_ = WriteJSONInternalError(w, "Error signing token fail")
|
||||
}
|
||||
tokenBS64 := base64.StdEncoding.EncodeToString([]byte(tokenString))
|
||||
|
||||
linkMail, imageB64 := buildTokenLink(tokenString, w)
|
||||
linkMail, imageB64 := buildTokenLink(registerInfo, tokenBS64, w)
|
||||
|
||||
data := models.MailVefiry{
|
||||
LinkMail: linkMail,
|
||||
@@ -75,9 +77,62 @@ func EncryptAESMailLink(registerInfo *models.PreusersMongo, w http.ResponseWrite
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
//func DecryptAESMailLink(data string, key string) string {
|
||||
//}
|
||||
func DecryptAESMailLink(linkVerifyInfo *models.LinkVerify, w http.ResponseWriter) (bool, string) {
|
||||
decodeBase64, err := base64.StdEncoding.DecodeString(linkVerifyInfo.JWT)
|
||||
token, err := jwt.ParseWithClaims(string(decodeBase64), &MyCustomClaims{}, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(serect + linkVerifyInfo.UUID), nil
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("Internal log: Error decrypt token fail", err.Error())
|
||||
if errors.Is(err, jwt.ErrTokenMalformed) {
|
||||
_ = WriteJSON(w, http.StatusBadRequest, models.ErrorAPI{
|
||||
Errors: []string{"Token is malformed"},
|
||||
Message: "Token is invalid",
|
||||
Type: "TokenMalformed",
|
||||
})
|
||||
}
|
||||
if errors.Is(err, jwt.ErrSignatureInvalid) {
|
||||
_ = WriteJSON(w, http.StatusBadRequest, models.ErrorAPI{
|
||||
Errors: []string{"UUID is invalid"},
|
||||
Message: "UUID is invalid",
|
||||
Type: "UUIDInvalid",
|
||||
})
|
||||
}
|
||||
|
||||
if errors.Is(err, jwt.ErrTokenExpired) {
|
||||
_ = WriteJSON(w, http.StatusBadRequest, models.ErrorAPI{
|
||||
Errors: []string{"Token is expired"},
|
||||
Message: "Link is expired please register again",
|
||||
Type: "TokenExpired",
|
||||
})
|
||||
}
|
||||
|
||||
return false, ""
|
||||
}
|
||||
|
||||
if token.Valid && token.Header["purpose"] == "Email_Verify" && err == nil {
|
||||
//get update date from preuser
|
||||
var preUser models.PreusersMongo
|
||||
email := token.Claims.(*MyCustomClaims).Email
|
||||
err := PreUserData.FindOne(context.TODO(), bson.M{"email": email}).Decode(&preUser)
|
||||
if err != nil {
|
||||
//handler erorr later
|
||||
fmt.Println("Internal log: Error find preuser fail", err.Error())
|
||||
return false, ""
|
||||
}
|
||||
timeRegisterToken := preUser.UpdateDate.Unix()
|
||||
timeIssueToken, _ := token.Claims.GetIssuedAt()
|
||||
if timeRegisterToken != timeIssueToken.Unix() {
|
||||
//handler erorr later
|
||||
fmt.Println("Internal log: Error token is not valid to use")
|
||||
return false, ""
|
||||
}
|
||||
return true, email
|
||||
}
|
||||
|
||||
return false, ""
|
||||
|
||||
}
|
||||
|
||||
//OTP+++++++++++++OTP//
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ func BuildEmail(otp string, mailLink string, fileName string) string {
|
||||
QrCode: qrcodeURL,
|
||||
}
|
||||
|
||||
fmt.Println(data.AlternativeLink)
|
||||
|
||||
//tmpl, err := template.ParseFiles("./Template/email.html")
|
||||
tmpl, err := template.ParseFiles("./Template/email.html")
|
||||
|
||||
|
||||
Reference in new issue
Block a user