summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordefanor <defanor@uberspace.net>2021-09-12 19:56:47 +0300
committerdefanor <defanor@uberspace.net>2021-09-12 19:56:47 +0300
commit8bf3c8fa1121842347398abbe97f5291bfaaecd2 (patch)
tree43f57f381a3b0285df9d3b3d2d3829433d2627d1
parentc5ed4acda48fb5e5a75b24c55596d444e7a30465 (diff)
Use auth-source in xmpp.el
Now passwords can be stored in .authinfo and its other backends.
-rw-r--r--emacs/xmpp.el35
1 files changed, 32 insertions, 3 deletions
diff --git a/emacs/xmpp.el b/emacs/xmpp.el
index 5102cbd..b6298fe 100644
--- a/emacs/xmpp.el
+++ b/emacs/xmpp.el
@@ -37,6 +37,7 @@
(require 'xml)
(require 'seq)
(require 'tracking)
+(require 'auth-source)
(defgroup xmpp nil
"An Emacs interface to rexmpp."
@@ -325,14 +326,28 @@
(let* ((buf (process-buffer proc))
(log-buf (with-current-buffer buf xmpp-log-buffer))
(console-buf (with-current-buffer buf xmpp-console-buffer))
+ (my-jid (with-current-buffer buf xmpp-jid))
(xml-elem (car xml)))
(pcase (xml-node-name xml-elem)
('request
(pcase (car (xml-node-children xml-elem))
(`(sasl ((property . ,prop)))
- (xmpp-proc-write `((response nil ,(read-passwd
- (concat "SASL " prop ": "))))
- proc))
+ (let ((resp
+ (if (equal prop "password")
+ (let ((secret
+ (plist-get
+ (car
+ (auth-source-search
+ :max 1
+ :user my-jid
+ :require '(:user :secret))) :secret)))
+ (if (functionp secret)
+ (funcall secret)
+ secret))
+ (read-passwd
+ (concat "SASL " prop ": ")))))
+ (xmpp-proc-write `((response nil ,resp))
+ proc)))
(`(xml-in nil ,xml-in)
(progn (xmpp-process-input proc xml-in)
(xmpp-proc-write '((response nil "0")) proc)))
@@ -374,6 +389,20 @@
(interactive)
(xmpp-request '(stop) nil proc))
+(defun xmpp-kill-buffers (&optional proc)
+ (interactive)
+ (when (and xmpp-query-buffers
+ xmpp-muc-buffers
+ xmpp-log-buffer
+ xmpp-console-buffer
+ xmpp-xml-buffer)
+ (mapcar (lambda (b) (kill-buffer (cdr b))) xmpp-query-buffers)
+ (mapcar (lambda (b) (kill-buffer (cdr b))) xmpp-muc-buffers)
+ (kill-buffer xmpp-log-buffer)
+ (kill-buffer xmpp-console-buffer)
+ (kill-buffer xmpp-xml-buffer)
+ (kill-buffer)))
+
(defun xmpp-send (xml &optional proc)
(xmpp-request `(send nil ,xml) nil proc))