flores/service/auth/sigin.go
2025-04-09 15:52:24 +08:00

71 lines
1.7 KiB
Go

package auth
import (
"crypto/sha1"
"encoding/base64"
"github.com/gin-gonic/gin"
"github.com/golang-jwt/jwt/v5"
"net/http"
"time"
)
type SignReq struct {
Email string `json:"email"`
Password string `json:"password"`
}
type User struct {
Id string `json:"id"`
DisplayName string `json:"displayName"`
PhotoURL string `json:"photoURL"`
PhoneNumber string `json:"phoneNumber"`
Country string `json:"country"`
Address string `json:"address"`
State string `json:"state"`
City string `json:"city"`
ZipCode string `json:"zipCode"`
About string `json:"about"`
Role string `json:"role"`
IsPublic bool `json:"isPublic"`
Email string `json:"email"`
Password string `json:"password"`
}
func Sign(c *gin.Context) {
var req SignReq
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
token, _ := GenToken(req.Email)
c.JSON(http.StatusOK, gin.H{
"accessToken": token,
"user": User{},
})
}
type Token struct {
Token string `json:"token"`
AccessToken string `json:"access_token"`
ExpiresIn int `json:"expires_in"`
IssuedAt string `json:"issued_at"`
}
func DefaultToken(ip string) Token {
acc := sha1.Sum([]byte(ip))
access := base64.StdEncoding.EncodeToString(acc[:])
return Token{
Token: access,
AccessToken: access,
ExpiresIn: 300,
IssuedAt: time.Now().Format("2006-01-02T15:04:05.999999999Z"),
}
}
func GenToken(u string) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"user": u,
"nbf": time.Now().Unix(),
"exp": time.Now().Add(time.Minute * 300).Unix(),
})
return token.SignedString([]byte("fasthub-center"))
}