;; disfluid, implementation of the Solid specification ;; Copyright (C) 2021 Vivien Kraus ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU Affero 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 Affero General Public License for more details. ;; You should have received a copy of the GNU Affero General Public License ;; along with this program. If not, see . (define-module (webid-oidc client reverse-stubs) #:use-module (webid-oidc client) #:use-module (webid-oidc client accounts) #:use-module (webid-oidc client application) #:use-module (webid-oidc jwk) #:use-module (webid-oidc oidc-id-token) #:use-module ((webid-oidc stubs) #:prefix stubs:) #:use-module (web uri) #:use-module (oop goops) #:use-module (ice-9 receive) #:duplicates (merge-generics) #:declarative? #t #:export ( make-client get-client-id get-client-jwk get-client-redirect-uri make-account-full get-account-subject get-account-issuer get-account-key-pair get-account-id-token-header get-account-id-token get-account-access-token get-account-refresh-token )) (define (make-client client-id jwk redirect-uri) (make #:client-id client-id #:key-pair (if jwk (jwk->key (stubs:json-string->scm jwk)) ;; Generate a new one: #t) #:redirect-uri redirect-uri)) (define (get-client-id client) (uri->string (client-id client))) (define (get-client-jwk client) (stubs:scm->json-string (key->jwk (key-pair client)))) (define (get-client-redirect-uri client) (uri->string (redirect-uri client))) (define (make-account-full subject issuer key-pair id-token-header id-token access-token refresh-token) (make #:subject (string->uri subject) #:issuer (string->uri issuer) #:key-pair (jwk->key (stubs:json-string->scm key-pair)) #:id-token (and id-token-header id-token (make #:jwt-header (stubs:json-string->scm id-token-header) #:jwt-payload (stubs:json-string->scm id-token))) #:access-token access-token #:refresh-token refresh-token)) (define (get-account-subject account) (uri->string (subject account))) (define (get-account-issuer account) (uri->string (issuer account))) (define (get-account-key-pair account) (stubs:scm->json-string (key->jwk (key-pair account)))) (define (get-account-id-token-header account) (receive (id-token-header id-token) (let ((id (id-token account))) (if id (token->jwt id) (values #f #f))) (and id-token-header (stubs:scm->json-string id-token-header)))) (define (get-account-id-token account) (receive (id-token-header id-token) (let ((id (id-token account))) (if id (token->jwt id) (values #f #f))) (and id-token (stubs:scm->json-string id-token)))) (define (get-account-access-token account) (access-token account)) (define (get-account-refresh-token account) (refresh-token account))