branch: externals/auth-source-xoauth2-plugin
commit 1162d667e83ad726e65d2685af76dbeea546b465
Author: Xiyue Deng <manp...@gmail.com>
Commit: Xiyue Deng <manp...@gmail.com>

    Add README.org with an introduction and usages
---
 README.org | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)

diff --git a/README.org b/README.org
new file mode 100644
index 0000000000..d233c06162
--- /dev/null
+++ b/README.org
@@ -0,0 +1,88 @@
+* Introduction
+
+This package provides a global minor mode for enabling support for
+xoauth2 authentication with auth-source.  OAuth 2.0, which stands for
+“Open Authorization”, is a standard designed to allow a website or
+application to access resources hosted by other web apps on behalf of
+a user.  The OAuth 2.0 Authorization Protocol Extensions (xoauth2)
+extend the OAuth 2.0 Authentication Protocol and the JSON Web Token
+(JWT) to enable server-to-server authentication.  More info please
+check out [[https://stackoverflow.com/a/76389679/2337550][this stackoverflow 
answer]].
+
+* Setup
+
+To set up, please put this file in the `load-path' of Emacs, and add
+the following lines in your Emacs configuration:
+
+#+BEGIN_SRC emacs-lisp
+  (require 'auth-source-xoauth2-plugin)
+  (auth-source-xoauth2-plugin-mode t)
+#+END_SRC
+
+or with use-package:
+
+#+BEGIN_SRC emacs-lisp
+  (use-package auth-source-xoauth2-plugin
+    :custom
+    (auth-source-xoauth2-plugin-mode t))
+#+END_SRC
+
+After enabling, smtpmail should be supported.  To enable this in Gnus
+nnimap, you should also set `(nnimap-authenticator xoauth2)' in the
+corresponding account settings in `gnus-secondary-select-methods' as
+the following:
+
+#+BEGIN_SRC emacs-lisp
+  (nnimap "account_name"
+          ...
+          (nnimap-authenticator xoauth2))
+#+END_SRC
+
+To disable, just toggle the minor mode off by calling `M-x
+auth-source-xoauth2-plugin-mode' again.
+
+auth-source uses the `secret' field in auth-source file as password
+for authentication, including xoauth2.  To decide which
+authentication method to use (e.g. plain password vs xoauth2), it
+inspects the `auth' field from the auth-source entry, and if the
+value is `xoauth2', it will try to gather data and get the access
+token for use of xoauth2 authentication; otherwise, it will fallback
+to the default authentication method.
+
+When xoauth2 authentication is enabled, it will try to get the
+following data from the auth-source entry: `auth-url', `token-url',
+`scope', `client-id', `client-secret', `redirect-uri', and optionally
+`state'.  An example Authinfo entry (in JSON format as
+~/.authinfo.json.gpg) for an Gmail account may look like below:
+
+#+BEGIN_SRC json
+  {
+    "machine": "<your_imap_address_or_email>",
+    "login": "<your_email>",
+    "port": "imaps",
+    "auth": "xoauth2",
+    "auth-url": "https://accounts.google.com/o/oauth2/auth";,
+    "token-url": "https://accounts.google.com/o/oauth2/token";,
+    "client-id": "<the_client_id_from_your_app>",
+    "client-secret": "<the_client_secret_from_your_app>",
+    "redirect-uri": "https://oauth2.dance/";,
+    "scope": "https://mail.google.com";
+  }
+#+END_SRC
+
+These information will be used by oauth2 to retrieve the access-token.
+This package uses an advice to switch the auth-source search result
+from the `password' to the `access-token' it got, which in turn will
+be used to construct the xoauth2 authentication string, currently in
+nnimap-login and smtpmail-try-auth-method.  To really enable xoauth2
+in smtpmail, it will add 'xoauth2 to 'smtpmail-auth-supported (if it
+is not already in the list) using `add-to-list' so that xoauth2 is
+tried first.
+
+** Notes
+
+Currently the auth-source requires the searched entry must have
+`secret' field set in the entry, which is not necessary when using
+xoauth2.  Therefore in the advice it temporarily disables checking
+for `:secret' if set and perform the search, and check the result
+before returning.

Reply via email to