]> git.eshelyaron.com Git - emacs.git/commitdiff
Add support for the oauth2.el library in nnimap and smtpmail
authorRoland Winkler <winkler@gnu.org>
Thu, 5 Aug 2021 10:33:21 +0000 (12:33 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 5 Aug 2021 10:33:21 +0000 (12:33 +0200)
* doc/misc/gnus.texi (Customizing the IMAP Connection):
* doc/misc/smtpmail.texi (Authentication): Mention it.

* lisp/gnus/nnimap.el (nnimap-login): Support oauth2.

* lisp/mail/smtpmail.el (smtpmail-try-auth-method): New function
for oauth2.

doc/misc/gnus.texi
doc/misc/smtpmail.texi
etc/NEWS
lisp/gnus/nnimap.el
lisp/mail/smtpmail.el

index c8d5a868ed283433e42637f036850bcb9b41af50..015a170e5e13c9ad0d2320d693098d48b38a77e3 100644 (file)
@@ -14516,7 +14516,8 @@ this should be set to @code{anonymous}.  If this variable isn't set,
 the normal login methods will be used.  If you wish to specify a
 specific login method to be used, you can set this variable to either
 @code{login} (the traditional @acronym{IMAP} login method),
-@code{plain} or @code{cram-md5}.
+@code{plain}, @code{cram-md5} or @code{xoath2}.  (The latter method
+requires using the @file{oauth2.el} library.)
 
 @item nnimap-expunge
 When to expunge deleted messages.  If @code{never}, deleted articles
index ca7dabe6545d3c7b05aadfd69935a291e8d83f89..f5d567533b6a1aa9344dd4b1e217bf828458935b 100644 (file)
@@ -264,12 +264,14 @@ file, @pxref{Top,,auth-source, auth, Emacs auth-source Library}.
 @cindex CRAM-MD5
 @cindex PLAIN
 @cindex LOGIN
-The process by which the SMTP library authenticates you to the server
-is known as ``Simple Authentication and Security Layer'' (SASL).
-There are various SASL mechanisms, and this library supports three of
-them: CRAM-MD5, PLAIN, and LOGIN, where the first uses a form of
+The process by which the @acronym{SMTP} library authenticates you to
+the server is known as ``Simple Authentication and Security Layer''
+(@acronym{SASL}).  There are various @acronym{SASL} mechanisms, and
+this library supports three of them: @code{cram-md5}, @code{plain},
+@code{login} and @code{xoauth2}, where the first uses a form of
 encryption to obscure your password, while the other two do not.  It
-tries each of them, in that order, until one succeeds.  You can
+tries each of them, in that order, until one succeeds.
+(@code{xoauth2} requires using the @file{oauth2.el} library.  You can
 override this by assigning a specific authentication mechanism to a
 server by including a key @code{smtp-auth} with the value of your
 preferred mechanism in the appropriate @file{~/.authinfo} entry.
index f0fa686bc9c8cc9e61cc5bb0587fdf9c8f41c4b7..bfbae9fc5da5ad47923c9e989c4966c1f644f0aa 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -999,6 +999,9 @@ String or list of strings specifying switches for Git log under VC.
 
 ** Gnus
 
++++
+*** nnimap now supports the oath2.el library.
+
 +++
 *** New Summary buffer sort options for extra headers.
 The extra header sort option ('C-c C-s C-x') prompts for a header
@@ -1187,6 +1190,9 @@ take the actual screenshot, and defaults to "ImageMagick import".
 
 ** Smtpmail
 
++++
+*** smtpmail now supports using the oauth2.el library.
+
 +++
 *** New user option 'smtpmail-store-queue-variables'.
 If non-nil, SMTP variables will be stored together with the queued
index 3e2a202a6cff78d30c7a202c195908af13483612..3cf65453f3b4453a8d7b21d9459ccffb1b593ec8 100644 (file)
@@ -599,6 +599,13 @@ during splitting, which may be slow."
              (eq nnimap-authenticator 'anonymous)
             (eq nnimap-authenticator 'login)))
     (nnimap-command "LOGIN %S %S" user password))
+   ((and (nnimap-capability "AUTH=XOAUTH2")
+         (eq nnimap-authenticator 'xoauth2))
+    (nnimap-command  "AUTHENTICATE XOAUTH2 %s"
+                     (base64-encode-string
+                      (format "user=%s\001auth=Bearer %s\001\001"
+                              (nnimap-quote-specials user)
+                              (nnimap-quote-specials password)))))
    ((and (nnimap-capability "AUTH=CRAM-MD5")
         (or (null nnimap-authenticator)
             (eq nnimap-authenticator 'cram-md5)))
index 33bdd050bdcb5936e8e0251931331a86125d3d38..8e3927cdcf2a14e81b2c397a28916c021b5c1fe8 100644 (file)
@@ -636,6 +636,14 @@ USER and PASSWORD should be non-nil."
           (base64-encode-string (concat "\0" user "\0" password) t))
    235))
 
+(cl-defmethod smtpmail-try-auth-method
+  (process (_mech (eql xoauth2)) user password)
+  (smtpmail-command-or-throw
+   process
+   (concat "AUTH XOAUTH2 "
+           (base64-encode-string
+            (concat "user=" user "\1auth=Bearer " password "\1\1") t))))
+
 (defun smtpmail-response-code (string)
   (when string
     (with-temp-buffer