# HG changeset patch # User Mark A. Hershberger # Date 1277225840 14400 # Node ID 3cf8b3dca100851f18bbdecd261d8d535b83fa7a # Parent 3e9a832a5533f7b9507538282162c4e92c8f18d3# Parent fc2c0625a14a265fbe891ed869e43fe9dc1b2354 diff -r 3e9a832a5533 -r 3cf8b3dca100 lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Tue Jun 22 14:28:08 2010 +0200 +++ b/lisp/gnus/ChangeLog Tue Jun 22 12:57:20 2010 -0400 @@ -1,3 +1,8 @@ +2010-06-22 Mark A. Hershberger + + * mm-url.el (mm-url-encode-multipart-form-data): New function to handle + the *other* type of HTML form submission. + 2010-06-15 Michael Albinus * auth-source.el (auth-source-pick): If choice does not contain a diff -r 3e9a832a5533 -r 3cf8b3dca100 lisp/gnus/mm-url.el --- a/lisp/gnus/mm-url.el Tue Jun 22 14:28:08 2010 +0200 +++ b/lisp/gnus/mm-url.el Tue Jun 22 12:57:20 2010 -0400 @@ -418,6 +418,48 @@ (mm-url-form-encode-xwfu (cdr data)))) pairs "&")) +(defun mm-url-encode-multipart-form-data (pairs &optional boundary) + "Return PAIRS encoded in multipart/form-data." + ;; RFC1867 + + ;; Get a good boundary + (unless boundary + (setq boundary (mml-compute-boundary '()))) + + (concat + + ;; Start with the boundary + "--" boundary "\r\n" + + ;; Create name value pairs + (mapconcat + 'identity + ;; Delete any returned items that are empty + (delq nil + (mapcar (lambda (data) + (when (car data) + ;; For each pair + (concat + + ;; Encode the name + "Content-Disposition: form-data; name=\"" + (car data) "\"\r\n" + "Content-Type: text/plain; charset=utf-8\r\n" + "Content-Transfer-Encoding: binary\r\n\r\n" + + (cond ((stringp (cdr data)) + (cdr data)) + ((integerp (cdr data)) + (int-to-string (cdr data)))) + + "\r\n"))) + pairs)) + ;; use the boundary as a separator + (concat "--" boundary "\r\n")) + + ;; put a boundary at the end. + "--" boundary "--\r\n")) + (defun mm-url-fetch-form (url pairs) "Fetch a form from URL with PAIRS as the data using the POST method." (mm-url-load-url) diff -r 3e9a832a5533 -r 3cf8b3dca100 lisp/url/ChangeLog --- a/lisp/url/ChangeLog Tue Jun 22 14:28:08 2010 +0200 +++ b/lisp/url/ChangeLog Tue Jun 22 12:57:20 2010 -0400 @@ -1,3 +1,9 @@ +2010-06-22 Mark A. Hershberger + + * url-parse.el (url-user-for-url, url-password-for-url): + Convenience functions that get usernames and passwords for urls + from auth-source functions. + 2010-06-12 Štěpán Němec (tiny change) * url-vars.el (url-privacy-level): Fix doc typo. (Bug#6406) diff -r 3e9a832a5533 -r 3cf8b3dca100 lisp/url/url-parse.el --- a/lisp/url/url-parse.el Tue Jun 22 14:28:08 2010 +0200 +++ b/lisp/url/url-parse.el Tue Jun 22 12:57:20 2010 -0400 @@ -25,6 +25,7 @@ ;;; Code: (require 'url-vars) +(require 'auth-source) (eval-when-compile (require 'cl)) (autoload 'url-scheme-get-property "url-methods") @@ -174,6 +175,25 @@ (url-parse-make-urlobj prot user pass host port file refs attr full))))))) +(defmacro url-bit-for-url (method lookfor url) + `(let* ((urlobj (url-generic-parse-url url)) + (bit (funcall ,method urlobj)) + (methods (list 'url-recreate-url + 'url-host))) + (while (and (not bit) (> (length methods) 0)) + (setq bit + (auth-source-user-or-password + ,lookfor (funcall (pop methods) urlobj) (url-type urlobj)))) + bit)) + +(defun url-user-for-url (url) + "Attempt to use .authinfo to find a user for this URL." + (url-bit-for-url 'url-user "login" url)) + +(defun url-password-for-url (url) + "Attempt to use .authinfo to find a password for this URL." + (url-bit-for-url 'url-password "password" url)) + (provide 'url-parse) ;; arch-tag: f338325f-71ab-4bee-93cc-78fb9a03d403