Files
Hein 94fc899bab
Some checks failed
CI / Test (1.22) (push) Failing after -25m23s
CI / Test (1.23) (push) Failing after -25m25s
CI / Build (push) Failing after -25m51s
CI / Lint (push) Failing after -25m40s
Updated qr code events and tls server
2025-12-29 17:22:06 +02:00

58 lines
1.7 KiB
Go

package handlers
import (
"net/http"
"git.warky.dev/wdevs/whatshooked/pkg/logging"
"git.warky.dev/wdevs/whatshooked/pkg/whatsapp/whatsmeow"
)
// ServeQRCode serves the QR code image for a WhatsApp account
func (h *Handlers) ServeQRCode(w http.ResponseWriter, r *http.Request) {
// Expected path format: /api/qr/{accountID}
path := r.URL.Path[len("/api/qr/"):]
accountID := path
if accountID == "" {
http.Error(w, "Invalid QR code path", http.StatusBadRequest)
return
}
// Get client from manager
client, exists := h.whatsappMgr.GetClient(accountID)
if !exists {
http.Error(w, "Account not found", http.StatusNotFound)
return
}
// Type assert to whatsmeow client (only whatsmeow clients have QR codes)
whatsmeowClient, ok := client.(*whatsmeow.Client)
if !ok {
http.Error(w, "QR codes are only available for whatsmeow clients", http.StatusBadRequest)
logging.Warn("QR code requested for non-whatsmeow client", "account_id", accountID)
return
}
// Get QR code PNG
pngData, err := whatsmeowClient.GetQRCodePNG()
if err != nil {
if err.Error() == "no QR code available" {
http.Error(w, "No QR code available. The account may already be connected or pairing has not started yet.", http.StatusNotFound)
} else {
logging.Error("Failed to generate QR code PNG", "account_id", accountID, "error", err)
http.Error(w, "Failed to generate QR code", http.StatusInternalServerError)
}
return
}
// Set headers
w.Header().Set("Content-Type", "image/png")
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
w.Header().Set("Pragma", "no-cache")
w.Header().Set("Expires", "0")
// Write PNG data
writeBytes(w, pngData)
logging.Debug("QR code served", "account_id", accountID)
}