82 lines
2.4 KiB
Go
82 lines
2.4 KiB
Go
package tools
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type BRouteSendAdapterConfig struct {
|
|
SidecarPath string
|
|
TimeoutSeconds int
|
|
Mode string
|
|
}
|
|
|
|
type bRouteSendMessageConnector struct {
|
|
config BRouteSendAdapterConfig
|
|
}
|
|
|
|
func NewBRouteSendMessageConnector(config BRouteSendAdapterConfig) SendMessageConnector {
|
|
config.Mode = strings.TrimSpace(strings.ToLower(config.Mode))
|
|
if config.Mode == "" {
|
|
config.Mode = "disabled"
|
|
}
|
|
return bRouteSendMessageConnector{config: config}
|
|
}
|
|
|
|
func (c bRouteSendMessageConnector) ExecuteSendMessage(_ context.Context, request SendMessageConnectorRequest) (SendMessageConnectorResult, error) {
|
|
switch c.config.Mode {
|
|
case "disabled":
|
|
result := SendMessageConnectorResult{
|
|
Accepted: false,
|
|
Status: "blocked",
|
|
ErrorCode: "broute_mode_blocked",
|
|
ErrorMessage: "B-route send adapter is disabled",
|
|
ConnectorMode: "broute-disabled",
|
|
}
|
|
return result, fmt.Errorf(result.ErrorMessage)
|
|
case "dry_run_contract":
|
|
if err := validateBRouteSendMessageRequest(request); err != nil {
|
|
return SendMessageConnectorResult{
|
|
Accepted: false,
|
|
Status: "failed",
|
|
ErrorCode: "broute_invalid_request",
|
|
ErrorMessage: err.Error(),
|
|
ConnectorMode: "broute-dry-run-contract",
|
|
}, nil
|
|
}
|
|
return SendMessageConnectorResult{
|
|
Accepted: false,
|
|
Status: "blocked",
|
|
ErrorCode: "broute_dry_run_only",
|
|
ErrorMessage: "B-route adapter dry_run_contract mode validates request shape only and does not start a sidecar",
|
|
ConnectorMode: "broute-dry-run-contract",
|
|
}, nil
|
|
default:
|
|
result := SendMessageConnectorResult{
|
|
Accepted: false,
|
|
Status: "blocked",
|
|
ErrorCode: "broute_mode_blocked",
|
|
ErrorMessage: "B-route send adapter mode is not enabled: " + c.config.Mode,
|
|
ConnectorMode: "broute-disabled",
|
|
}
|
|
return result, fmt.Errorf(result.ErrorMessage)
|
|
}
|
|
}
|
|
|
|
func validateBRouteSendMessageRequest(request SendMessageConnectorRequest) error {
|
|
if strings.TrimSpace(request.TargetRef) == "" {
|
|
return fmt.Errorf("target_ref is required")
|
|
}
|
|
if strings.TrimSpace(request.ContentSHA256) == "" {
|
|
return fmt.Errorf("content_sha256 is required")
|
|
}
|
|
if strings.TrimSpace(request.IdempotencyKeySHA256) == "" {
|
|
return fmt.Errorf("idempotency_key_sha256 is required")
|
|
}
|
|
if request.ExecutionMode != sendMessageProductionMode {
|
|
return fmt.Errorf("execution_mode must be production")
|
|
}
|
|
return nil
|
|
}
|