add authentication endpoints and Redis integration

This commit is contained in:
2025-08-06 02:58:15 +03:00
parent deab475eab
commit 416fefdb6b
14 changed files with 340 additions and 530 deletions

View File

@ -0,0 +1,4 @@
package handler
//go:generate go tool oapi-codegen -config ../../../../api/auth/cfg.yaml ../../../../api/auth/api.yam
//go:generate go tool oapi-codegen -config ../../../../api/auth/cfg.yaml ../../../../api/auth/api.yaml

View File

@ -0,0 +1,114 @@
package handler
import (
"context"
"fmt"
"git.logidex.ru/fakz9/logidex-id/internal/hydra_client"
"git.logidex.ru/fakz9/logidex-id/internal/redis"
"github.com/gofiber/fiber/v2"
hydraApi "github.com/ory/hydra-client-go"
)
type AuthHandler struct{}
func (a AuthHandler) PostAuthConsentAccept(ctx context.Context, request PostAuthConsentAcceptRequestObject) (PostAuthConsentAcceptResponseObject, error) {
hydraClient := hydra_client.GetClient()
hydraRequest := hydraApi.AcceptConsentRequest{}
hydraRequest.SetGrantScope([]string{"openid"})
hydraRequest.SetRemember(true)
hydraRequest.SetRememberFor(3600) // 1 hour
hydraResponse, r, err := hydraClient.AdminApi.
AcceptConsentRequest(ctx).
ConsentChallenge(request.Body.ConsentChallenge).
AcceptConsentRequest(hydraRequest).
Execute()
if err != nil {
return PostAuthConsentAccept400JSONResponse{
RedirectUrl: "",
Ok: false,
Message: "Failed to accept consent request",
}, nil
}
fmt.Println(r)
return PostAuthConsentAccept200JSONResponse{
RedirectUrl: hydraResponse.RedirectTo,
Ok: true,
Message: "Успешно",
}, nil
}
func (a AuthHandler) PostAuthOtpRequest(ctx context.Context, request PostAuthOtpRequestRequestObject) (PostAuthOtpRequestResponseObject, error) {
redisClient := redis.GetClient()
// TODO implement OTP request logic
err := redisClient.Do(ctx, redisClient.B().Set().Key("otp:"+request.Body.PhoneNumber).Value("123456").Build()).Error()
if err != nil {
return PostAuthOtpRequest400JSONResponse{
Message: "Failed to set OTP in Redis",
Ok: false,
}, nil
}
return PostAuthOtpRequest200JSONResponse{
Message: "Код успешно отправлен",
Ok: true,
}, nil
}
func (a AuthHandler) PostAuthOtpVerify(ctx context.Context, request PostAuthOtpVerifyRequestObject) (PostAuthOtpVerifyResponseObject, error) {
redisClient := redis.GetClient()
hydraClient := hydra_client.GetClient()
sentOtp, err := redisClient.Do(ctx, redisClient.B().Get().Key("otp:"+request.Body.PhoneNumber).Build()).ToString()
if err != nil {
return PostAuthOtpVerify400JSONResponse{
RedirectUrl: "",
Ok: false,
}, nil
}
if sentOtp != request.Body.Otp {
return PostAuthOtpVerify400JSONResponse{
RedirectUrl: "",
Ok: false,
}, nil
}
hydraRequest := hydraApi.AcceptLoginRequest{}
// TODO read user from database by phone number
hydraRequest.SetSubject("some-user-id") // Replace with actual user ID
hydraRequest.SetRemember(true)
hydraRequest.SetRememberFor(3600) // 1 hour
hydraResponse, r, err := hydraClient.AdminApi.
AcceptLoginRequest(ctx).
LoginChallenge(request.Body.LoginChallenge).
AcceptLoginRequest(hydraRequest).
Execute()
fmt.Println(r)
if err != nil {
return PostAuthOtpVerify400JSONResponse{
RedirectUrl: "",
Ok: false,
}, nil
}
return PostAuthOtpVerify200JSONResponse{
RedirectUrl: hydraResponse.RedirectTo,
Ok: true,
}, nil
}
var _ StrictServerInterface = (*AuthHandler)(nil)
func NewAuthHandler() *AuthHandler {
return &AuthHandler{}
}
func RegisterApp(router fiber.Router) {
//authGroup := router.Group("/auth")
server := NewStrictHandler(NewAuthHandler(), nil)
RegisterHandlers(router, server)
}