aboutsummaryrefslogtreecommitdiff
path: root/sx-auth.el
diff options
context:
space:
mode:
Diffstat (limited to 'sx-auth.el')
-rw-r--r--sx-auth.el75
1 files changed, 75 insertions, 0 deletions
diff --git a/sx-auth.el b/sx-auth.el
new file mode 100644
index 0000000..59be452
--- /dev/null
+++ b/sx-auth.el
@@ -0,0 +1,75 @@
+;;; sx-auth.el --- user authentication -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2014 Sean Allred
+
+;; Author: Sean Allred <code@seanallred.com>
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'sx)
+(require 'sx-request)
+(require 'sx-cache)
+
+(defconst sx-auth-root
+ "https://stackexchange.com/oauth/")
+(defconst sx-auth-redirect-uri
+ "http://vermiculus.github.io/stack-mode/auth/auth.htm")
+(defconst sx-auth-client-id
+ "3291")
+(defvar sx-auth-access-token
+ nil
+ "Your access token.
+
+This is needed to use your account to write questions, make
+comments, and read your inbox. Do not alter this unless you know
+what you are doing!")
+
+(defun sx-auth-authenticate ()
+ "Authenticate this application.
+
+Authentication is required to read your personal data (such as
+notifications) and to write with the API (asking and answering
+questions)."
+ (interactive)
+ (setq
+ sx-auth-access-token
+ (let* ((sx-request-api-root sx-auth-root)
+ (url (sx-request--build
+ "dialog"
+ `((client_id . ,sx-auth-client-id)
+ (scope . (read_inbox
+ no_expiry
+ write_access))
+ (redirect_uri . ,(url-hexify-string
+ sx-auth-redirect-uri)))
+ ",")))
+ (browse-url url)
+ (read-string "Enter the access token displayed on the webpage: ")))
+ (if (string-equal "" sx-auth-access-token)
+ (progn (setq sx-auth-access-token nil)
+ (error "You must enter this code to use this client fully"))
+ (sx-cache-set "auth.el" `((access-token . ,sx-auth-access-token)))))
+
+(provide 'sx-auth)
+;;; stack-auth.el ends here
+
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End: