summaryrefslogtreecommitdiff
path: root/tests/client-manifest.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/client-manifest.scm')
-rw-r--r--tests/client-manifest.scm85
1 files changed, 85 insertions, 0 deletions
diff --git a/tests/client-manifest.scm b/tests/client-manifest.scm
new file mode 100644
index 0000000..cee586c
--- /dev/null
+++ b/tests/client-manifest.scm
@@ -0,0 +1,85 @@
+(use-modules (webid-oidc client-manifest)
+ (webid-oidc cache)
+ (webid-oidc testing)
+ (webid-oidc errors)
+ (web uri)
+ (srfi srfi-19)
+ (web response)
+ (ice-9 optargs)
+ (ice-9 receive))
+
+(with-test-environment
+ "client-manifest"
+ (lambda ()
+ (define what-to-respond
+ (build-response #:headers '((content-type text/turtle))))
+ (define what-to-respond-body
+ "@prefix solid: <http://www.w3.org/ns/solid/terms#> .
+
+<#app> solid:oidcRegistration \"\"\"{
+ \"client_id\" : \"https://app.example.com/id#app\",
+ \"redirect_uris\" : [\"https://app.example.com/callback\"],
+ \"client_name\" : \"Solid Application Name\",
+ \"client_uri\" : \"https://app.example.com/\",
+ \"logo_uri\" : \"https://app.example.com/logo.png\",
+ \"tos_uri\" : \"https://app.example.com/tos.html\",
+ \"scope\" : \"openid profile offline_access\",
+ \"grant_types\" : [\"refresh_token\",\"authorization_code\"],
+ \"response_types\" : [\"code\"],
+ \"default_max_age\" : 60000,
+ \"require_auth_time\" : true
+ }\"\"\" .
+")
+ (define* (respond uri #:key (headers '()))
+ (unless (equal? headers '((accept (text/turtle))))
+ (exit 1))
+ (when (string? uri)
+ (set! uri (string->uri uri)))
+ (unless (equal? uri
+ (string->uri "https://app.example.com/id#app"))
+ (exit 2))
+ (values what-to-respond what-to-respond-body))
+ (define current-time 0)
+ (define cache-http-get
+ (with-cache
+ #:current-time
+ (lambda ()
+ (make-time time-utc 0 current-time))
+ #:http-get respond))
+ (define mf
+ (get-client-manifest
+ (string->uri "https://app.example.com/id#app")
+ #:http-get cache-http-get))
+ (define id (client-manifest-client-id mf))
+ (unless (equal? id (string->uri "https://app.example.com/id#app"))
+ (exit 3))
+ (unless (client-manifest-check-redirect-uri mf "https://app.example.com/callback")
+ (exit 4))
+ (with-exception-handler
+ (lambda (error)
+ (unless ((record-predicate &unauthorized-redirection-uri) error)
+ (exit 5)))
+ (lambda ()
+ (client-manifest-check-redirect-uri mf "https://fraudulent-app.example.com/callback")
+ (exit 55))
+ #:unwind? #t
+ #:unwind-for-type &unauthorized-redirection-uri)
+ (receive (response response-body)
+ (serve-client-manifest
+ (time-utc->date (make-time time-utc 0 3600))
+ mf)
+ (unless (equal? (response-content-type response) '(text/turtle))
+ (exit 6))
+ (set! what-to-respond response)
+ (set! what-to-respond-body response-body)
+ (set! current-time 10)
+ (let ((re-parsed (get-client-manifest
+ (string->uri "https://app.example.com/id#app")
+ #:http-get cache-http-get)))
+ (map (lambda (key)
+ (unless (equal? (assq-ref mf key)
+ (assq-ref re-parsed key))
+ (exit 9)))
+ '(client_id redirect_uris client_name client_uri
+ logo_uri tos_uri scope grant_types response_types
+ default_max_age require_auth_time))))))