You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
2.4 KiB

2 years ago
package auth
2 years ago
import (
"context"
"fmt"
"net/http"
2 years ago
2 years ago
"git.slaventius.ru/test3k/auth/internal/config"
db "git.slaventius.ru/test3k/auth/internal/transport/grpc"
2 years ago
"git.slaventius.ru/test3k/umate/pkg/logger"
2 years ago
mux "github.com/go-chi/chi/v5"
"google.golang.org/grpc/status"
)
// ...
type AuthServer struct {
db *db.AuthDBClient
Router *mux.Mux
config *config.Config
2 years ago
logger *logger.Logger
2 years ago
ctx context.Context
}
func NewServer(ctx context.Context, config *config.Config) *AuthServer {
s := &AuthServer{
db: db.NewDBClient(ctx, config),
Router: mux.NewMux(),
config: config,
2 years ago
logger: logger.NewLogger("test3k:authService", config.Sentry.DSN),
2 years ago
ctx: ctx,
}
//
2 years ago
s.Router.Get("/api/v1/healthz", healthz(s))
2 years ago
//
2 years ago
s.Router.Post("/api/v1/login", login(s))
s.Router.Post("/api/v1/registration", registration(s))
s.Router.Post("/api/v1/confirmation", confirmation(s))
return s
}
2 years ago
func (s *AuthServer) GracefulStop() error {
return s.db.Close()
2 years ago
}
2 years ago
func healthz(s *AuthServer) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
2 years ago
w.WriteHeader(http.StatusOK)
w.Write([]byte("ok"))
}
}
2 years ago
func login(s *AuthServer) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
uid := r.FormValue("uid")
password := r.FormValue("password")
err := s.db.Login(uid, password)
if err != nil {
status := status.Convert(err)
2 years ago
//
s.logger.Error(status.Message())
//
2 years ago
w.Write([]byte(status.Message()))
return
}
w.Write([]byte(fmt.Sprintf("Success login for %s", uid)))
}
}
func registration(s *AuthServer) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
uid := r.FormValue("uid")
email := r.FormValue("email")
2 years ago
password := r.FormValue("password")
_, err := s.db.Registration(uid, email, password)
2 years ago
if err != nil {
status := status.Convert(err)
2 years ago
//
s.logger.Error(status.Message())
//
2 years ago
w.Write([]byte(status.Message()))
2 years ago
return
}
2 years ago
w.Write([]byte(fmt.Sprintf("Success registration for %s", uid)))
2 years ago
}
}
func confirmation(s *AuthServer) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
code := r.FormValue("code")
err := s.db.Confirmation(code)
if err != nil {
status := status.Convert(err)
2 years ago
//
s.logger.Error(status.Message())
//
2 years ago
w.Write([]byte(status.Message()))
return
}
w.Write([]byte(fmt.Sprintf("Success confirmation for %s", code)))
}
}