mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-17 18:37:33 +00:00
Support using auth-source for NickServ passwords in ERC
* lisp/etc/erc-services.el (erc-nickserv-passwords): Document that the passwords are only used when erc-prompt-for-nickserv-password is nil. * (erc-use-auth-source-for-nickserv-password): New customizable variable to enable checking auth-source for NickServ passwords. * (etc-nickserv-get-password): New function to handle the lookup of the NickServ password from both auth-source and the erc-nickserv-passwords variable. * (erc-nickserv-call-identify-function): Use new erc-nickserv-get-password function to lookup NickServ passwords. * (erc-nickserv-identify-autodetect, erc-nickserv-identify-on-connect, erc-nickserv-identify-on-nick-change): Call erc-nickserv-call-identify-function when erc-use-auth-source-for-nickserv-password is set. * etc/NEWS: Document change (bug#45340).
This commit is contained in:
parent
6129ebf449
commit
42e72f4ade
3 changed files with 53 additions and 12 deletions
8
etc/NEWS
8
etc/NEWS
|
|
@ -1371,6 +1371,14 @@ https://www.w3.org/TR/xml/#charsets). Now it rejects such strings.
|
|||
|
||||
** erc
|
||||
|
||||
*** erc-services.el now supports NickServ passwords from auth-source.
|
||||
The 'erc-use-auth-source-for-nickserv-password' variable enables querying
|
||||
auth-source for NickServ passwords. To enable this, add the following
|
||||
to your init file:
|
||||
|
||||
(setq erc-prompt-for-nickserv-password nil
|
||||
erc-use-auth-source-for-nickserv-password t)
|
||||
|
||||
---
|
||||
*** The '/ignore' command will now ask for a timeout to stop ignoring the user.
|
||||
Allowed inputs are seconds or ISO8601-like periods like "1h" or "4h30m".
|
||||
|
|
|
|||
|
|
@ -168,8 +168,19 @@ You can also use \\[erc-nickserv-identify-mode] to change modes."
|
|||
:group 'erc-services
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom erc-use-auth-source-for-nickserv-password nil
|
||||
"Query auth-source for a password when identifiying to NickServ.
|
||||
This option has an no effect if `erc-prompt-for-nickserv-password'
|
||||
is non-nil, and passwords from `erc-nickserv-passwords' take
|
||||
precedence."
|
||||
:version "28.1"
|
||||
:group 'erc-services
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom erc-nickserv-passwords nil
|
||||
"Passwords used when identifying to NickServ automatically.
|
||||
`erc-prompt-for-nickserv-password' must be nil for these
|
||||
passwords to be used.
|
||||
|
||||
Example of use:
|
||||
(setq erc-nickserv-passwords
|
||||
|
|
@ -375,7 +386,8 @@ Make sure it is the real NickServ for this network.
|
|||
If `erc-prompt-for-nickserv-password' is non-nil, prompt the user for the
|
||||
password for this nickname, otherwise try to send it automatically."
|
||||
(unless (and (null erc-nickserv-passwords)
|
||||
(null erc-prompt-for-nickserv-password))
|
||||
(null erc-prompt-for-nickserv-password)
|
||||
(null erc-use-auth-source-for-nickserv-password))
|
||||
(let* ((network (erc-network))
|
||||
(sender (erc-nickserv-alist-sender network))
|
||||
(identify-regex (erc-nickserv-alist-regexp network))
|
||||
|
|
@ -394,30 +406,49 @@ password for this nickname, otherwise try to send it automatically."
|
|||
(defun erc-nickserv-identify-on-connect (_server nick)
|
||||
"Identify to Nickserv after the connection to the server is established."
|
||||
(unless (or (and (null erc-nickserv-passwords)
|
||||
(null erc-prompt-for-nickserv-password))
|
||||
(and (eq erc-nickserv-identify-mode 'both)
|
||||
(erc-nickserv-alist-regexp (erc-network))))
|
||||
(null erc-prompt-for-nickserv-password)
|
||||
(null erc-use-auth-source-for-nickserv-password))
|
||||
(and (eq erc-nickserv-identify-mode 'both)
|
||||
(erc-nickserv-alist-regexp (erc-network))))
|
||||
(erc-nickserv-call-identify-function nick)))
|
||||
|
||||
(defun erc-nickserv-identify-on-nick-change (nick _old-nick)
|
||||
"Identify to Nickserv whenever your nick changes."
|
||||
(unless (or (and (null erc-nickserv-passwords)
|
||||
(null erc-prompt-for-nickserv-password))
|
||||
(and (eq erc-nickserv-identify-mode 'both)
|
||||
(erc-nickserv-alist-regexp (erc-network))))
|
||||
(null erc-prompt-for-nickserv-password)
|
||||
(null erc-use-auth-source-for-nickserv-password))
|
||||
(and (eq erc-nickserv-identify-mode 'both)
|
||||
(erc-nickserv-alist-regexp (erc-network))))
|
||||
(erc-nickserv-call-identify-function nick)))
|
||||
|
||||
(defun erc-nickserv-get-password (nickname)
|
||||
"Return the password for NICKNAME from configured sources.
|
||||
|
||||
It uses `erc-nickserv-passwords' and additionally auth-source
|
||||
when `erc-use-auth-source-for-nickserv-password' is not nil."
|
||||
(or
|
||||
(when erc-nickserv-passwords
|
||||
(cdr (assoc nickname
|
||||
(nth 1 (assoc (erc-network)
|
||||
erc-nickserv-passwords)))))
|
||||
(when erc-use-auth-source-for-nickserv-password
|
||||
(let* ((secret (nth 0 (auth-source-search
|
||||
:max 1 :require '(:secret)
|
||||
:host (erc-with-server-buffer erc-session-server)
|
||||
:port (format ; ensure we have a string
|
||||
"%s" (erc-with-server-buffer erc-session-port))
|
||||
:user nickname))))
|
||||
(when secret
|
||||
(let ((passwd (plist-get secret :secret)))
|
||||
(if (functionp passwd) (funcall passwd) passwd)))))))
|
||||
|
||||
(defun erc-nickserv-call-identify-function (nickname)
|
||||
"Call `erc-nickserv-identify'.
|
||||
Either call it interactively or run it with NICKNAME's password,
|
||||
depending on the value of `erc-prompt-for-nickserv-password'."
|
||||
(if erc-prompt-for-nickserv-password
|
||||
(call-interactively 'erc-nickserv-identify)
|
||||
(when erc-nickserv-passwords
|
||||
(erc-nickserv-identify
|
||||
(cdr (assoc nickname
|
||||
(nth 1 (assoc (erc-network)
|
||||
erc-nickserv-passwords))))))))
|
||||
(erc-nickserv-identify (erc-nickserv-get-password nickname))))
|
||||
|
||||
(defvar erc-auto-discard-away)
|
||||
|
||||
|
|
@ -451,6 +482,7 @@ When called interactively, read the password using `read-passwd'."
|
|||
|
||||
(provide 'erc-services)
|
||||
|
||||
|
||||
;;; erc-services.el ends here
|
||||
;;
|
||||
;; Local Variables:
|
||||
|
|
|
|||
|
|
@ -8314,6 +8314,7 @@ indirectly called by the latter."
|
|||
(when (and (listp quad)
|
||||
(integerp (nth 3 quad))
|
||||
(> (nth 3 quad) (window-total-height window)))
|
||||
(message "foo")
|
||||
(condition-case nil
|
||||
(window-resize window (- (nth 3 quad) (window-total-height window)))
|
||||
(error nil)))
|
||||
|
|
|
|||
Loading…
Reference in a new issue