|
1 | 1 | (in-package #:gapi)
|
2 | 2 |
|
3 |
| -(defparameter *token-expiry-length* 3600) |
| 3 | +(defparameter *jwt-token-expiry-length* 3600) |
4 | 4 |
|
5 | 5 | (define-condition gapi-error (error)
|
6 | 6 | ((code :initarg :code
|
|
46 | 46 | ((asn1:rsa-private-key :private-exponent d :modulus n)
|
47 | 47 | (ironclad:make-private-key :rsa :d d :n n)))))
|
48 | 48 |
|
49 |
| -(defun %generate-jwt (private-key client-email token-uri scopes &key (expiry-length *token-expiry-length*)) |
| 49 | +(defun %generate-jwt (private-key client-email token-uri scopes expiry-length) |
50 | 50 | (jose:encode :rs256 private-key `(("iss" . ,client-email)
|
51 | 51 | ("iat" . ,(get-unix-time))
|
52 | 52 | ("exp" . ,(+ (get-unix-time) expiry-length))
|
|
69 | 69 | :token-uri (getf acc :|token_uri|)
|
70 | 70 | :scopes scopes)))
|
71 | 71 |
|
72 |
| -(defmethod generate-jwt ((client client)) |
| 72 | +(defmethod generate-jwt ((client client) &key (expiry-length *jwt-token-expiry-length*)) |
73 | 73 | (with-slots (private-key client-email token-uri scopes) client
|
74 |
| - (%generate-jwt private-key client-email token-uri scopes))) |
| 74 | + (%generate-jwt private-key client-email token-uri scopes expiry-length))) |
75 | 75 |
|
76 | 76 |
|
77 | 77 | (defmethod auth ((client client))
|
78 |
| - (let ((response (%auth (client-token-uri client) (generate-jwt client)))) |
| 78 | + (let ((response (%auth (client-token-uri client) |
| 79 | + (generate-jwt client)))) |
79 | 80 | (setf (client-access-token client) (getf response :|access_token|)
|
80 | 81 | (client-access-token-expires-at client) (+ (get-universal-time)
|
81 | 82 | (getf response :|expires_in|)))))
|
|
84 | 85 | (> (get-universal-time)
|
85 | 86 | (client-access-token-expires-at client)))
|
86 | 87 |
|
| 88 | +(defmethod client-authorized-p ((client client)) |
| 89 | + (not (null (client-access-token client)))) |
87 | 90 |
|
88 | 91 | (defmethod request ((client client) url &key (method :GET) payload)
|
89 | 92 | (assert (client-access-token client)
|
90 |
| - nil "Client is not authenticated, use (gapi:auth client)") |
| 93 | + nil "Client is not authorized, use (gapi:auth client)") |
91 | 94 | (handler-case
|
92 | 95 | (jojo:parse
|
93 | 96 | (dex:request url
|
|
0 commit comments