69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/jmoiron/sqlx"
|
|
"main/token"
|
|
)
|
|
|
|
// Server serves HTTP requests for our banking service.
|
|
type Server struct {
|
|
store *sqlx.DB
|
|
tokenMaker token.Maker
|
|
router *gin.Engine
|
|
}
|
|
|
|
/*
|
|
|
|
Install
|
|
go get github.com/jmoiron/sqlx
|
|
go get -u github.com/golang-jwt/jwt/v5
|
|
go get -u github.com/o1egl/paseto
|
|
|
|
*/
|
|
|
|
var TokenSymmetricKey = "12345678901234567890123456789012"
|
|
|
|
func NewServer(store *sqlx.DB) (*Server, error) {
|
|
// NewPasetoMaker or NewJWTMaker, First use NewPasetoMaker
|
|
tokenMaker, err := token.NewPasetoMaker(TokenSymmetricKey)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("cannot create token maker: %w", err)
|
|
}
|
|
|
|
server := &Server{
|
|
store: store,
|
|
tokenMaker: tokenMaker,
|
|
}
|
|
|
|
server.setupRouter()
|
|
return server, nil
|
|
}
|
|
|
|
func (server *Server) setupRouter() {
|
|
router := gin.Default()
|
|
// Default routers
|
|
router.GET("/welcome", server.welcome)
|
|
router.POST("/create_user", server.createUser)
|
|
router.POST("/login", server.loginUser)
|
|
|
|
// Authentication routers
|
|
authRoutes := router.Group("/").Use(authMiddleware(server.tokenMaker))
|
|
authRoutes.GET("/users", server.listUsers)
|
|
authRoutes.GET("/users/:user_id", server.getUser)
|
|
authRoutes.GET("/guilds/:guild_id", server.getGuild)
|
|
authRoutes.POST("/guilds", server.createGuild)
|
|
authRoutes.DELETE("/guilds/:guild_id", server.deleteGuild)
|
|
|
|
server.router = router
|
|
}
|
|
|
|
func (server *Server) Start(address string) error {
|
|
return server.router.Run(address)
|
|
}
|
|
|
|
func errorResponse(err error) gin.H {
|
|
return gin.H{"error": err.Error()}
|
|
}
|