portal/api/account/account.go

85 lines
1.7 KiB
Go

package account
import (
"context"
"git.lumeweb.com/LumeWeb/portal/account"
"git.lumeweb.com/LumeWeb/portal/api/middleware"
"git.lumeweb.com/LumeWeb/portal/api/registry"
"github.com/spf13/viper"
"go.sia.tech/jape"
"go.uber.org/fx"
)
var (
_ registry.API = (*AccountAPI)(nil)
)
type AccountAPI struct {
config *viper.Viper
accounts *account.AccountServiceDefault
httpHandler *HttpHandler
}
type AccountAPIParams struct {
fx.In
Config *viper.Viper
Accounts *account.AccountServiceDefault
HttpHandler *HttpHandler
}
func NewS5(params AccountAPIParams) AccountApiResult {
api := &AccountAPI{
config: params.Config,
accounts: params.Accounts,
httpHandler: params.HttpHandler,
}
return AccountApiResult{
API: api,
AccountAPI: api,
}
}
func InitAPI(api *AccountAPI) error {
return api.Init()
}
var Module = fx.Module("s5_api",
fx.Provide(NewS5),
fx.Provide(NewHttpHandler),
)
type AccountApiResult struct {
fx.Out
API registry.API `group:"api"`
AccountAPI *AccountAPI
}
func (a AccountAPI) Name() string {
return "account"
}
func (a *AccountAPI) Init() error {
middleware.RegisterProtocolSubdomain(a.config, jape.Mux(getRoutes(a)), "s5")
return nil
}
func (a AccountAPI) Start(ctx context.Context) error {
return nil
}
func (a AccountAPI) Stop(ctx context.Context) error {
return nil
}
func getRoutes(a *AccountAPI) map[string]jape.Handler {
return map[string]jape.Handler{
"/api/auth/login": a.httpHandler.login,
"/api/auth/register": a.httpHandler.register,
"/api/auth/otp/generate": a.httpHandler.otpGenerate,
"/api/auth/otp/verify": a.httpHandler.otpVerify,
"/api/auth/otp/validate": a.httpHandler.otpValidate,
"/api/auth/otp/disable": a.httpHandler.otpDisable,
}
}