aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--oneliners.api-client.lisp66
-rw-r--r--src/lib.lisp22
2 files changed, 55 insertions, 33 deletions
diff --git a/oneliners.api-client.lisp b/oneliners.api-client.lisp
index e8e1d28..bd7ba72 100644
--- a/oneliners.api-client.lisp
+++ b/oneliners.api-client.lisp
@@ -5,7 +5,8 @@
(defpackage #:ONELINERS.API-CLIENT
(:use :cl :lazybones-client.shared)
(:export #:*host* #:*body* #:*headers* #:*cookies* #:request-with
- #:GET--ONELINERS
+ #:PUT--CONTRIBUTOR-WHO-PASSWORD
+#:GET--ONELINERS
#:GET--ONELINERS-ALL-FLAGGED
#:GET--ONELINERS-NEWEST
#:PUT--ONELINER-ENTRY-FLAG
@@ -18,7 +19,6 @@
#:POST--ACCESS
#:POST--INVITE-REDEEM-CODE
#:PUT--CONTRIBUTOR-WHO-SIGNATURE
-#:PUT--CONTRIBUTOR-WHO-PASSWORD
#:PUT--CONTRIBUTOR-WHO-LOCKED
#:GET--CONTRIBUTOR-WHO))
(in-package :ONELINERS.API-CLIENT)
@@ -69,6 +69,39 @@ COOKIES should be an instance of CL-COOKIE:COOKIE-JAR. Defaults to
(dex:response-body ,http-error-var)))))))
+(DEFUN PUT--CONTRIBUTOR-WHO-PASSWORD (WHO &KEY VALUE REPEATED CURRENT TOKEN)
+ "Change a contributor's password."
+ (LET ((LAZYBONES-CLIENT.SHARED::REQ-STRING
+ (APPLY #'CONCATENATE 'STRING LAZYBONES-CLIENT.SHARED:*HOST* "/api"
+ (FORMAT NIL "/contributor/~a/password" WHO)
+ (WHEN (OR VALUE REPEATED CURRENT TOKEN)
+ (LIST "?"
+ (IF VALUE
+ (CONCATENATE 'STRING (SYMBOL-NAME 'VALUE) "="
+ (FORMAT NIL "~a" VALUE))
+ "")
+ (IF REPEATED
+ (CONCATENATE 'STRING "&" (SYMBOL-NAME 'REPEATED)
+ "=" (FORMAT NIL "~a" REPEATED))
+ "")
+ (IF CURRENT
+ (CONCATENATE 'STRING "&" (SYMBOL-NAME 'CURRENT) "="
+ (FORMAT NIL "~a" CURRENT))
+ "")
+ (IF TOKEN
+ (CONCATENATE 'STRING "&" (SYMBOL-NAME 'TOKEN) "="
+ (FORMAT NIL "~a" TOKEN))
+ ""))))))
+ (IF LAZYBONES-CLIENT.SHARED:*BODY*
+ (DEXADOR:PUT LAZYBONES-CLIENT.SHARED::REQ-STRING :CONTENT
+ LAZYBONES-CLIENT.SHARED:*BODY* :COOKIE-JAR
+ LAZYBONES-CLIENT.SHARED:*COOKIES* :HEADERS
+ LAZYBONES-CLIENT.SHARED:*HEADERS*)
+ (DEXADOR:PUT LAZYBONES-CLIENT.SHARED::REQ-STRING :COOKIE-JAR
+ LAZYBONES-CLIENT.SHARED:*COOKIES* :HEADERS
+ LAZYBONES-CLIENT.SHARED:*HEADERS*))))
+
+
(DEFUN GET--ONELINERS (&KEY TAGS LIMIT NOTFLAGGED)
"A search endpoint returning a JSON encoded array of Oneliner
Entries. TAGS cannot be empty. Returns a [Search
@@ -324,35 +357,6 @@ Result](#search-result) object."
LAZYBONES-CLIENT.SHARED:*HEADERS*))))
-(DEFUN PUT--CONTRIBUTOR-WHO-PASSWORD (WHO &KEY VALUE REPEATED TOKEN)
- NIL
- (LET ((LAZYBONES-CLIENT.SHARED::REQ-STRING
- (APPLY #'CONCATENATE 'STRING LAZYBONES-CLIENT.SHARED:*HOST* "/api"
- (FORMAT NIL "/contributor/~a/password" WHO)
- (WHEN (OR VALUE REPEATED TOKEN)
- (LIST "?"
- (IF VALUE
- (CONCATENATE 'STRING (SYMBOL-NAME 'VALUE) "="
- (FORMAT NIL "~a" VALUE))
- "")
- (IF REPEATED
- (CONCATENATE 'STRING "&" (SYMBOL-NAME 'REPEATED)
- "=" (FORMAT NIL "~a" REPEATED))
- "")
- (IF TOKEN
- (CONCATENATE 'STRING "&" (SYMBOL-NAME 'TOKEN) "="
- (FORMAT NIL "~a" TOKEN))
- ""))))))
- (IF LAZYBONES-CLIENT.SHARED:*BODY*
- (DEXADOR:PUT LAZYBONES-CLIENT.SHARED::REQ-STRING :CONTENT
- LAZYBONES-CLIENT.SHARED:*BODY* :COOKIE-JAR
- LAZYBONES-CLIENT.SHARED:*COOKIES* :HEADERS
- LAZYBONES-CLIENT.SHARED:*HEADERS*)
- (DEXADOR:PUT LAZYBONES-CLIENT.SHARED::REQ-STRING :COOKIE-JAR
- LAZYBONES-CLIENT.SHARED:*COOKIES* :HEADERS
- LAZYBONES-CLIENT.SHARED:*HEADERS*))))
-
-
(DEFUN PUT--CONTRIBUTOR-WHO-LOCKED (WHO &KEY VALUE TOKEN)
NIL
(LET ((LAZYBONES-CLIENT.SHARED::REQ-STRING
diff --git a/src/lib.lisp b/src/lib.lisp
index fb2217b..3df4006 100644
--- a/src/lib.lisp
+++ b/src/lib.lisp
@@ -60,6 +60,9 @@
(setf (getf *config* :api-token) newval))
(defun get-shell ()
(getf *config* :shell))
+(defun contributor-handle () (getf *config* :handle))
+(defun (setf contributor-handle) (newval)
+ (setf (getf *config* :handle) newval))
(defun config-file ()
(merge-pathnames ".config/oneliners.config" (user-homedir-pathname)))
@@ -363,9 +366,23 @@ the directories that appear in the value of that variable."
:body (jonathan:to-json (list :password pass :handle user))
:content-type "application/json")
(api:post--access))))
- (setf (api-token) (getf response :token))
+ (setf (api-token) (getf response :token)
+ (contributor-handle) handle)
(write-config-to-disk)
- (format t "Access token written to ~a~%" (config-file))))
+ (format t "Access token written to ~a~%You may now make contributions to the wiki!.~%"
+ (config-file))))
+
+(defun change-pw (current new repeated)
+ (unless (equal new repeated)
+ (error "The new password doesn't match the repeated value. Double check."))
+ (ensure-config)
+ (api:request-with
+ (:host (host))
+ (api:put--contributor-who-password (contributor-handle)
+ :token (api-token)
+ :value new
+ :repeated new
+ :current current)))
(defparameter +agree-to-the-unlicense+
"By creating this contributor account, I agree that my contributions
@@ -394,6 +411,7 @@ the directories that appear in the value of that variable."
(api:post--invite-redeem-code token)
(format t "Account made for ~a. You may log in now~%" name))))
+;;TODO: check this .. shouldnt access be a username???
(defun revoke-access ()
(ensure-config)
(api:request-with