mattermost-push-proxy-router/router.go
Felipe M. 3c6fea8a46
All checks were successful
Release / release (push) Successful in 2m26s
CI / goreleaser-lint (push) Successful in 6s
CI / format (push) Successful in 28s
CI / test (push) Successful in 1m20s
CI / lint (push) Successful in 2m36s
CI / build (push) Successful in 34s
feat: add Mattermost push proxy prefix router
Implement a stateless Go service that routes /api/v1/send_push and /api/v1/ack
by platform prefix to configured backends, enabling mixed official and custom
mobile clients on a single PushNotificationServer URL.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 10:03:43 +02:00

36 lines
703 B
Go

package main
import (
"encoding/json"
"fmt"
"strings"
)
type routePayload struct {
Platform string `json:"platform"`
DeviceID string `json:"device_id"`
}
func extractPlatform(body []byte) (string, error) {
var msg routePayload
if err := json.Unmarshal(body, &msg); err != nil {
return "", fmt.Errorf("invalid JSON: %w", err)
}
if msg.Platform != "" {
return stripVersionSuffix(msg.Platform), nil
}
if idx := strings.Index(msg.DeviceID, ":"); idx > 0 {
return msg.DeviceID[:idx], nil
}
return "", fmt.Errorf("missing platform")
}
func stripVersionSuffix(platform string) string {
if idx := strings.Index(platform, "-v"); idx > 0 {
return platform[:idx]
}
return platform
}