aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/mastodon-auth.el25
-rw-r--r--test/mastodon-auth-tests.el16
2 files changed, 33 insertions, 8 deletions
diff --git a/lisp/mastodon-auth.el b/lisp/mastodon-auth.el
index 9ded694..1f4adaf 100644
--- a/lisp/mastodon-auth.el
+++ b/lisp/mastodon-auth.el
@@ -113,18 +113,27 @@ STATUS is passed by `url-retrieve'."
(mastodon--http-response-triage status
'mastodon-auth--get-token-success))
+(defun mastodon-auth--user-and-passwd ()
+ "Prompt for user email and password."
+ (let ((email (read-string "Email: "))
+ (passwd (read-string "Password: ")))
+ (cons email passwd)))
+
(defun mastodon--get-access-token ()
"Retrieve access token from instance.
Authenticates with email address and password. Neither are not stored."
- (mastodon--http-post (concat mastodon-instance-url "/oauth/token")
- 'mastodon--get-access-token-triage
- `(("client_id" . ,(plist-get (mastodon--client-app) :client_id))
- ("client_secret" . ,(plist-get (mastodon--client-app) :client_secret))
- ("grant_type" . "password")
- ("username" . ,(read-string "Email: "))
- ("password" . ,(read-passwd "Password: "))
- ("scope" . "read write follow"))))
+ (let* ((creds (mastodon-auth--user-and-passwd))
+ (email (car creds))
+ (passwd (cdr creds)))
+ (mastodon--http-post (concat mastodon-instance-url "/oauth/token")
+ 'mastodon--get-access-token-triage
+ `(("client_id" . ,(plist-get (mastodon--client-app) :client_id))
+ ("client_secret" . ,(plist-get (mastodon--client-app) :client_secret))
+ ("grant_type" . "password")
+ ("username" . ,email)
+ ("password" . ,passwd)
+ ("scope" . "read write follow")))))
(defun mastodon--access-token ()
"Return `mastodon--api-token-string'.
diff --git a/test/mastodon-auth-tests.el b/test/mastodon-auth-tests.el
index 4560e27..6e8b10c 100644
--- a/test/mastodon-auth-tests.el
+++ b/test/mastodon-auth-tests.el
@@ -101,3 +101,19 @@
(with-mock
(mock (mastodon--http-response-triage "status" 'mastodon-auth--get-token-success))
(mastodon--get-access-token-triage "status")))
+
+(ert-deftest mastodon-auth:get-access-token ()
+ "Should POST auth data to retreive access token."
+ (let ((client-app '(:client_id "id" :client_secret "secret")))
+ (with-mock
+ (mock (mastodon-auth--user-and-passwd) => (cons "email" "password"))
+ (mock (mastodon--client-app) => client-app)
+ (mock (mastodon--http-post "https://mastodon.social/oauth/token"
+ 'mastodon--get-access-token-triage
+ '(("client_id" . "id")
+ ("client_secret" . "secret")
+ ("grant_type" . "password")
+ ("username" . "email")
+ ("password" . "password")
+ ("scope" . "read write follow"))))
+ (mastodon--get-access-token))))