Skip to content

Instantly share code, notes, and snippets.

@qsun
Created October 18, 2010 12:38
Show Gist options
  • Save qsun/632139 to your computer and use it in GitHub Desktop.
Save qsun/632139 to your computer and use it in GitHub Desktop.
facebook javascript login dirty check
(defparameter *facebook-app-id* "id")
(defparameter *facebook-app-secret* "secret")
(defun facebook-login-p ()
(let ((kvs (sort (map 'list (lambda (kv)
(split-sequence:split-sequence #\= kv))
(split-sequence:split-sequence #\& (string-trim (list #\") (hunchentoot:cookie-in (format nil "fbs_~A" *facebook-app-id*)))))
(lambda (a b)
(string<= (car a) (car b))))))
(let ((sig (find-if (lambda (kv) (string= (car kv) "sig")) kvs))
(new-kvs (remove-if (lambda (kv) (string= (car kv) "sig")) kvs)))
(string-equal (car (cdr sig)) (ironclad:byte-array-to-hex-string
(md5:md5sum-sequence
(concatenate 'string (reduce (lambda (a b)
(concatenate 'string a b))
(loop
for kv in new-kvs
collect
(concatenate 'string (car kv) "=" (car (cdr kv)))))
*facebook-app-secret*)))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment