summaryrefslogtreecommitdiff
path: root/internal/clients/handlers/basehandler.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/clients/handlers/basehandler.go')
-rw-r--r--internal/clients/handlers/basehandler.go45
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) {