From ca52802741d01835c3b8b5e9290edc699e2d2059 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Tue, 29 Aug 2023 19:27:22 -0400 Subject: [PATCH] [feature] Start of a test application --- src/test/resources/config-exsaml.xml | 84 ++++++++++++++++++++++++++ src/test/resources/myapp/controller.xq | 63 +++++++++++++++++++ src/test/resources/myapp/index.html | 8 +++ 3 files changed, 155 insertions(+) create mode 100644 src/test/resources/config-exsaml.xml create mode 100644 src/test/resources/myapp/controller.xq create mode 100644 src/test/resources/myapp/index.html diff --git a/src/test/resources/config-exsaml.xml b/src/test/resources/config-exsaml.xml new file mode 100644 index 0000000..e24bd26 --- /dev/null +++ b/src/test/resources/config-exsaml.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sso-user + + + + + + + + + + diff --git a/src/test/resources/myapp/controller.xq b/src/test/resources/myapp/controller.xq new file mode 100644 index 0000000..b070821 --- /dev/null +++ b/src/test/resources/myapp/controller.xq @@ -0,0 +1,63 @@ +xquery version "3.1"; + +declare namespace exist = "http://exist.sourceforge.net/NS/exist"; + +(: import exsaml module :) +import module namespace exsaml = "http://exist-db.org/xquery/exsaml" at 'xmldb:///db/system/repo/existdb-saml-xquery-1.7.0-SNAPSHOT/modules/exsaml.xqm'; + +declare variable $exist:controller external; +declare variable $exist:path external; + +(: this is required for SAML so that the IDP response can be rendered as a form + that gets auto-submitted by the user's browser, back to the SP (eXist) :) +declare option exist:serialize "method=html media-type=text/html indent=no"; + +(: handle SP endpoint to process SAML response in HTTP POST :) +if ($exist:path = "/SAML2SP") +then + let $log := util:log('info', "SAML2SP: processing SAML response") + let $status := exsaml:process-saml-response-post() + let $log := util:log('debug', "endpoint SAML2SP; status: " || $status/@code) + return + if ($status/@code >= 0) then + (: forward to page that was requested by the user :) + let $debug := util:log("info", "Auth success - code " || $status/@code || " - relaystate: " || $status/@relaystate) + return + + + + else + (: if SAML failed, display an error message for now :) + {string($status/@msg) || ": " || string($status/@data)} + +(: if logout, invalidate SAML token :) +else if ($exist:path = '/logout') +then + let $_ := + if (exsaml:is-enabled()) + then + exsaml:invalidate-saml-token() + else () + return + + + + +(: if no valid token, redirect to SAML auth :) +else if (exsaml:is-enabled() and not(exsaml:check-valid-saml-token())) +then + let $debug := exsaml:log('info', "controller: no valid token, redirect to SAML auth") + let $return-path := "/exist/apps" || $exist:controller || $exist:path + return + + + + + + + +(: We have an existing valid SAML token! :) +else + + + diff --git a/src/test/resources/myapp/index.html b/src/test/resources/myapp/index.html new file mode 100644 index 0000000..c8263e3 --- /dev/null +++ b/src/test/resources/myapp/index.html @@ -0,0 +1,8 @@ + + + My App + + +

Welcome to MyApp

+ + \ No newline at end of file