diff options
Diffstat (limited to 'src/scm/webid-oidc/refresh-token.scm')
-rw-r--r-- | src/scm/webid-oidc/refresh-token.scm | 61 |
1 files changed, 24 insertions, 37 deletions
diff --git a/src/scm/webid-oidc/refresh-token.scm b/src/scm/webid-oidc/refresh-token.scm index 34b2f1b..e3fbf7c 100644 --- a/src/scm/webid-oidc/refresh-token.scm +++ b/src/scm/webid-oidc/refresh-token.scm @@ -18,36 +18,33 @@ #:use-module (webid-oidc errors) #:use-module ((webid-oidc stubs) #:prefix stubs:) #:use-module (webid-oidc jwk) + #:use-module ((webid-oidc parameters) #:prefix p:) #:use-module (web uri) #:use-module (ice-9 optargs) #:use-module (ice-9 threads) - #:use-module (srfi srfi-19)) + #:use-module (srfi srfi-19) + #:export + ( + list-refresh-tokens + update-refresh-token-list + issue-refresh-token + with-refresh-token + remove-refresh-token + )) -(define-public (default-dir) - (let ((xdg-data-home (or - (getenv "XDG_DATA_HOME") - (format #f "~a/.local/share" - (getenv "HOME"))))) - (format #f "~a/disfluid" xdg-data-home))) - -(define*-public (list-refresh-tokens - #:key - (dir default-dir)) - (when (thunk? dir) - (set! dir (dir))) +(define (list-refresh-tokens) (catch #t (lambda () - (with-input-from-file (format #f "~a/refresh-tokens.scm" dir) + (with-input-from-file (format #f "~a/refresh-tokens.scm" (p:data-home)) read)) (lambda errors '()))) +;; TODO: use stubs:atomically-update-file and remove that mutex. (define mutex (make-mutex)) -(define* (set-refresh-token-list list - #:key (dir default-dir)) - (when (thunk? dir) - (set! dir (dir))) +(define (set-refresh-token-list list) + (define dir (p:data-home)) (define old-file (format #f "~a/refresh-tokens.scm" dir)) (define new-file (format #f "~a/refresh-tokens.scm~" dir)) (stubs:call-with-output-file* @@ -57,12 +54,11 @@ (close-port port))) (rename-file new-file old-file)) -(define*-public (update-refresh-token-list f - #:key (dir default-dir)) +(define (update-refresh-token-list f) (with-mutex mutex - (let ((old (list-refresh-tokens #:dir dir))) + (let ((old (list-refresh-tokens))) (let ((new (f old))) - (set-refresh-token-list new #:dir dir))))) + (set-refresh-token-list new))))) (define (remove sub aud) (lambda (old) @@ -90,20 +86,13 @@ (refresh_token . ,jti)) (remover old))))) -(define*-public (issue-refresh-token sub aud jkt - #:key - (dir default-dir)) +(define (issue-refresh-token sub aud jkt) (define jti (stubs:random 12)) - (update-refresh-token-list (insert sub aud jkt jti) - #:dir dir) + (update-refresh-token-list (insert sub aud jkt jti)) jti) -(define*-public (with-refresh-token refresh-token - key - f - #:key - (dir default-dir)) - (let ((list (list-refresh-tokens #:dir dir))) +(define (with-refresh-token refresh-token key f) + (let ((list (list-refresh-tokens))) (define (check list) (if (null? list) (raise-invalid-refresh-token refresh-token) @@ -121,7 +110,5 @@ (check tl)))))) (check list))) -(define*-public (remove-refresh-token sub aud - #:key - (dir default-dir)) - (update-refresh-token-list (remove sub aud) #:dir dir)) +(define (remove-refresh-token sub aud) + (update-refresh-token-list (remove sub aud))) |