polycule-connect/polyculeconnect/controller/ui/approval.go

68 lines
1.9 KiB
Go
Raw Normal View History

2024-03-29 17:21:26 +00:00
package ui
import (
"net/http"
"git.faercol.me/faercol/polyculeconnect/polyculeconnect/services/approval"
"github.com/sirupsen/logrus"
)
const (
ApprovalRoute = "/approval"
rememberKey = "remember"
)
type ApprovalController struct {
l *logrus.Logger
downstreamController http.Handler
srv approval.ApprovalService
}
func NewApprovalController(l *logrus.Logger, downstream http.Handler, srv approval.ApprovalService) *ApprovalController {
return &ApprovalController{
l: l,
downstreamController: downstream,
srv: srv,
}
}
func (ac *ApprovalController) handleGetApproval(r *http.Request) {
ac.l.Debug("Checking if approval is remembered")
remembered, err := ac.srv.IsRemembered(r.Context(), approval.Claim{Email: "kilgore@kilgore.trout", ClientID: "9854d42da9cd91369a293758d514178c73d2b9774971d8965945ab2b81e83e69"})
if err != nil {
ac.l.Errorf("Failed to check if approval is remembered: %s", err.Error())
return
}
if remembered {
ac.l.Info("Approval is remembered, skipping approval page")
return
} else {
ac.l.Info("Approval is not remembered, continuing")
}
}
func (ac *ApprovalController) handlePostApproval(r *http.Request) {
ac.l.Debug("Handling POST approval request")
if err := r.ParseForm(); err != nil {
ac.l.Errorf("Failed to parse request form: %s", err.Error())
return
}
if remember := r.Form.Get(rememberKey); remember == "on" {
if err := ac.srv.Remember(r.Context(), approval.Claim{Email: "kilgore@kilgore.trout", ClientID: "9854d42da9cd91369a293758d514178c73d2b9774971d8965945ab2b81e83e69"}); err != nil {
ac.l.Errorf("Failed to remember approval request: %s", err.Error())
}
}
}
func (ac *ApprovalController) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodPost {
ac.handlePostApproval(r)
} else if r.Method == http.MethodGet {
ac.handleGetApproval(r)
}
ac.downstreamController.ServeHTTP(w, r)
}