src/auth.lisp @ f713831941d4

Add some Twitter auth machinery
author Steve Losh <steve@stevelosh.com>
date Mon, 16 Jan 2017 13:49:03 +0000
parents (none)
children (none)
(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))))