diff --git a/pool-server.go b/pool-server.go index 7d66be8..d74df41 100644 --- a/pool-server.go +++ b/pool-server.go @@ -219,15 +219,44 @@ var ( APIPassword = os.Getenv("KLARNA_API_PASSWORD") ) +func (s *PoolServer) HandleConfirmation(w http.ResponseWriter, r *http.Request, id CartId) error { + orderId := r.PathValue("orderId") + if orderId == "" { + return fmt.Errorf("orderId is empty") + } + req, err := http.NewRequest("GET", fmt.Sprintf("https://api.playground.klarna.com/checkout/v3/orders/%s", orderId), nil) + if err != nil { + return err + } + + req.Header.Add("Content-Type", "application/json") + req.SetBasicAuth(APIUsername, APIPassword) + + res, err := http.DefaultClient.Do(req) + if nil != err { + return err + } + buf := new(bytes.Buffer) + buf.ReadFrom(res.Body) + w.Header().Set("Content-Type", "application/json") + w.Header().Set("X-Pod-Name", s.pod_name) + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Access-Control-Allow-Origin", "*") + w.WriteHeader(res.StatusCode) + + w.Write(buf.Bytes()) + return nil +} + func (s *PoolServer) HandleCheckout(w http.ResponseWriter, r *http.Request, id CartId) error { reply, err := s.pool.Process(id, Message{ Type: CreateCheckoutOrderType, Content: &messages.CreateCheckoutOrder{ Terms: "https://slask-finder.tornberg.me/terms", - Checkout: "https://slask-finder.tornberg.me/checkout", - Confirmation: "https://slask-finder.tornberg.me/confirmation", - Push: "https://cart.tornberg.me/push", + Checkout: "https://slask-finder.tornberg.me/checkout?order_id={checkout.order.id}", + Confirmation: "https://slask-finder.tornberg.me/confirmation/{checkout.order.id}", + Push: "https://cart.tornberg.me/push?order_id={checkout.order.id}", }, }) if err != nil { @@ -314,6 +343,7 @@ func (s *PoolServer) Serve() *http.ServeMux { mux.HandleFunc("DELETE /delivery/{deliveryId}", ErrorHandler(CookieCartIdHandler(s.HandleRemoveDelivery))) mux.HandleFunc("PUT /delivery/{deliveryId}/pickupPoint", ErrorHandler(CookieCartIdHandler(s.HandleSetPickupPoint))) mux.HandleFunc("GET /checkout", ErrorHandler(CookieCartIdHandler(s.HandleCheckout))) + mux.HandleFunc("GET /confirmation/{orderId}", ErrorHandler(CookieCartIdHandler(s.HandleConfirmation))) mux.HandleFunc("GET /byid/{id}", ErrorHandler(CartIdHandler(s.HandleGet))) mux.HandleFunc("GET /byid/{id}/add/{sku}", ErrorHandler(CartIdHandler(s.HandleAddSku)))