71 lines
1.7 KiB
Go
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"))
|
|
}
|