diff options
Diffstat (limited to 'internal/clients/handlers/basehandler.go')
| -rw-r--r-- | internal/clients/handlers/basehandler.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/internal/clients/handlers/basehandler.go b/internal/clients/handlers/basehandler.go index 1a500dc..1debb98 100644 --- a/internal/clients/handlers/basehandler.go +++ b/internal/clients/handlers/basehandler.go @@ -90,6 +90,9 @@ func (h *baseHandler) handleMessage(message string) { h.handleHiddenMessage(message) return } + if h.handleAuthKeyMessage(message) { + return + } // Add newline only if the message doesn't already end with one if len(message) > 0 && message[len(message)-1] == '\n' { @@ -99,6 +102,48 @@ func (h *baseHandler) handleMessage(message string) { } } +func (h *baseHandler) handleAuthKeyMessage(message string) bool { + isAuthKeyMessage, authKeyOK, authKeyDetail := parseAuthKeyMessage(message) + if !isAuthKeyMessage { + return false + } + + if authKeyOK { + dlog.Client.Debug(h.server, "AUTHKEY registration accepted by server") + return true + } + + if authKeyDetail == "" { + dlog.Client.Warn(h.server, "AUTHKEY registration failed") + return true + } + + dlog.Client.Warn(h.server, "AUTHKEY registration failed", authKeyDetail) + return true +} + +func parseAuthKeyMessage(message string) (isAuthKeyMessage bool, ok bool, detail string) { + if message == "" { + return false, false, "" + } + + payload := strings.TrimSpace(message) + parts := strings.Split(payload, protocol.FieldDelimiter) + if len(parts) > 0 { + payload = strings.TrimSpace(parts[len(parts)-1]) + } + + switch { + case payload == "AUTHKEY OK": + return true, true, "" + case strings.HasPrefix(payload, "AUTHKEY ERR"): + detail := strings.TrimSpace(strings.TrimPrefix(payload, "AUTHKEY ERR")) + return true, false, detail + default: + return false, false, "" + } +} + // Handle messages received from server which are not meant to be displayed // to the end user. func (h *baseHandler) handleHiddenMessage(message string) { |
