# HG changeset patch # User Steve Losh # Date 1484574543 0 # Node ID f713831941d447788f7eede35709aefc47ede4a0 # Parent bab96c6f7abc98653475cddccc48a9fa076604c8 Add some Twitter auth machinery diff -r bab96c6f7abc -r f713831941d4 creds-example.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creds-example.lisp Mon Jan 16 13:49:03 2017 +0000 @@ -0,0 +1,10 @@ +(in-package :magitek) + +(defparameter *api-key* "...") +(defparameter *api-secret* "...") + +(defparameter *credentials* + '( + (auth-plist-goes-here use dump-auth-plist to get it) + ; ... + )) diff -r bab96c6f7abc -r f713831941d4 magitek.asd --- a/magitek.asd Mon Jan 16 13:43:51 2017 +0000 +++ b/magitek.asd Mon Jan 16 13:49:03 2017 +0000 @@ -18,4 +18,6 @@ (:file "quickutils"))) (:file "package") (:module "src" :serial t - :components ((:file "main"))))) + :components ((:file "creds") + (:file "auth") + (:file "main"))))) diff -r bab96c6f7abc -r f713831941d4 src/auth.lisp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/auth.lisp Mon Jan 16 13:49:03 2017 +0000 @@ -0,0 +1,38 @@ +(in-package :magitek) + +(defparameter *accounts* (make-hash-table)) + +(defun dump-auth-plist (account-name) + (list :account-name account-name + :api-key chirp:*oauth-api-key* + :api-secret chirp:*oauth-api-secret* + :access-token chirp:*oauth-access-token* + :access-secret chirp:*oauth-access-secret*)) + +(defun add-account (account) + (setf (gethash (getf account :account-name) *accounts*) + account)) + +(defun load-accounts () + (map nil #'add-account *credentials*)) + +(defun authorize (account-name) + (format t "Visit ~A to get a PIN~%" + (chirp:initiate-authentication :api-key *api-key* + :api-secret *api-secret*)) + (princ "Enter PIN: ") + (finish-output) + (chirp:complete-authentication (read-line)) + (chirp:account/verify-credentials) + (dump-auth-plist account-name)) + +(defmacro with-account (account-name &body body) + (once-only (account-name) + `(if-found account (gethash ,account-name *accounts*) + (let ((chirp:*oauth-api-key* (getf account :api-key)) + (chirp:*oauth-api-secret* (getf account :api-secret)) + (chirp:*oauth-access-token* (getf account :access-token)) + (chirp:*oauth-access-secret* (getf account :access-secret))) + ,@body) + (error "Account ~S not found, use (authorize ~S) to get creds" + ,account-name ,account-name))))