Refactor
This commit is contained in:
@@ -9,10 +9,7 @@ import (
|
|||||||
"github.com/go-pg/migrations/v8"
|
"github.com/go-pg/migrations/v8"
|
||||||
"github.com/go-pg/pg/v10"
|
"github.com/go-pg/pg/v10"
|
||||||
|
|
||||||
"git.ego.freeddns.org/egommerce/go-api-pkg/fluentd"
|
cnf "git.ego.freeddns.org/egommerce/go-api-pkg/config"
|
||||||
|
|
||||||
baseCnf "git.ego.freeddns.org/egommerce/go-api-pkg/config"
|
|
||||||
cnf "git.ego.freeddns.org/egommerce/identity-service/internal/server"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -39,49 +36,39 @@ func main() {
|
|||||||
}
|
}
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
if baseCnf.ErrLoadingEnvs != nil {
|
if cnf.ErrLoadingEnvs != nil {
|
||||||
log.Panicln(baseCnf.ErrLoadingEnvs)
|
log.Panicln(cnf.ErrLoadingEnvs)
|
||||||
}
|
}
|
||||||
|
|
||||||
c := cnf.NewConfig("migrator")
|
// c := cnf.NewConfig("migrator")
|
||||||
|
|
||||||
// dbURL := baseCnf.GetEnv("DATABASE_URL", defDbURL)
|
// dbURL := baseCnf.GetEnv("DATABASE_URL", defDbURL)
|
||||||
|
|
||||||
logHost, logPort, err := fluentd.ParseAddr(c.LoggerAddr)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error parsing logger addr: %s. Err: %v", c.LoggerAddr, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
logger, err := fluentd.NewLogger(c.GetAppFullName(), logHost, logPort) // @Refactor NewLogger return (logger, error)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error connecting to %s:%d. Err: %v", logHost, logPort, err)
|
|
||||||
}
|
|
||||||
defer logger.Close()
|
|
||||||
|
|
||||||
db := pg.Connect(&pg.Options{ // FIXME
|
db := pg.Connect(&pg.Options{ // FIXME
|
||||||
Addr: "db:5432",
|
Addr: "db-postgres:5432",
|
||||||
User: "egommerce",
|
User: "postgres",
|
||||||
Password: "12345678",
|
Password: "12345678",
|
||||||
Database: "egommerce",
|
Database: "egommerce",
|
||||||
})
|
})
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
mTbl := baseCnf.GetEnv("MIGRATIONS_TABLE_NAME", defMigrationsTableName)
|
mTbl := cnf.GetEnv("MIGRATIONS_TABLE_NAME", defMigrationsTableName)
|
||||||
|
|
||||||
mig := migrations.NewCollection()
|
mig := migrations.NewCollection()
|
||||||
mig.SetTableName(mTbl)
|
mig.SetTableName(mTbl)
|
||||||
if err := mig.DiscoverSQLMigrations("./migrations"); err != nil {
|
if err := mig.DiscoverSQLMigrations("./migrations"); err != nil {
|
||||||
logger.Log("migration dicovery error: %#v", err)
|
log.Printf("migration dicovery error: %#v\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
oldVersion, newVersion, err := mig.Run(db, flag.Args()...)
|
oldVersion, newVersion, err := mig.Run(db, flag.Args()...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log("migration runner error: %#v", err)
|
log.Printf("migration runner error: %#v", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
if newVersion != oldVersion {
|
if newVersion != oldVersion {
|
||||||
logger.Log("migrated from version %d to %d\n", oldVersion, newVersion)
|
log.Printf("migrated from version %d to %d\n", oldVersion, newVersion)
|
||||||
} else {
|
} else {
|
||||||
logger.Log("version is %d\n", oldVersion)
|
log.Printf("version is %d\n", oldVersion)
|
||||||
}
|
}
|
||||||
// os.Exit(0)
|
// os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ func main() {
|
|||||||
|
|
||||||
doer := server.New(c)
|
doer := server.New(c)
|
||||||
a := app.NewApp(doer)
|
a := app.NewApp(doer)
|
||||||
a.RegisterPlugin(app.LoggerPlugin(cArr))
|
|
||||||
a.RegisterPlugin(app.CachePlugin(cArr))
|
a.RegisterPlugin(app.CachePlugin(cArr))
|
||||||
a.RegisterPlugin(app.DatabasePlugin(cArr))
|
a.RegisterPlugin(app.DatabasePlugin(cArr))
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
package app
|
package app
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.ego.freeddns.org/egommerce/go-api-pkg/fluentd"
|
|
||||||
db "git.ego.freeddns.org/egommerce/identity-service/pkg/database"
|
db "git.ego.freeddns.org/egommerce/identity-service/pkg/database"
|
||||||
redis "github.com/go-redis/redis/v8"
|
redis "github.com/go-redis/redis/v8"
|
||||||
)
|
)
|
||||||
@@ -69,24 +66,3 @@ func DatabasePlugin(cArr map[string]string) Plugin {
|
|||||||
// },
|
// },
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
func LoggerPlugin(cArr map[string]string) Plugin {
|
|
||||||
return Plugin{
|
|
||||||
name: "logger",
|
|
||||||
fn: func() any { // FIXME: return type
|
|
||||||
logHost, logPort, err := fluentd.ParseAddr(cArr["loggerAddr"])
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Failed to parse FluentD address: %s. Err: %v", cArr["loggerAddr"], err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
logger, err := fluentd.NewLogger(cArr["appFullname"], logHost, logPort)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Failed to connect to the FluentD on %s:%d. Err: %v", logHost, logPort, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
return logger
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ const (
|
|||||||
defDbURL = "postgres://postgres:12345678@db-postgres:5432/egommerce"
|
defDbURL = "postgres://postgres:12345678@db-postgres:5432/egommerce"
|
||||||
defEventBusURL = "amqp://guest:guest@api-eventbus:5672"
|
defEventBusURL = "amqp://guest:guest@api-eventbus:5672"
|
||||||
defKVNmspc = "dev.egommerce/service/identity"
|
defKVNmspc = "dev.egommerce/service/identity"
|
||||||
defLoggerAddr = "api-logger:24224"
|
|
||||||
defNetAddr = ":443"
|
defNetAddr = ":443"
|
||||||
defMongoDbURL = "mongodb://mongodb:12345678@mongo-db:27017"
|
defMongoDbURL = "mongodb://mongodb:12345678@mongo-db:27017"
|
||||||
defPathPrefix = "/identity"
|
defPathPrefix = "/identity"
|
||||||
@@ -37,7 +36,6 @@ type Config struct {
|
|||||||
ReadTimeout time.Duration // miliseconds
|
ReadTimeout time.Duration // miliseconds
|
||||||
WriteTimeout time.Duration // miliseconds
|
WriteTimeout time.Duration // miliseconds
|
||||||
|
|
||||||
LoggerAddr string `json:"logger_addr"`
|
|
||||||
DbURL string `json:"db_url"`
|
DbURL string `json:"db_url"`
|
||||||
CacheAddr string `json:"cache_addr"`
|
CacheAddr string `json:"cache_addr"`
|
||||||
CacheUsername string `json:"cache_username"`
|
CacheUsername string `json:"cache_username"`
|
||||||
@@ -61,7 +59,6 @@ func NewConfig(name string) *Config {
|
|||||||
c.DbURL = cnf.GetEnv("API_DATABASE_URL", defDbURL)
|
c.DbURL = cnf.GetEnv("API_DATABASE_URL", defDbURL)
|
||||||
c.EventBusExchange = defEbEventsExchange
|
c.EventBusExchange = defEbEventsExchange
|
||||||
c.EventBusURL = cnf.GetEnv("API_EVENTBUS_URL", defEventBusURL)
|
c.EventBusURL = cnf.GetEnv("API_EVENTBUS_URL", defEventBusURL)
|
||||||
c.LoggerAddr = cnf.GetEnv("API_LOGGER_ADDR", defLoggerAddr)
|
|
||||||
c.PathPrefix = cnf.GetEnv("APP_PATH_PREFIX", defPathPrefix)
|
c.PathPrefix = cnf.GetEnv("APP_PATH_PREFIX", defPathPrefix)
|
||||||
|
|
||||||
return c
|
return c
|
||||||
@@ -96,7 +93,6 @@ func (c *Config) GetArray() map[string]string { // FIXME fix types etc
|
|||||||
arr["dbURL"] = c.DbURL
|
arr["dbURL"] = c.DbURL
|
||||||
arr["eventBusExchange"] = c.EventBusExchange
|
arr["eventBusExchange"] = c.EventBusExchange
|
||||||
arr["eventBusURL"] = c.EventBusURL
|
arr["eventBusURL"] = c.EventBusURL
|
||||||
arr["loggerAddr"] = c.LoggerAddr
|
|
||||||
|
|
||||||
return arr
|
return arr
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,15 @@
|
|||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
dto "git.ego.freeddns.org/egommerce/api-entities/identity/dto"
|
||||||
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
|
"git.ego.freeddns.org/egommerce/identity-service/internal/service"
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AuthLoginRequest struct {
|
func (s *Server) LoginHandlerFn(c *fiber.Ctx) error {
|
||||||
Username string `json:"username"`
|
data := new(dto.AuthLoginRequestDTO)
|
||||||
Password string `json:"password"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type AuthLoginResponse struct {
|
|
||||||
JWTToken string `json:"jwt_token"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) LoginHandler(c *fiber.Ctx) error {
|
|
||||||
data := new(AuthLoginRequest)
|
|
||||||
if err := c.BodyParser(data); err != nil {
|
if err := c.BodyParser(data); err != nil {
|
||||||
return err
|
return s.Error(c, fiber.StatusBadRequest, "Error parsing input")
|
||||||
}
|
}
|
||||||
|
|
||||||
token, err := service.AuthService.Login(data.Username, data.Password)
|
token, err := service.AuthService.Login(data.Username, data.Password)
|
||||||
@@ -25,9 +17,5 @@ func (s *Server) LoginHandler(c *fiber.Ctx) error {
|
|||||||
return fiber.NewError(fiber.StatusUnauthorized)
|
return fiber.NewError(fiber.StatusUnauthorized)
|
||||||
}
|
}
|
||||||
|
|
||||||
cookie := service.AuthService.Cookie("auth_token", token)
|
return c.JSON(&dto.AuthLoginResponseDTO{Token: token})
|
||||||
// ^^ FIXME move cookkie creation to separate service
|
|
||||||
c.Cookie(cookie)
|
|
||||||
|
|
||||||
return c.JSON(&AuthLoginResponse{JWTToken: token})
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func SetupRouter(s *Server) {
|
|||||||
|
|
||||||
s.Get("/health", s.HealthHandler)
|
s.Get("/health", s.HealthHandler)
|
||||||
|
|
||||||
api := s.Group("/api")
|
s.Group("/v1").
|
||||||
v1 := api.Group("/v1")
|
Post("/login", s.LoginHandlerFn).
|
||||||
v1.Post("/login", s.LoginHandler)
|
Post("/register", s.RegisterHandlerFn)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,7 @@ import (
|
|||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
"github.com/jackc/pgx/v5/pgxpool"
|
"github.com/jackc/pgx/v5/pgxpool"
|
||||||
|
|
||||||
"git.ego.freeddns.org/egommerce/api-entities/common/dto"
|
dto "git.ego.freeddns.org/egommerce/api-entities/common/dto"
|
||||||
"git.ego.freeddns.org/egommerce/go-api-pkg/fluentd"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
@@ -46,7 +45,6 @@ func (s *Server) Start() error {
|
|||||||
SetupMiddleware(s)
|
SetupMiddleware(s)
|
||||||
SetupRouter(s)
|
SetupRouter(s)
|
||||||
|
|
||||||
// fmt.Printf("Starting server at: %s...\n", s.addr)
|
|
||||||
crt, err := tls.LoadX509KeyPair("certs/identity-svc.crt", "certs/identity-svc.key")
|
crt, err := tls.LoadX509KeyPair("certs/identity-svc.crt", "certs/identity-svc.key")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -65,12 +63,11 @@ func (s *Server) RegisterHandler(name string, fn func() any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) OnShutdown() {
|
func (s *Server) OnShutdown() {
|
||||||
s.GetLogger().Log("Server %s is going down...", s.ID)
|
log.Printf("Server %s is going down...", s.ID)
|
||||||
|
|
||||||
// s.GetEventBus().Close()
|
// s.GetEventBus().Close()
|
||||||
s.GetDatabase().Close()
|
s.GetDatabase().Close()
|
||||||
s.GetLogger().Log("Gone.")
|
log.Printf("Gone.")
|
||||||
s.GetLogger().Close()
|
|
||||||
|
|
||||||
s.Shutdown()
|
s.Shutdown()
|
||||||
}
|
}
|
||||||
@@ -100,7 +97,3 @@ func (s *Server) GetDatabase() *pgxpool.Pool { // FIXME hardcoded index issue
|
|||||||
// func (s *Server) GetEventBus() *amqp.Channel {
|
// func (s *Server) GetEventBus() *amqp.Channel {
|
||||||
// return (s.handlers["eventbus"]).(*amqp.Channel)
|
// return (s.handlers["eventbus"]).(*amqp.Channel)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
func (s *Server) GetLogger() *fluentd.Logger {
|
|
||||||
return (s.handlers["logger"]).(*fluentd.Logger)
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -2,10 +2,6 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"strconv"
|
|
||||||
|
|
||||||
baseCnf "git.ego.freeddns.org/egommerce/go-api-pkg/config"
|
|
||||||
"github.com/gofiber/fiber/v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -16,18 +12,14 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
cookieExpireTime, _ := strconv.Atoi(baseCnf.GetEnv("AUTH_COOKIE_EXPIRE_TIME", "5"))
|
AuthService = &Auth{}
|
||||||
AuthService = &Auth{"jwt_token", "jwt_token_refresh", cookieExpireTime}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Auth struct {
|
type Auth struct {
|
||||||
TokenCookieName string
|
|
||||||
RefreshTokenCookieName string
|
|
||||||
cookieExpireTime int
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Auth) Login(login, pass string) (string, error) {
|
func (a *Auth) Login(login, passwd string) (string, error) {
|
||||||
if login == "admin" && pass == "secret" {
|
if login == "admin" && passwd == "secret" { // FIXME hardcoded
|
||||||
token, err := JWTService.CreateToken()
|
token, err := JWTService.CreateToken()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -39,12 +31,7 @@ func (a *Auth) Login(login, pass string) (string, error) {
|
|||||||
return "", ErrLoginIncorrect
|
return "", ErrLoginIncorrect
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cookie create fiber.Cookie struct
|
func (a *Auth) Register(email, login, passwd string) (string, error) {
|
||||||
func (a *Auth) Cookie(name, value string) *fiber.Cookie {
|
|
||||||
return &fiber.Cookie{
|
return "user-uuid", nil
|
||||||
Name: name,
|
|
||||||
Value: value,
|
|
||||||
MaxAge: a.cookieExpireTime * 300, // FIXME: env/config
|
|
||||||
Path: "/", // FIXME: env/config
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ func (s *JWT) CreateToken() (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||||
|
|
||||||
return token.SignedString(s.tokenSecret)
|
return token.SignedString(s.tokenSecret)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user