>From 78fe57488bb69f8f48e31fcd1ffcc31f31253207 Mon Sep 17 00:00:00 2001 From: "F. Jason Park" Date: Thu, 29 Dec 2022 06:43:19 -0800 Subject: [PATCH 1/4] Fix default-port regression in erc-select-read-args * lisp/erc/erc.el (erc-select-read-args): Fix incomplete feature introduced by bug#56514. Ensure connecting always possible with non-TLS default port, but offer upgrade. * test/lisp/erc/erc-tests.el (erc-select-read-args): Expect a prompt and possible `user-error' when calling `erc' interactively with all default arguments. --- lisp/erc/erc.el | 38 +++++++++++++++++++++++++++++--------- test/lisp/erc/erc-tests.el | 13 +++++++++---- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 16a0aba77b..98d55bb1ae 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -2171,10 +2171,7 @@ erc-select-read-args ;; For legacy reasons, also accept a URL without a scheme. (url (url-generic-parse-url (erc--ensure-url input))) (server (url-host url)) - (sp (and (or (string-suffix-p "s" (url-type url)) - (and (equal server erc-default-server) - (not (string-prefix-p "irc://" input)))) - 'ircs-u)) + (sp (and (string-suffix-p "s" (url-type url)) erc-default-port-tls)) (port (or (url-portspec url) (erc-compute-port (let ((d (erc-compute-port sp))) ; may be a string @@ -2188,12 +2185,35 @@ erc-select-read-args (read-string (format "Nickname (default is %S): " d) nil 'erc-nick-history-list d)))) (passwd (or (url-password url) - (if erc-prompt-for-password - (read-passwd "Server password (optional): ") - (with-suppressed-warnings ((obsolete erc-password)) - erc-password))))) + (let* + ((p (with-suppressed-warnings + ((obsolete erc-password)) + erc-password)) + (m (if p + (format "Server password (default is %S): " p) + "Server password (optional): "))) + (if erc-prompt-for-password (read-passwd m nil p) p))))) (when (and passwd (string= "" passwd)) (setq passwd nil)) + (when-let (((equal server erc-default-server)) + ((eql port erc-default-port)) + ((not (string-prefix-p "irc://" input))) ; ignore irc6:// + (key (substitute-command-keys "\\[erc-tls]")) + ((y-or-n-p (concat + "Switch to " key " now instead of connecting " + (propertize "unencrypted" 'face 'error) "?")))) + (run-at-time nil nil + (lambda () + (with-suppressed-warnings ((obsolete erc-password)) + (let ((erc-nick nick) + (erc-password passwd)) + (with-temp-message (format "Switching to %s ..." key) + (sit-for 1)) + (with-current-buffer (call-interactively #'erc-tls) + (erc-display-error-notice + nil (format "Please use %s directly from now on." + key))))))) + (user-error "Non-TLS connection to default server detected")) (list :server server :port port :nick nick :password passwd))) ;;;###autoload @@ -2287,7 +2307,7 @@ erc-tls See info node `(erc) Network Identifier' for details. Like USER and CLIENT-CERTIFICATE, this parameter cannot be specified interactively." - (interactive (let ((erc-default-port erc-default-port-tls)) + (interactive (let ((erc-port (or erc-port erc-default-port-tls))) (erc-select-read-args))) (let ((erc-server-connect-function 'erc-open-tls-stream)) (erc-open server port nick full-name t password diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el index 578b2641a6..400b92d29e 100644 --- a/test/lisp/erc/erc-tests.el +++ b/test/lisp/erc/erc-tests.el @@ -1001,15 +1001,20 @@ erc--server-connect-dumb-ipv6-regexp (ert-deftest erc-select-read-args () - (ert-info ("Defaults to TLS") - (should (equal (ert-simulate-keys "\r\r\r\r" + (ert-info ("Error signaled with default server and non-TLS port") + (should (pcase (should-error (ert-simulate-keys "\r\r\r\ry\r" + (erc-select-read-args))) + (`(user-error ,(rx "Non-TLS")) 'passed)))) + + (ert-info ("Opt out of non-TLS warning manually") + (should (equal (ert-simulate-keys "\r\r\r\rn\r" (erc-select-read-args)) (list :server "irc.libera.chat" - :port 6697 + :port 6667 :nick (user-login-name) :password nil)))) - (ert-info ("Override default TLS") + (ert-info ("Override non-TLS warning via URL scheme") (should (equal (ert-simulate-keys "irc://irc.libera.chat\r\r\r\r" (erc-select-read-args)) (list :server "irc.libera.chat" -- 2.38.1