customer/internal/server/http.go

78 lines
2.0 KiB
Go
Raw Normal View History

2023-05-16 01:12:07 +00:00
package server
import (
"context"
"fmt"
"net/http"
"time"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"github.com/sirupsen/logrus"
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/initialize"
"penahub.gitlab.yandexcloud.net/pena-services/pena-social-auth/internal/models"
)
type HTTP struct {
logger *logrus.Entry
server *http.Server
echo *echo.Echo
}
func New(logger *logrus.Logger) *HTTP {
echo := echo.New()
echo.Use(middleware.Logger())
echo.Use(middleware.Recover())
return &HTTP{
echo: echo,
logger: logrus.NewEntry(logger),
server: &http.Server{
Handler: echo,
MaxHeaderBytes: 1 << 20,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
},
}
}
func (receiver *HTTP) Listen(address string) error {
receiver.server.Addr = address
return receiver.server.ListenAndServe()
}
func (receiver *HTTP) Run(config *models.HTTPConfiguration) {
connectionString := fmt.Sprintf("%s:%s", config.Host, config.Port)
startServerMessage := fmt.Sprintf("starting http server on %s", connectionString)
receiver.logger.Infoln(startServerMessage)
if err := receiver.Listen(connectionString); err != nil && err != http.ErrServerClosed {
receiver.logger.Infoln("http listen error: ", err)
}
}
func (receiver *HTTP) Stop(ctx context.Context) error {
receiver.logger.Infoln("shutting down server ...")
if err := receiver.server.Shutdown(ctx); err != nil {
return fmt.Errorf("failed to shutdown server: %w", err)
}
return nil
}
func (receiver *HTTP) Register(controllers *initialize.Controllers) *HTTP {
groupAmocrm := receiver.echo.Group("/amocrm")
groupAmocrm.GET("/auth/redirect", controllers.AmocrmController.RedirectAuthURL)
groupAmocrm.GET("/auth", controllers.AmocrmController.GenerateAuthURL)
groupAmocrm.GET("/link/redirect", controllers.AmocrmController.RedirectLinkAccountURL)
groupAmocrm.GET("/link", controllers.AmocrmController.GenerateLinkAccountURL)
groupAmocrm.GET("/callback", controllers.AmocrmController.Callback)
return receiver
}