auth services, middleware, and other stuff
This commit is contained in:
58
cmd/main.go
58
cmd/main.go
@@ -6,33 +6,59 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"gitea.michaelthomson.dev/mthomson/habits/internal/auth"
|
||||
authhandler "gitea.michaelthomson.dev/mthomson/habits/internal/auth/handler"
|
||||
authservice "gitea.michaelthomson.dev/mthomson/habits/internal/auth/service"
|
||||
"gitea.michaelthomson.dev/mthomson/habits/internal/logging"
|
||||
"gitea.michaelthomson.dev/mthomson/habits/internal/middleware"
|
||||
"gitea.michaelthomson.dev/mthomson/habits/internal/migrate"
|
||||
todohandler "gitea.michaelthomson.dev/mthomson/habits/internal/todo/handler"
|
||||
todorepository "gitea.michaelthomson.dev/mthomson/habits/internal/todo/repository"
|
||||
todoservice "gitea.michaelthomson.dev/mthomson/habits/internal/todo/service"
|
||||
userhandler "gitea.michaelthomson.dev/mthomson/habits/internal/user/handler"
|
||||
userrepository "gitea.michaelthomson.dev/mthomson/habits/internal/user/repository"
|
||||
userservice "gitea.michaelthomson.dev/mthomson/habits/internal/user/service"
|
||||
pgxuuid "github.com/jackc/pgx-gofrs-uuid"
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
pgxuuid "github.com/jackc/pgx-gofrs-uuid"
|
||||
"github.com/joho/godotenv"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// create logger
|
||||
logger := logging.NewLogger()
|
||||
|
||||
// create middlewares
|
||||
contextMiddleware := middleware.ContextMiddleware(logger)
|
||||
loggingMiddleware := middleware.LoggingMiddleware(logger)
|
||||
// load env
|
||||
err := godotenv.Load()
|
||||
if err != nil {
|
||||
logger.Error(err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
stack := []middleware.Middleware{
|
||||
contextMiddleware,
|
||||
jwtSecretKey := os.Getenv("JWT_SECRET_KEY")
|
||||
postgresqlConnectionString := os.Getenv("POSTGRESQL_CONNECTION_STRING")
|
||||
|
||||
// create hasher instance
|
||||
argon2IdHash := auth.NewArgon2IdHash(1, 32, 64*1024, 32, 256)
|
||||
|
||||
// create middlewares
|
||||
traceMiddleware := middleware.TraceMiddleware(logger)
|
||||
loggingMiddleware := middleware.LoggingMiddleware(logger)
|
||||
authMiddleware := middleware.AuthMiddleware(logger, []byte(jwtSecretKey))
|
||||
|
||||
unauthenticatedStack := []middleware.Middleware{
|
||||
traceMiddleware,
|
||||
loggingMiddleware,
|
||||
}
|
||||
|
||||
authenticatedStack := []middleware.Middleware{
|
||||
traceMiddleware,
|
||||
loggingMiddleware,
|
||||
authMiddleware,
|
||||
}
|
||||
|
||||
// create db pool
|
||||
postgresUrl := "postgres://todo:password@localhost:5432/todo"
|
||||
dbconfig, err := pgxpool.ParseConfig(postgresUrl)
|
||||
dbconfig, err := pgxpool.ParseConfig(postgresqlConnectionString)
|
||||
if err != nil {
|
||||
logger.Error(err.Error())
|
||||
os.Exit(1)
|
||||
@@ -54,18 +80,26 @@ func main() {
|
||||
|
||||
// create repos
|
||||
todoRepository := todorepository.NewTodoRepository(logger, db)
|
||||
userRepository := userrepository.NewUserRepository(logger, db)
|
||||
|
||||
// create services
|
||||
todoService := todoservice.NewTodoService(logger, todoRepository)
|
||||
userService := userservice.NewUserService(logger, userRepository, argon2IdHash)
|
||||
authService := authservice.NewAuthService(logger, []byte(jwtSecretKey), userRepository, argon2IdHash)
|
||||
|
||||
// create mux
|
||||
mux := http.NewServeMux()
|
||||
|
||||
// register handlers
|
||||
mux.Handle("GET /todo/{id}", middleware.CompileMiddleware(todohandler.HandleTodoGet(logger, todoService), stack))
|
||||
mux.Handle("POST /todo", middleware.CompileMiddleware(todohandler.HandleTodoCreate(logger, todoService), stack))
|
||||
mux.Handle("DELETE /todo/{id}", middleware.CompileMiddleware(todohandler.HandleTodoDelete(logger, todoService), stack))
|
||||
mux.Handle("PUT /todo/{id}", middleware.CompileMiddleware(todohandler.HandleTodoUpdate(logger, todoService), stack))
|
||||
// auth
|
||||
mux.Handle("POST /login", middleware.CompileMiddleware(authhandler.HandleLogin(logger, authService), unauthenticatedStack))
|
||||
// users
|
||||
mux.Handle("POST /register", middleware.CompileMiddleware(userhandler.HandleRegisterUser(logger, userService), unauthenticatedStack))
|
||||
// todos
|
||||
mux.Handle("GET /todo/{id}", middleware.CompileMiddleware(todohandler.HandleTodoGet(logger, todoService), authenticatedStack))
|
||||
mux.Handle("POST /todo", middleware.CompileMiddleware(todohandler.HandleTodoCreate(logger, todoService), authenticatedStack))
|
||||
mux.Handle("DELETE /todo/{id}", middleware.CompileMiddleware(todohandler.HandleTodoDelete(logger, todoService), authenticatedStack))
|
||||
mux.Handle("PUT /todo/{id}", middleware.CompileMiddleware(todohandler.HandleTodoUpdate(logger, todoService), authenticatedStack))
|
||||
|
||||
// create server
|
||||
server := &http.Server{
|
||||
|
||||
Reference in New Issue
Block a user