Rename config vars. Add widget holder template and endpoint to serve it. Add dockerfile
This commit is contained in:
@@ -15,6 +15,7 @@ import (
|
||||
"payouts/internal/api/payout"
|
||||
"payouts/internal/api/user"
|
||||
"payouts/internal/api/version"
|
||||
"payouts/internal/api/widget"
|
||||
appConfig "payouts/internal/config"
|
||||
"payouts/internal/service/monitoring"
|
||||
)
|
||||
@@ -25,6 +26,7 @@ var Module = fx.Options(
|
||||
health.Module,
|
||||
payout.Module,
|
||||
version.Module,
|
||||
widget.Module,
|
||||
monitoring.Module,
|
||||
|
||||
fx.Invoke(RegisterRoutes),
|
||||
@@ -41,8 +43,9 @@ type Params struct {
|
||||
|
||||
PayoutHandler payout.Handler
|
||||
UserHandler user.Handler
|
||||
Version version.Handler
|
||||
HealthHandler health.Handler
|
||||
Version version.Handler
|
||||
Widget widget.Handler
|
||||
|
||||
Metrics monitoring.Metrics
|
||||
}
|
||||
@@ -77,6 +80,9 @@ func RegisterRoutes(p Params, lc fx.Lifecycle) {
|
||||
payoutRouter.HandleFunc(payout.CreateRoute, p.PayoutHandler.PayoutCreate).Methods(http.MethodPost)
|
||||
payoutRouter.HandleFunc(payout.CallbackRoute, p.PayoutHandler.PayoutCallback).Methods(http.MethodPost)
|
||||
|
||||
// Widget endpoint
|
||||
router.HandleFunc(widget.WidgetPage, p.Widget.WidgetHandler).Methods(http.MethodGet)
|
||||
|
||||
// collect api metrics
|
||||
apiRouter.Use(p.Metrics.GetMiddleware())
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ func (p *payoutHandler) GetSbpBanks(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
// PaymentCreate implements [Handler].
|
||||
// PayoutCreate implements [Handler].
|
||||
func (p *payoutHandler) PayoutCreate(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
|
||||
@@ -203,7 +203,7 @@ func (p *payoutHandler) delayedPayoutUpdate(ctx context.Context, payoutData *yoo
|
||||
}
|
||||
}
|
||||
|
||||
// PaymentCallback implements [Handler].
|
||||
// PayoutCallback implements [Handler].
|
||||
func (p *payoutHandler) PayoutCallback(w http.ResponseWriter, r *http.Request) {
|
||||
// todo: check also the X-real-ip and/or X-Forwarded-For
|
||||
if p.yookassaConf.CheckAllowedCallbackAddress && !p.checkAllowedIpCallback(r.RemoteAddr) {
|
||||
|
||||
9
internal/api/widget/module.go
Normal file
9
internal/api/widget/module.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package widget
|
||||
|
||||
import (
|
||||
"go.uber.org/fx"
|
||||
)
|
||||
|
||||
var Module = fx.Options(
|
||||
fx.Provide(NewWidgetHandler),
|
||||
)
|
||||
55
internal/api/widget/widget_handler.go
Normal file
55
internal/api/widget/widget_handler.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package widget
|
||||
|
||||
import (
|
||||
"html/template"
|
||||
"net/http"
|
||||
|
||||
"go.uber.org/fx"
|
||||
|
||||
"payouts/internal/service/yookassa"
|
||||
yookassaConf "payouts/internal/service/yookassa/config"
|
||||
"payouts/internal/templates"
|
||||
)
|
||||
|
||||
const WidgetPage = "/payout/widget"
|
||||
|
||||
type Handler interface {
|
||||
WidgetHandler(http.ResponseWriter, *http.Request)
|
||||
}
|
||||
|
||||
type widgetHandler struct {
|
||||
template *template.Template
|
||||
config yookassaConf.YooKassa
|
||||
}
|
||||
|
||||
// Params represents the module input params
|
||||
type Params struct {
|
||||
fx.In
|
||||
|
||||
YookassaService yookassa.Service
|
||||
}
|
||||
|
||||
func NewWidgetHandler(p Params) (Handler, error) {
|
||||
return &widgetHandler{
|
||||
template: templates.Templates,
|
||||
config: p.YookassaService.GetConfig(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// WidgetHandler renders the payouts widget page
|
||||
func (h *widgetHandler) WidgetHandler(w http.ResponseWriter, r *http.Request) {
|
||||
data := struct {
|
||||
ApiPayoutKey string
|
||||
WidgetVersion string
|
||||
}{
|
||||
ApiPayoutKey: h.config.ApiPayoutKey,
|
||||
WidgetVersion: h.config.WidgetVersion,
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
err := h.template.ExecuteTemplate(w, "payouts-widget.html", data)
|
||||
if err != nil {
|
||||
http.Error(w, "internal error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user