refactor: minor changement

master
fbonhomm 2019-09-03 17:56:22 +02:00
parent 0dcc5cca99
commit 89a062520c
10 changed files with 117 additions and 59 deletions

View File

@ -7,72 +7,59 @@
package controllers
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/fbonhomm/api-go/source/libs"
"github.com/fbonhomm/api-go/source/models"
"github.com/fbonhomm/api-go/source/services"
"github.com/gin-gonic/gin"
"net/http"
)
// AuthLogin
func AuthLogin(c *gin.Context) {
user := models.User{
var accessToken string
var refreshToken string
var err error
var user = models.User{
Email: c.PostForm("email"),
}
if err := services.Db.First(&user).Error; err != nil {
if err = services.Db.First(&user).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
if err := user.Compare(c.PostForm("password")); err != nil {
} else if err = user.Compare(c.PostForm("password")); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error() })
return
} else if accessToken, err = libs.GenerateAccessToken(user); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
} else if refreshToken, err = libs.GenerateRefreshToken(user); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
} else {
c.JSON(http.StatusOK, gin.H{
"access_token": accessToken,
"refresh_token": refreshToken,
})
}
accessToken, err := libs.GenerateAccessToken(user)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error() })
return
}
refreshToken, err := libs.GenerateRefreshToken(user)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error() })
return
}
c.JSON(http.StatusOK, gin.H{
"access_token": accessToken,
"refresh_token": refreshToken,
})
}
// AuthRefresh
func AuthRefresh(c *gin.Context) {
user := models.User{}
var accessToken string
var refreshToken string
var err error
var user = models.User{}
token, _ := c.Get("Token")
info := token.(map[string]string)
token, _ := GetToken(c)
if err := services.Db.First(&user, info["id"]).Error; err != nil {
if err = services.Db.First(&user, token["id"]).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
} else if accessToken, err = libs.GenerateAccessToken(user); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
} else if refreshToken, err = libs.GenerateRefreshToken(user); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
} else {
c.JSON(http.StatusOK, gin.H{
"access_token": accessToken,
"refresh_token": refreshToken,
})
}
accessToken, err := libs.GenerateAccessToken(user)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error() })
return
}
refreshToken, err := libs.GenerateRefreshToken(user)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{ "error": err.Error() })
return
}
c.JSON(http.StatusOK, gin.H{
"access_token": accessToken,
"refresh_token": refreshToken,
})
}

View File

@ -0,0 +1,25 @@
/**
* Created by fbonhomm
* Email: flo-github@outlook.fr
* Licence: MIT
*/
package controllers
import (
"errors"
"github.com/gin-gonic/gin"
)
// GetToken
func GetToken(c *gin.Context) (info map[string]string, err error) {
token, ok := c.Get("Token")
if ok == false {
err = errors.New("token is not found")
} else {
info = token.(map[string]string)
}
return info, err
}

View File

@ -7,10 +7,12 @@
package libs
import (
"time"
"github.com/dgrijalva/jwt-go"
"github.com/fbonhomm/api-go/source/models"
"github.com/fbonhomm/api-go/source/services"
"time"
)
// GenerateAccessToken

View File

@ -11,6 +11,11 @@ import (
"golang.org/x/crypto/bcrypt"
)
// ID uint `gorm:"primary_key"`
// CreatedAt time.Time
// UpdatedAt time.Time
// DeletedAt *time.Time `sql:"index"`
type User struct {
gorm.Model
Name string `gorm:"type:varchar(50);not null" json:"name"`

View File

@ -17,6 +17,6 @@ import (
func Auth(router *gin.Engine) {
route := router.Group("/auth")
route.POST("/", validators.ValidateAuthLogin, controllers.AuthLogin)
route.POST("", validators.ValidateAuthLogin, controllers.AuthLogin)
route.POST("/refresh", middlewares.AuthRefresh, validators.ValidateAuthRefresh, controllers.AuthRefresh)
}

36
source/routers/index.go Normal file
View File

@ -0,0 +1,36 @@
/**
* Created by fbonhomm
* Email: flo-github@outlook.fr
* Licence: MIT
*/
package routers
import (
"os"
"time"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
// RouterInitialize
// Initialize all api route
func RouterInitialize() *gin.Engine {
routerEngine := gin.Default()
routerEngine.Use(cors.New(cors.Config{
AllowOrigins: []string{os.Getenv("HOST") + ":" + os.Getenv("PORT")},
AllowMethods: []string{"OPTIONS", "GET", "POST", "PUT", "DELETE"},
AllowHeaders: []string{"Origin", "Content-Type", "Content-Length", "Accept-Encoding", "Authorization"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
MaxAge: 12 * time.Hour,
}))
User(routerEngine)
Auth(routerEngine)
return routerEngine
}

View File

@ -17,7 +17,7 @@ import (
func User(router *gin.Engine) {
route := router.Group("/users")
route.POST("/", middlewares.Auth, validators.ValidateUserCreate, controllers.UserCreate)
route.POST("", middlewares.Auth, validators.ValidateUserCreate, controllers.UserCreate)
route.GET("/:id", middlewares.Auth, validators.ValidateUserGetId, controllers.UserGetId)
route.DELETE("/:id", middlewares.Auth, validators.ValidateUserDeleteId, controllers.UserDeleteId)
}

View File

@ -8,11 +8,12 @@ package services
import (
"crypto/ecdsa"
"github.com/dgrijalva/jwt-go"
"io/ioutil"
"os"
"github.com/dgrijalva/jwt-go"
)
const ROOT = "./source/services"
var PublicKeyAccess *ecdsa.PublicKey
var PrivateKeyAccess *ecdsa.PrivateKey
@ -22,16 +23,17 @@ var err error
func Jwt() {
var tmp []byte
var root = os.Getenv("ROOT") + "/source/services"
tmp, _ = ioutil.ReadFile(ROOT + "/jwt/access.public.pem")
tmp, err = ioutil.ReadFile(root + "/jwt/access.public.pem")
PublicKeyAccess, _ = jwt.ParseECPublicKeyFromPEM(tmp)
tmp, _ = ioutil.ReadFile(ROOT + "/jwt/access.private.pem")
tmp, _ = ioutil.ReadFile(root + "/jwt/access.private.pem")
PrivateKeyAccess, _ = jwt.ParseECPrivateKeyFromPEM(tmp)
tmp, _ = ioutil.ReadFile(ROOT + "/jwt/refresh.public.pem")
tmp, _ = ioutil.ReadFile(root + "/jwt/refresh.public.pem")
PublicKeyRefresh, _ = jwt.ParseECPublicKeyFromPEM(tmp)
tmp, _ = ioutil.ReadFile(ROOT + "/jwt/refresh.private.pem")
tmp, _ = ioutil.ReadFile(root + "/jwt/refresh.private.pem")
PrivateKeyRefresh, _ = jwt.ParseECPrivateKeyFromPEM(tmp)
}

View File

@ -12,8 +12,8 @@ import (
)
type authLogin struct {
Email string `form:"email" binding:"required,email"`
Password string `form:"password" binding:"required,min=8,max=50"`
Email string `form:"email" binding:"required,email"`
Password string `form:"password" binding:"required,min=8,max=50"`
}
type authRefresh struct {

View File

@ -7,8 +7,9 @@
package validators
import (
"github.com/gin-gonic/gin"
"net/http"
"github.com/gin-gonic/gin"
)
func errorHandling(c *gin.Context, msg string) {