aboutsummaryrefslogtreecommitdiffstats
path: root/doc/misc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/misc')
-rw-r--r--doc/misc/ChangeLog5
-rw-r--r--doc/misc/auth.texi64
2 files changed, 64 insertions, 5 deletions
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index 75674c7fd17..96a2576355a 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,3 +1,8 @@
12011-03-08 Teodor Zlatanov <tzz@lifelogs.com>
2
3 * auth.texi (Help for developers): Show example of using
4 `auth-source-search' with prompts and :save-function.
5
12011-03-07 Antoine Levitt <antoine.levitt@gmail.com> 62011-03-07 Antoine Levitt <antoine.levitt@gmail.com>
2 7
3 * message.texi (Message Buffers): Update default value of 8 * message.texi (Message Buffers): Update default value of
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 23ac23dce5b..e16d7b49b63 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -131,11 +131,11 @@ library encourages this confusion by accepting both, as you'll see
131later. 131later.
132 132
133If you have problems with the search, set @code{auth-source-debug} to 133If you have problems with the search, set @code{auth-source-debug} to
134@code{t} and see what host, port, and user the library is checking in 134@code{'trivia} and see what host, port, and user the library is
135the @code{*Messages*} buffer. Ditto for any other problems, your 135checking in the @code{*Messages*} buffer. Ditto for any other
136first step is always to see what's being checked. The second step, of 136problems, your first step is always to see what's being checked. The
137course, is to write a blog entry about it and wait for the answer in 137second step, of course, is to write a blog entry about it and wait for
138the comments. 138the answer in the comments.
139 139
140You can customize the variable @code{auth-sources}. The following may 140You can customize the variable @code{auth-sources}. The following may
141be needed if you are using an older version of Emacs or if the 141be needed if you are using an older version of Emacs or if the
@@ -232,6 +232,14 @@ TODO: how does it work generally, how does secrets.el work, some examples.
232@node Help for developers 232@node Help for developers
233@chapter Help for developers 233@chapter Help for developers
234 234
235The auth-source library lets you control logging output easily.
236
237@defvar auth-source-debug
238Set this variable to 'trivia to see lots of output in *Messages*, or
239set it to a function that behaves like @code{message} to do your own
240logging.
241@end defvar
242
235The auth-source library only has a few functions for external use. 243The auth-source library only has a few functions for external use.
236 244
237@defun auth-source-search SPEC 245@defun auth-source-search SPEC
@@ -240,6 +248,52 @@ TODO: how to include docstring?
240 248
241@end defun 249@end defun
242 250
251Let's take a look at an example of using @code{auth-source-search}
252from Gnus' @code{nnimap.el}.
253
254@example
255(defun nnimap-credentials (address ports)
256 (let* ((auth-source-creation-prompts
257 '((user . "IMAP user at %h: ")
258 (secret . "IMAP password for %u@@%h: ")))
259 (found (nth 0 (auth-source-search :max 1
260 :host address
261 :port ports
262 :require '(:user :secret)
263 :create t))))
264 (if found
265 (list (plist-get found :user)
266 (let ((secret (plist-get found :secret)))
267 (if (functionp secret)
268 (funcall secret)
269 secret))
270 (plist-get found :save-function))
271 nil)))
272@end example
273
274This call requires the user and password (secret) to be in the
275results. It also requests that an entry be created if it doesn't
276exist already. While the created entry is being assembled, the shown
277prompts will be used to interact with the user. The caller can also
278pass data in @code{auth-source-creation-defaults} to supply defaults
279for any of the prompts.
280
281Note that the password needs to be evaluated if it's a function. It's
282wrapped in a function to provide some security.
283
284Later, after a successful login, @code{nnimal.el} calls the
285@code{:save-function} like so:
286
287@example
288(when (functionp (nth 2 credentials))
289 (funcall (nth 2 credentials)))
290@end example
291
292Which will work whether the @code{:save-function} was provided or not.
293@code{:save-function} will be provided only when a new entry was
294created, so this effectively says ``after a successful login, save the
295authentication information we just used, if it was newly created.''
296
243@defun auth-source-delete SPEC 297@defun auth-source-delete SPEC
244 298
245TODO: how to include docstring? 299TODO: how to include docstring?