tag:github.com,2008:https://github.com/openanalytics/shinyproxy/releasesRelease notes from shinyproxy2025-11-12T13:49:09Ztag:github.com,2008:Repository/59122025/v3.2.22025-11-12T14:17:43Zv3.2.2<p>The latest version of the release notes can be found on the <a href="https://shinyproxy.io/downloads/#322" rel="nofollow">website</a>.</p>
<ul>
<li>update dependencies</li>
<li>Fix: make compatible with Docker version 29</li>
</ul>LEDfantag:github.com,2008:Repository/59122025/v3.2.12025-10-28T15:35:15Zv3.2.1<p>The latest version of the release notes can be found on the <a href="https://shinyproxy.io/downloads/#321" rel="nofollow">website</a>.</p>
<p>This is a security update, it's highly recommended to update to this version.<br>
Make sure to update any customized templates to the latest version, this is<br>
required to fix the XSS bugs.</p>
<ul>
<li>update dependencies</li>
<li>ECS: correctly clean-up task-definitions on shutdown (when not using Redis)</li>
<li>ECS: correctly stops apps on shutdown (when not using Redis)</li>
<li>ECS: allow to use read-only root filesystem</li>
<li>ECS: ShinyProxy now requires the <code>ecs:TagResource</code> and<br>
<code>ecs:ListTaskDefinitions</code> permissions,<br>
see <a href="https://github.com/openanalytics/shinyproxy-config-examples/blob/master/20-ecs-minimal/terraform/4_shinyproxy_task_role.tf">docs</a></li>
<li>Security: fix multiple XSS vulnerabilities. In specific situations, an<br>
attacker can craft a dangerous app instance name, allowing XSS.</li>
</ul>LEDfantag:github.com,2008:Repository/59122025/v3.2.02025-10-28T15:36:57Zv3.2.0<p>The latest version of the release notes can be found on the <a href="https://shinyproxy.io/downloads/#320" rel="nofollow">website</a>.</p>
<ul>
<li>update to JDK 21</li>
<li>update to Spring Boot 3.4</li>
<li>use stripped down version of bootstrap to mitigate vulnerabilities</li>
<li>add the <a href="https://shinyproxy.io/documentation/shinyproxy-operator/docker/" rel="nofollow">ShinyProxy Operator for Docker</a></li>
<li>expose all apps (including apps a user has no access to) as a variable in templates (see <a href="https://github.com/openanalytics/shinyproxy-config-examples/tree/master/04-custom-html-template#global-variables">docs</a>)</li>
<li>support links in app descriptions</li>
<li>allow to show apps in grid on main page (see <a href="https://shinyproxy.io/documentation/configuration/#body-classes" rel="nofollow">docs</a>)</li>
<li>don't include <code>- Default</code> in title of app page</li>
<li>improve using ShinyProxy on a mobile device</li>
<li>much improved <a href="https://github.com/openanalytics/shinyproxy-monitoring#upgrade-to-320">monitoring stack</a></li>
<li>allow to embed Grafana into ShinyProxy</li>
<li>support monitoring stack on Docker hosts (see <a href="https://shinyproxy.io/documentation/shinyproxy-operator/docker/#enabling-monitoring" rel="nofollow">ShinyProxy Operator docs</a>)</li>
<li>don't restart crashed Kubernetes container (or pod), this makes debugging a crashed app easier</li>
<li>log reason a Kubernetes pod crashed</li>
<li>log reason a Docker container crashed</li>
<li>check health of a container before showing the <em>app crashed</em> page</li>
<li>show version and debugging information on admin page</li>
<li>exit with an error code when ShinyProxy crashes</li>
<li>more clearly log error when ShinyProxy crashes</li>
<li>improve error when defining duplicate users</li>
<li>shutdown ShinyProxy container when the JVM goes out of memory (only in official Docker image)</li>
<li>tweak Java memory settings for more efficient memory usage (only in official Docker image)</li>
<li>ensure that logs for failed apps are correctly shown in Grafana</li>
<li>check container health during startup, such that failures are detected more quickly</li>
<li>allow to record custom user attributes in usage statistics (see <a href="https://shinyproxy.io/documentation/usage-statistics/#configuration-1" rel="nofollow">docs</a>)</li>
<li>add CSV usage stats backend (see <a href="https://shinyproxy.io/documentation/usage-statistics/#configuration-1" rel="nofollow">docs</a>)</li>
<li>allow using <code>serverName</code> in <code>access-expression</code> to limit apps to specific domains</li>
<li>allow using SpEL in the <code>proxy.title</code> and <code>proxy.logo-url</code> properties</li>
<li>ECS: create single log group for each spec instead of for each proxy</li>
<li>ECS: rename the <code>proxy.ecs.enable-cloudwatch</code> to <code>proxy.ecs.enable-cloud-watch</code> for consistency (the old property still works)</li>
<li>ECS: support repository credentials (pull secrets) (see <a href="https://shinyproxy.io/documentation/configuration/#default-repository-credentials-parameter" rel="nofollow">docs</a>)</li>
<li>ECS: support adding SecretManger secrets (see <a href="https://shinyproxy.io/documentation/configuration/#ecs-managed-secrets" rel="nofollow">docs</a>), contributed by <a href="https://github.com/axel-nagel">@axel-nagel</a></li>
<li>Docker: bind host port of Docker containers on <code>127.0.0.1</code> instead of <code>0.0.0.0</code> (see <a href="https://shinyproxy.io/documentation/configuration/#target-bind-ip" rel="nofollow">docs</a> to change this)</li>
<li>Docker: allow specifying default docker network (see <a href="https://shinyproxy.io/documentation/configuration/#default-container-network" rel="nofollow">docs</a>)</li>
<li>Docker: allow to use <code>group-add</code> for Docker containers (see <a href="https://shinyproxy.io/documentation/configuration/#docker-group-add" rel="nofollow">docs</a>)</li>
<li>Docker: allow to use Loki Docker driver for collecting logs (see <a href="https://shinyproxy.io/documentation/configuration/#docker-loki-url" rel="nofollow">docs</a>)</li>
<li>add <code>delegate_app_status</code> and <code>appInfo</code> Prometheus metrics (see <a href="https://shinyproxy.io/documentation/usage-statistics/#exposed-metrics" rel="nofollow">docs</a>)</li>
<li>add option to not use default OpenID scopes (see <a href="https://shinyproxy.io/documentation/configuration/#include-default-scopes" rel="nofollow">docs</a>)</li>
<li>support fetching groups using the Microsoft Graph API when using OpenID (see <a href="https://shinyproxy.io/documentation/configuration/#using-microsoft-graph-api-to-fetch-groups" rel="nofollow">docs</a>)</li>
<li>add option to enforce HTTPS in the OpenID redirect URI (see <a href="https://shinyproxy.io/documentation/configuration/#enforce-https-redirect-uri" rel="nofollow">docs</a>)</li>
<li>allow to use the <code>NameID</code> as username when using SAML (see <a href="https://shinyproxy.io/documentation/configuration/#saml-name-attribute" rel="nofollow">docs</a>)</li>
<li>allow to handle usernames as case-insensitive (see <a href="https://shinyproxy.io/documentation/configuration/#username-case-sensitive" rel="nofollow">docs</a>)</li>
<li>add <em>custom header</em> authentication backend (see <a href="https://shinyproxy.io/documentation/configuration/#custom-header-based-authentication" rel="nofollow">docs</a>)</li>
<li>log message when receiving invalid status code when ShinyProxy checks reachability of app</li>
<li>allow to add extra fields to the <code>App Details</code> dialog (see <a href="https://shinyproxy.io/documentation/ui/#app-details" rel="nofollow">docs</a>)</li>
<li>ensure ShinyProxy can be seamlessly (without downtime) upgraded even if storage schema of Spring session changes</li>
<li>make the Docker and Kubernetes resources configuration more flexible (see <a href="https://shinyproxy.io/documentation/configuration/#memory-and-cpu-resources" rel="nofollow">docs</a>)</li>
<li>validate Kubernetes resources configuration, such that a more user-friendly error is reported</li>
<li>Note: for improved security, ShinyProxy now uses a (single) Kubernetes<br>
service to access pods. Therefore, ShinyProxy should have permission to manage<br>
Kubernetes services. The manifests of the operator are <a href="https://shinyproxy.io/documentation/shinyproxy-operator/kubernetes/#upgrade-to-220" rel="nofollow">updated</a> to support this.</li>
<li>Fix: don't send emails with zero-byte attachments</li>
<li>Fix: don't add request headers that contain non-allowed (i.e. everything except <code>ISO-8859-1</code>/<code>ISO-Latin-1</code>) characters</li>
<li>Fix: don't use protocol of <code>docker.url</code> as target protocol for connecting to apps</li>
<li>Fix: gracefully handle errors in usage stats, to not brake the apps</li>
<li>Fix: prevent memory leak in <code>SpecExpressionResolver</code></li>
<li>Fix: prevent memory leak in <code>ProxyMappingManager</code></li>
<li>Fix: prevent <code>IllegalStateException: creationTime key must not be null</code></li>
<li>Fix: prevent <code>ConcurrentModificationException</code> error</li>
<li>Fix: correctly load existing app when spec is removed</li>
<li>Fix: show <code>app crashed</code> page instead of reloading page in specific situations</li>
<li>Fix: prevent <code>NullPointerException</code> for requests without a <code>User-Agent</code> header</li>
</ul>LEDfantag:github.com,2008:Repository/59122025/v3.1.12024-06-20T12:02:33Zv3.1.1<p>The latest version of the release notes can be found on the <a href="https://shinyproxy.io/downloads/#311" rel="nofollow">website</a>.</p>
<ul>
<li>update dependencies</li>
<li>improve performance of fetching proxies owned by a user</li>
<li>add API endpoint to replace pre-initialized and shared containers</li>
<li>when opening an app that has an <code>external-app</code> configured, redirect to this URL when starting the app</li>
<li>allow specifying client-authentication-method in OpenID configuration, (see <a href="/openanalytics/shinyproxy/blob/documentation/configuration#client-authentication-method">docs</a>), contributed by <a href="https://github.com/MohamedAnouar">@MohamedAnouar</a></li>
<li>Fix: stop containers started using container pre-initialization and sharing when ShinyProxy stops</li>
<li>Fix: add workaround for authentication issue when opening a link to ShinyProxy from a MS Office application</li>
<li>Fix: retry (proxied) request to app when the app closes the TCP connection (fixes issues with loading assets of Shiny apps)</li>
<li>Fix: throw error on startup when app recovery is used together with container pre-initialization and sharing</li>
<li>Fix: force apps to not use compression on HTML responses such that the iframe script can be injected</li>
<li>Fix: allow admin to stop apps of other users again</li>
<li>Fix: avoid Thymeleaf warning</li>
<li>Fix: issue when using Datatables and SAML</li>
<li>Fix: do not load demo config when using <code>spring.config.location</code></li>
<li>Fix: ensure Docker port is only released when container has been stopped</li>
</ul>LEDfantag:github.com,2008:Repository/59122025/v3.1.02024-05-07T08:43:03Zv3.1.0<p>The latest version of the release notes can be found on the <a href="https://shinyproxy.io/downloads/#310" rel="nofollow">website</a>.</p>
<p>We want to thank all contributors that made this release possible. The<br>
"pre-initialization" feature was developed in cooperation with UCLouvain and NPL<br>
Markets. We would also like to thank AWS for contributing an initial version of<br>
the ECS backend. See the <a href="https://shinyproxy.io/support" rel="nofollow">support</a> page if your organization wants to sponsor a<br>
specific feature in ShinyProxy.</p>
<ul>
<li>
<p>update to JDK 17</p>
</li>
<li>
<p>update to Spring Boot 3.2</p>
</li>
<li>
<p>add support for pre-initializing containers (see <a href="https://shinyproxy.io/documentation/configuration/#container-pre-initialization-and-sharing" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>add support for sharing a container among multiple users (see <a href="https://shinyproxy.io/documentation/configuration/#container-pre-initialization-and-sharing" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>add support for autoscaling number of pre-initializer or shared containers (see <a href="https://shinyproxy.io/documentation/configuration/#container-pre-initialization-and-sharing" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>add AWS ECS backend, for running containers on AWS ECS Fargate, (see <a href="https://shinyproxy.io/documentation/configuration/#ecs" rel="nofollow">backend docs</a> and <a href="https://shinyproxy.io/documentation/configuration/#ecs-1" rel="nofollow">app docs</a> )</p>
</li>
<li>
<p>add option to show notification (a.k.a message of the day) to all users (see <a href="https://shinyproxy.io/documentation/configuration/#notification-message" rel="nofollow">docs</a>), contributed by <a href="https://github.com/ziyunxiao">@ziyunxiao</a></p>
</li>
<li>
<p>allow to use request and response objects in templates (e.g. to check the status code), see <a href="https://github.com/openanalytics/shinyproxy-config-examples/tree/master/04-custom-html-template#user-content-request-and-response-variables">example</a></p>
</li>
<li>
<p>replace in-memory caches by <a href="https://github.com/ben-manes/caffeine">Caffeine library</a> to reduce chance of memory leaks</p>
</li>
<li>
<p>cache whether a user is an admin</p>
</li>
<li>
<p>cache the maximum number of instances a user can start</p>
</li>
<li>
<p>cache proxyId for common endpoints</p>
</li>
<li>
<p>cache (app) favicons and logos</p>
</li>
<li>
<p>various performance improvements</p>
</li>
<li>
<p>support YAML array notation in <code>proxy.kubernetes.image-pull-secrets</code> property</p>
</li>
<li>
<p>allow configuring OpenID connect JWKS algorithm (see <a href="https://shinyproxy.io/documentation/configuration/#jwks-signature-algorithm" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>allow to use the (decoded) OpenID access token in SpEL (see <a href="https://shinyproxy.io/documentation/spel/#openid-connect" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>allow to use the JSON response returned by the authentication webservice in SpEL (see <a href="https://shinyproxy.io/documentation/spel/#webservice-authentication" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>allow to use groups when using webservice authentication (see <a href="https://shinyproxy.io/documentation/configuration/#authorization" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>allow to use custom name for container names (see docs: <a href="https://shinyproxy.io/documentation/configuration/#docker-resource-name" rel="nofollow">Docker</a>, <a href="https://shinyproxy.io/documentation/configuration/#swarm-resource-name" rel="nofollow">Docker Swarm</a> and <a href="https://shinyproxy.io/documentation/configuration/#kubernetes-resource-name" rel="nofollow">Kubernetes</a>)</p>
</li>
<li>
<p>use proxyId instead of containerId in service name on Kubernetes</p>
</li>
<li>
<p>allow to configure time to wait before Docker swarm service is ready (see <a href="https://shinyproxy.io/documentation/configuration/#docker-service-wait-time" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>replace Docker library by an up to date version</p>
</li>
<li>
<p>update Docker library to be compatible with recent Docker releases</p>
</li>
<li>
<p>add option to control cache headers sent by an app (see <a href="https://shinyproxy.io/documentation/configuration/#cache-headers-mode" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>add option to control the maximum number of running apps per app or in total (see <a href="https://shinyproxy.io/documentation/configuration/#max-total-instances" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>add cache headers to ShinyProxy assets (CSS and JS files)</p>
</li>
<li>
<p>send userid and groups as HTTP headers (see <a href="https://shinyproxy.io/documentation/configuration/#add-default-http-headers" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>add option to send custom attributes as HTTP headers (see <a href="https://shinyproxy.io/documentation/configuration/#http-headers" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>allow apps to link to an (external) page/url instead of starting a container (see <a href="https://shinyproxy.io/documentation/configuration/#external-url" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>check if app has crashed on websocket connection error</p>
</li>
<li>
<p>add authorized versions of <code>kubernetes-pod-patches</code>, <code>kubernetes-additional-manifests</code> and <code>kubernetes-additional-persistent-manifests</code>, allowing to control when these properties are applied (see <a href="https://shinyproxy.io/documentation/configuration/#kubernetes-authorized-pod-patches" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>improve Proxy status API endpoint</p>
</li>
<li>
<p>add support for specifying a (different) favicon per app (see <a href="https://shinyproxy.io/documentation/configuration/#app-favicon-path" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>add options to specify width, height, style and CSS class of app logos (see <a href="https://shinyproxy.io/documentation/configuration/#logo-height" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>drop social authentication, use the <a href="https://shinyproxy.io/documentation/configuration/#openid-connect-oidc" rel="nofollow">OpenID</a> backend instead</p>
</li>
<li>
<p>drop keycloak authentication, use the <a href="https://shinyproxy.io/documentation/configuration/#openid-connect-oidc" rel="nofollow">OpenID</a> backend instead</p>
</li>
<li>
<p>in the parameter form, do not reset values for other (default) parameters when changing a (default) parameter (but only if the resulting combination is allowed)</p>
</li>
<li>
<p>add log message to "auth-success" page to ease debugging when the redirect does not work</p>
</li>
<li>
<p>the <code>authFailed</code> metric is now increased when the <code>/auth-error</code> is shown to a user (e.g. after a login using OIDC failed)</p>
</li>
<li>
<p>collect the spec id in the <code>startFailed</code> (Prometheus) metrics (see <a href="https://github.com/openanalytics/shinyproxy-monitoring">updated dashboard</a>)</p>
</li>
<li>
<p>add (Prometheus) metric for crashed apps (see <a href="https://github.com/openanalytics/shinyproxy-monitoring">updated dashboard</a>)</p>
</li>
<li>
<p>OpenID: extract roles claim from user-info, in addition to extracting it from the ID token</p>
</li>
<li>
<p>OpenID: log all claims from ID token and user-info, even if no <code>roles-claim</code> is specified</p>
</li>
<li>
<p>the leader election of ShinyProxy now only runs on ShinyProxy replicas that are running the latest version. This allows to implement more advanced features.</p>
</li>
<li>
<p>implement container-dns when using Kubernetes</p>
</li>
<li>
<p>allow apps to override the mail-to-address (see <a href="https://shinyproxy.io/documentation/configuration/#app-support-mail-to-address" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>allow to override the subject of the support email (see <a href="https://shinyproxy.io/documentation/configuration/#app-support-mail-subject" rel="nofollow">docs</a>)</p>
</li>
<li>
<p>allow specifying <a href="https://shinyproxy.io/documentation/configuration/#docker-user" rel="nofollow"><code>docker-user</code></a> option for apps (works with Docker and Docker swarm)</p>
</li>
<li>
<p>allow specifying <a href="https://shinyproxy.io/documentation/configuration/#docker-ipc" rel="nofollow"><code>docker-ipc</code></a> option for apps (works with Docker)</p>
</li>
<li>
<p>allow specifying <a href="https://shinyproxy.io/documentation/configuration/#docker-runtime" rel="nofollow"><code>docker-runtime</code></a> option for apps (works with Docker only)</p>
</li>
<li>
<p>allow specifying <a href="https://shinyproxy.io/documentation/configuration/#docker-device-requests" rel="nofollow"><code>docker-device-requests</code></a> for apps (works with Docker only)</p>
</li>
<li>
<p>allow redirecting the user to the first available app (see <a href="https://shinyproxy.io/documentation/configuration/#landing-page" rel="nofollow">docs</a>), contributed by <a href="https://github.com/nickmelis">@nickmelis</a></p>
</li>
<li>
<p>allow redirecting the user to the only app available app (see <a href="https://shinyproxy.io/documentation/configuration/#landing-page" rel="nofollow">docs</a>), contributed by <a href="https://github.com/nickmelis">@nickmelis</a></p>
</li>
<li>
<p>Fix: loading favicon when using context-path</p>
</li>
<li>
<p>Fix: automatically add context-path to path in <code>proxy.landing-page</code></p>
</li>
<li>
<p>Fix: counter metrics when using multiple replicas</p>
</li>
<li>
<p>Fix: correctly collect logs when using Docker Swarm</p>
</li>
<li>
<p>Fix: delay release of Docker port, in order to prevent issues when the Docker daemon does not release the port immediately</p>
</li>
<li>
<p>Fix: report correct app id in report issue e-mail</p>
</li>
<li>
<p>Fix: cleanup WebSocket handles when WebSocket connection is closed or app is stopped (caused a memory leak in specific circumstances)</p>
</li>
<li>
<p>Fix: parse Kubernetes events when pod runs in a different namespace</p>
</li>
<li>
<p>Fix: prevent NPE in <code>KubernetesManifestsRemover</code> with certain CRDs</p>
</li>
<li>
<p>Fix: do not expose <code>logoUrl</code> property of spec in API</p>
</li>
<li>
<p>Fix: log warning when ShinyProxy cannot access the logs of a Kubernetes pod</p>
</li>
<li>
<p>Fix: make <code>track-app-url</code> work with non-absolute URLs</p>
</li>
<li>
<p>Fix: validation when creating new app instance (in switch instances modal)</p>
</li>
<li>
<p>Note: when using Prometheus<br>
for <a href="https://shinyproxy.io/documentation/usage-statistics#micrometer-prometheus" rel="nofollow">Usage Statistics</a>, you have<br>
to update the configuration: change the<br>
property <code>management.metrics.export.prometheus.enabled: true</code><br>
to <code>management.prometheus.metrics.export.enabled: true</code></p>
<p>A typical configuration should be changed from:</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="proxy:
# ...
usage-stats-url: micrometer
management:
metrics:
export:
prometheus:
enabled: true
# ..."><pre><span class="pl-ent">proxy</span>:
<span class="pl-c"><span class="pl-c">#</span> ...</span>
<span class="pl-ent">usage-stats-url</span>: <span class="pl-s">micrometer</span>
<span class="pl-ent">management</span>:
<span class="pl-ent">metrics</span>:
<span class="pl-ent">export</span>:
<span class="pl-ent">prometheus</span>:
<span class="pl-ent">enabled</span>: <span class="pl-c1">true</span>
<span class="pl-c"><span class="pl-c">#</span> ...</span></pre></div>
<p>to</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="proxy:
# ...
usage-stats-url: micrometer
management:
prometheus:
metrics:
export:
enabled: true
# ..."><pre><span class="pl-ent">proxy</span>:
<span class="pl-c"><span class="pl-c">#</span> ...</span>
<span class="pl-ent">usage-stats-url</span>: <span class="pl-s">micrometer</span>
<span class="pl-ent">management</span>:
<span class="pl-ent">prometheus</span>:
<span class="pl-ent">metrics</span>:
<span class="pl-ent">export</span>:
<span class="pl-ent">enabled</span>: <span class="pl-c1">true</span>
<span class="pl-c"><span class="pl-c">#</span> ...</span></pre></div>
</li>
<li>
<p>Note: when using Redis for <a href="https://shinyproxy.io/documentation/configuration/#session-and-app-persistence" rel="nofollow">session or app persistence</a> (e.g. when using the<br>
<a href="https://github.com/openanalytics/shinyproxy-operator">ShinyProxy Operator</a>),<br>
you have to update the Redis configuration:</p>
<ul>
<li>move all properties from <code>spring.redis</code> to <code>spring.data.redis</code></li>
<li>change <code>spring.redis.ssl: true</code> to <code>spring.data.redis.ssl.enabled: true</code></li>
<li>the internal data format of (Spring) session information has changed and is<br>
incompatible with the new format. Clear the database or use a different<br>
redis database (i.e. changing or adding <code>spring.data.redis.database</code><br>
(default is 0))</li>
</ul>
<p>A typical Redis session configuration should be changed from:</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="spring:
session:
store-type: redis
redis:
host: redis
password: ${REDIS_PASSWORD}
ssl: true
# this config implicitly uses database 0"><pre><span class="pl-ent">spring</span>:
<span class="pl-ent">session</span>:
<span class="pl-ent">store-type</span>: <span class="pl-s">redis</span>
<span class="pl-ent">redis</span>:
<span class="pl-ent">host</span>: <span class="pl-s">redis</span>
<span class="pl-ent">password</span>: <span class="pl-s">${REDIS_PASSWORD}</span>
<span class="pl-ent">ssl</span>: <span class="pl-c1">true</span>
<span class="pl-c"><span class="pl-c">#</span> this config implicitly uses database 0</span></pre></div>
<p>to:</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="spring:
session:
store-type: redis
data:
redis:
host: redis
password: ${REDIS_PASSWORD}
database: 1
ssl:
enabled: true"><pre><span class="pl-ent">spring</span>:
<span class="pl-ent">session</span>:
<span class="pl-ent">store-type</span>: <span class="pl-s">redis</span>
<span class="pl-ent">data</span>:
<span class="pl-ent">redis</span>:
<span class="pl-ent">host</span>: <span class="pl-s">redis</span>
<span class="pl-ent">password</span>: <span class="pl-s">${REDIS_PASSWORD}</span>
<span class="pl-ent">database</span>: <span class="pl-c1">1</span>
<span class="pl-ent">ssl</span>:
<span class="pl-ent">enabled</span>: <span class="pl-c1">true</span></pre></div>
</li>
</ul>LEDfantag:github.com,2008:Repository/59122025/v3.0.22023-07-27T06:42:16Zv3.0.2<p>The latest version of the release notes can be found on the <a href="https://shinyproxy.io/downloads/#302" rel="nofollow">website</a>.</p>
<ul>
<li>add option to ignore OpenID session expire (see <a href="https://shinyproxy.io/documentation/configuration/#ignore-session-expire" rel="nofollow">docs</a>)</li>
<li>streamline fallback config (do not use LDAP in fallback config and use same config for all deployment options)</li>
<li>add mobile viewport meta tags, contributed by <a href="https://github.com/tanho63">@tanho63</a> and <a href="https://github.com/andrewsali">@andrewsali</a></li>
<li>preserve subpath when starting an app</li>
<li>add compatibility with Dash.jl apps (see <a href="https://github.com/openanalytics/shinyproxy-dash-jl-demo">demo</a>)</li>
<li>add support for admin users in addition to admin groups (see <a href="/openanalytics/shinyproxy/blob/documentation/configuration/#admin-users">docs</a>)</li>
<li>add RuntimeValue <code>SHINYPROXY_USER_TIMEZONE</code> containing the timezone of the user (retrieved from the browser) (see <a href="/openanalytics/shinyproxy/blob/documentation/spel/#runtime-values">docs</a>).</li>
<li>Fix: prevent NullPointerExceptions in OpenID code</li>
<li>Fix: when a user opens an app before being authenticated, redirect user back to that app after login</li>
<li>Fix: make stopping an app more reliable (e.g. if stopping an app fails halfway)</li>
<li>Fix: prevent errors when requests during the start of an app fail because of a network issue. This is also a workaround for <a href="https://github.com/openanalytics/shinyproxy/issues/117#issuecomment-881237563" data-hovercard-type="issue" data-hovercard-url="/openanalytics/shinyproxy/issues/117/hovercard">a bug in Firefox</a>.</li>
<li>Fix improve behavior of refreshing the OpenID session, preventing unexpected logouts</li>
<li>Fix: prevent corrupt file downloads</li>
<li>Fix: prevent errors with UTF-8 characters on some platforms</li>
<li>Fix: prevent error when uploading files in RStudio</li>
<li>Fix: try to prevent the user from going back to the IDP when using OIDC or SAML, which causes the user to see an error. <strong>Note:</strong> because of some browser protections, this cannot be prevented completely. When the user clicks the back button multiple times, they may end up on the IDP page, however, the case where the user accidentally clicks the back button has been fixed.</li>
<li>Fix: ensure compatibility with <code>coder/code-server</code> (VS Code) versions after 4.10.1, by including any non-standard port in the <code>X-Forwarded-Host</code> header - Fix: allow using <code>=</code> in query string parameters</li>
<li>Security: the HTML page of an (active) app contained the full details of that app, including runtime values that were hidden since 3.0.0. This has been fixed by only showing the non-sensitive information.</li>
<li>Security: when using <code>none</code> authentication, (anonymous) users had access to the admin page and can see only their apps. This includes more information than what is returned from the API (e.g. the exact docker image used), but only for the apps started by that user. Updating is strongly advised when using <code>none</code> authentication.</li>
</ul>
<h2>Deprecations</h2>
<ul>
<li><strong>Component:</strong> Social Authentication<br><br>
<strong>Replacement:</strong> use the regular <a href="https://shinyproxy.io/documentation/configuration/#openid-connect-oidc" rel="nofollow">OpenID Connect implementation</a>. Concrete update steps and examples will be provided with the next release.<br><br>
<strong>Reason:</strong> the Social Authentication plugins are deprecated and no longer supported by the Spring Project. The next ShinyProxy release will upgrade to Spring Boot 3, which no longer supports these plugins.</li>
<li><strong>Component:</strong> Keycloak Authentication<br><br>
<strong>Replacement:</strong> use the regular <a href="https://shinyproxy.io/documentation/configuration/#openid-connect-oidc" rel="nofollow">OpenID Connect implementation</a>. Concrete update steps and examples will be provided with the next release.<br><br>
<strong>Reason:</strong> Further releases will still support Keycloak by using the general OpenID backend. The Keycloak project has deprecated the Keycloak adapters. The next ShinyProxy release will upgrade to Spring Boot 3, which no longer supports these plugins. In addition, the general OpenID authentication has advanced features and better integration.</li>
</ul>LEDfantag:github.com,2008:Repository/59122025/v3.0.12023-07-25T15:02:13Zv3.0.1<p>The latest version of the release notes can be found on the <a href="https://shinyproxy.io/downloads/#301" rel="nofollow">website</a>.</p>
<ul>
<li>support YAML arrays for the <code>groups</code> property of users</li>
<li>Fix: handle invalid requests to the <code>/app</code> and <code>/app_direct</code> as Forbidden (instead of Internal Server Error and logging exceptions)</li>
<li>Fix: do not parse commas (<code>,</code>) in the <code>container-cmd</code> property</li>
<li>Fix: do not add Content-Length header when Transfer-Encoding header is present while injecting JavaScript file into the iframe</li>
</ul>LEDfantag:github.com,2008:Repository/59122025/v3.0.02023-03-02T12:33:47Zv3.0.0<p>The latest version of the release notes can be found on the <a href="https://shinyproxy.io/downloads/#300" rel="nofollow">website</a>.</p>
<ul>
<li>add support for app parameters such that the user must select some (arbitrary) parameters before starting an app (see <a href="https://shinyproxy.io/documentation/app-parameters" rel="nofollow">docs</a>).</li>
<li>add support for running multiple ShinyProxy replicas providing scaling and high availability (see <a href="https://shinyproxy.io/documentation/configuration/#high-availability-and-scaling" rel="nofollow">docs</a>)</li>
<li>add option to automatically pull Docker image when using Docker engine</li>
<li>add support for Shiny bookmarking</li>
<li>add option to track the URL of the app in the browser. This ensures the URL in the browser changes together with the (active) URL of the iframe.</li>
<li>add Prometheus metrics for the duration of the individual steps of starting an app (e.g. scheduling, pulling image, starting of application) see <a href="https://shinyproxy.io/documentation/usage-statistics/#exposed-metrics" rel="nofollow">docs</a>)</li>
<li>support using multiple usage statistics plugins at the same time, ( see <a href="https://shinyproxy.io/documentation/usage-statistics/#using-multiple-statistics-backends" rel="nofollow">docs</a>). - add <code>My Apps</code> modal that shows the current (active) applications of the user. This can also be shown inline on the main page.</li>
<li>add <code>App Details</code> modal to the app page, the <code>Switch Instance</code> modal and the ( new) <code>My Apps</code> modal. In addition to showing basic information about an app, it also shows when an app will be stopped by ShinyProxy (e.g. because of heartbeat timeout or max-lifetime). - show a message when the user has access to zero apps (instead of an empty page)</li>
<li>add support for additional port mappings. For example proxying the path <code>/mypath</code> to a different port on the same container, see <a href="https://shinyproxy.io/documentation/configuration/#additional-port-mappings" rel="nofollow">docs</a></li>
<li>inject a javascript file into the iframe on the server (instead of on the client). The previous method did not work all the time on all browsers. - improve <a href="https://shinyproxy.io/documentation/ui/#admin-page" rel="nofollow">admin page</a></li>
<li>add option to show the <code>Switch Instance</code> modal before opening an app such that the user can re-open an existing app or choose the name for a new app, see <a href="https://shinyproxy.io/documentation/configuration/#always-show-switch-instance" rel="nofollow">docs</a>.</li>
<li>add support for secrets when using Docker Swarm, see <a href="https://shinyproxy.io/documentation/configuration/#docker-swarm-secrets" rel="nofollow">docs</a> - add support for memory and cpu requests and limits when using Docker Swarm</li>
<li>add support for private registries when using Docker and Docker Swarm, see <a href="https://shinyproxy.io/documentation/configuration/#docker-registry-username" rel="nofollow">docs</a></li>
<li>the duration of the API call to start an app is now limited at 10 seconds, therefore there is no need to increase request timeouts of proxies or loadbalancers</li>
<li>do not show internal errors and stack traces to users for improved security (errors are still logged)</li>
<li>improve error reporting when app fails to start on Kubernetes: warnings reported by Kubernetes are now logged in ShinyProxy logs (e.g. issues with the image, issues with the nodes or scaling etc.)</li>
<li>add option to output logs as (structured) JSON (using logstash format) (see <a href="https://shinyproxy.io/documentation/configuration/#json-logstash-logging" rel="nofollow">docs</a>)</li>
<li>logged stack traces are now more concise (when using the JSON format)</li>
<li>improve collecting applications logs on Kubernetes by ensuring that logs are always flushed</li>
<li>improve application log writing to S3: logs are now send to S3 every 10 seconds and every 1MB (previously the Docker backend would write the logs to S3 on every write)</li>
<li>improve App Recovery by not using the application spec when recovering applications. Therefore, the spec of running applications can be changed or removed, after which the ShinyProxy can be restarted ( see <a href="https://shinyproxy.io/documentation/app-recovery" rel="nofollow">updated docs</a>)</li>
<li>add support for setting an annotation to <code>kubernetes-additional-manifests</code> that allows to specify how existing Kubernetes resources must be updated (see <a href="https://shinyproxy.io/documentation/configuration/#kubernetes-additional-manifests" rel="nofollow">docs</a>)</li>
<li>when <code>proxy.kubernetes.debug-patches</code> is enabled additional manifests are now logged as well</li>
<li>add support for using auth related objects in SPeL expressions in the <code>kubernetes-additional-manifests</code> and <code>kubernetes-additional-persistent-manifests</code> properties</li>
<li>change the way <code>kubernetes-additional-manifests</code> are deleted such that the SPeL expressions in these properties are not evaluated when the manifests are deleted. Therefore, ShinyProxy can now delete resources of which the name is dynamic (using SpEL) or when the spec is unknown (e.g. when using the operator or App Recovery).</li>
<li>make it possible to use SpEL in <code>max-instances</code>, <code>heartbeat-timeout</code>, <code>max-lifetime</code> and <code>target-path</code> properties (see <a href="https://shinyproxy.io/documentation/spel" rel="nofollow">docs</a>)</li>
<li>the API no longer returns security-sensitive runtime values</li>
<li>the API no longer includes the spec when returning information about an app, such that the API does not return security-sensitive information</li>
<li>the API now returns only a limited set of properties when querying for specs ( also to improve security), this can optionally be reverted (see <a href="https://shinyproxy.io/documentation/configuration/#hide-spec-details" rel="nofollow">docs</a>)</li>
<li>add option to configure CORS (see <a href="https://shinyproxy.io/documentation/configuration/#cors-allowed-origins" rel="nofollow">docs</a>)</li>
<li>add option to add custom headers to HTTP responses (see <a href="https://shinyproxy.io/documentation/configuration/#custom-headers" rel="nofollow">docs</a>)</li>
<li>add option to disable default security headers (see <a href="https://shinyproxy.io/documentation/configuration/#disable-no-sniff-header" rel="nofollow">docs</a>)</li>
<li>add OpenAPI specification and swagger API docs</li>
<li>drop kerberos support</li>
<li>OIDC access tokens are now automatically refreshed, such that a new container always has a non-expired access tokens. ShinyProxy now also respects the max session lifetime of the OIDC Identity Provider.</li>
<li>make it possible to use PKCE when using OIDC (see <a href="https://shinyproxy.io/documentation/configuration/#with-pkce" rel="nofollow">docs</a>)</li>
<li>make it possible to use the <code>userinfo-url</code> endpoint when using OIDC (see <a href="https://shinyproxy.io/documentation/configuration/#userinfo" rel="nofollow">docs</a>)</li>
<li>Fix: properly handle when user reloads the page while starting or stopping an app</li>
<li>Fix: ensure height of apps is correct when using custom navbar</li>
<li>Fix: restore ShinyProxy acting as an OAuth Resource Server</li>
<li>Fix: memory leak in <code>ActiveProxiesService</code></li>
<li>Fix: prevent the user from ending on the <code>/auth-error</code> page when their session expires when using OIDC</li>
<li>Fix: always redirect to the main page after logging in. Otherwise, users might end up on internal API endpoints or on pages that no longer exist (e.g. removed app or instances).</li>
<li>Fix: replace the SAML implementation using the new Spring implementation for improved security</li>
<li>Fix: do no return internal errors (e.g. <code>app_stopped_or_non_existent</code>) on <code>/app_direct</code> endpoint</li>
<li>Fix: correctly parse <code>emails</code> claim when using OIDC</li>
</ul>LEDfantag:github.com,2008:Repository/59122025/v2.6.12022-04-01T13:21:36Zv2.6.1<ul>
<li>
<p>Fix: update Spring Boot to 2.5.12 in order to mitigate <a href="https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement" rel="nofollow">CVE-2022-22965</a> See the <a href="https://github.com/openanalytics/shinyproxy/issues/364" data-hovercard-type="issue" data-hovercard-url="/openanalytics/shinyproxy/issues/364/hovercard">GitHub issue</a> for the latest updates on how this issue affects ShinyProxy.</p>
</li>
<li>
<p>Note: when using Redis for session persistence (e.g. when using the <a href="https://github.com/openanalytics/shinyproxy-operator">ShinyProxy Operator</a>), you have to change the Redis configuration to use a different database (or a different namespace). By default, database <code>0</code> is used, you must change this to use database <code>1</code> (or any other free database). Use the <code>spring.redis.database</code> property for this (see example). This change will require the users to re-login. This change is required because the data format of the session information has changed in Spring.</p>
<p>A typical Redis session configuration should be changed from:</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="spring:
session:
store-type: redis
redis:
host: redis
password: ${REDIS_PASSWORD}"><pre><span class="pl-ent">spring</span>:
<span class="pl-ent">session</span>:
<span class="pl-ent">store-type</span>: <span class="pl-s">redis</span>
<span class="pl-ent">redis</span>:
<span class="pl-ent">host</span>: <span class="pl-s">redis</span>
<span class="pl-ent">password</span>: <span class="pl-s">${REDIS_PASSWORD}</span></pre></div>
<p>to:</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="spring:
session:
store-type: redis
redis:
host: redis
password: ${REDIS_PASSWORD}
database: 1"><pre><span class="pl-ent">spring</span>:
<span class="pl-ent">session</span>:
<span class="pl-ent">store-type</span>: <span class="pl-s">redis</span>
<span class="pl-ent">redis</span>:
<span class="pl-ent">host</span>: <span class="pl-s">redis</span>
<span class="pl-ent">password</span>: <span class="pl-s">${REDIS_PASSWORD}</span>
<span class="pl-ent">database</span>: <span class="pl-c1">1</span></pre></div>
</li>
</ul>LEDfantag:github.com,2008:Repository/59122025/v2.6.02021-11-05T15:16:22Zv2.6.0<ul>
<li>add <code>proxy.default-stop-proxy-on-logout</code> option to not stop apps on logout of a user (see <a href="https://shinyproxy.io/documentation/configuration/#default-stop-proxy-on-logout" rel="nofollow">docs</a>)</li>
<li>add option to limit the maximum lifetime of an app (see <a href="https://shinyproxy.io/documentation/configuration/#default-max-lifetime" rel="nofollow">docs</a>)</li>
<li>add <code>proxy.stop-proxies-on-shutdown</code> option to not stop apps on shutdown of ShinyProxy (see <a href="https://shinyproxy.io/documentation/configuration/#stop-proxies-on-shutdown" rel="nofollow">docs</a>)</li>
<li>optionally restore running apps on startup (known as <a href="https://shinyproxy.io/documentation/app-recovery/" rel="nofollow">App Recovery</a>)</li>
<li>add <code>heartbeat-timeout</code> property to the specification of proxies (see <a href="https://shinyproxy.io/documentation/configuration/#app-heartbeat-timeout" rel="nofollow">docs</a>)</li>
<li>allow to disable the <code>heartbeat-timeout</code> property (see <a href="https://shinyproxy.io/documentation/configuration/#heartbeat-timeout" rel="nofollow">docs</a>)</li>
<li>add authentication information to SpEL context (see <a href="https://shinyproxy.io/documentation/spel/#authentication-objects" rel="nofollow">docs</a>)</li>
<li>add way to easily use runtime-values in SpEL (see <a href="https://shinyproxy.io/documentation/spel/#runtime-values" rel="nofollow">docs</a>)</li>
<li>add <code>kubernetes-additional-persistent-manifests</code> option to specification of apps. These Kubernetes manifests are created when an app starts, but are never removed (in contrast to <code>kubernetes-additional-manifests</code>) (see <a href="https://shinyproxy.io/documentation/configuration/#kubernetes-additional-persistent-manifests" rel="nofollow">docs</a>)</li>
<li>add <code>absolute_apps_running</code>, <code>absolute_users_logged_in</code>, <code>absolute_users_logged_in</code> metrics to Micrometer (i.e. Prometheus) metrics, providing a way more consistent and correct value</li>
<li>add <code>proxy.usage-stats-micrometer-prefix</code> to optionally prefix Micrometer (i.e. Prometheus) metrics</li>
<li>add <code>target-path</code> option to specification of apps (see <a href="https://shinyproxy.io/documentation/configuration/#target-path" rel="nofollow">docs</a>)</li>
<li>add a fallback heartbeat system for when the app does not use websockets and does not send HTTP requests often enough. This makes it easier to run applications which do not have these functionalities (e.g. traditional server-rendered apps, static html files etc.).</li>
<li>add <code>Restart app</code> button to navigation bar</li>
<li>add <code>Stop app</code> button to navigation bar</li>
<li>add mechanism to automatically reconnect the websocket connection in case it gets disconnected (see <a href="https://shinyproxy.io/documentation/ui/#automatically-reconnecting-websockets" rel="nofollow">docs</a>)</li>
<li>add support for running multiple instances of the same app by a single user (see <a href="https://shinyproxy.io/documentation/ui/#using-multiple-instances-of-an-app" rel="nofollow">docs</a>)</li>
<li>add <code>hide-navbar-on-main-page-link</code> option to the specification of apps. When this option is enabled, the <code>sp_hide_navbar</code> query parameter will be added to the link on the main page to that app. This way you can control that an individual app is opened with the navbar hidden, while it is still possible to show the navbar for that app (by changing the URL).</li>
<li>automatically extend the lifetime of the session of a user when a websocket connection is active. This prevents the user from automatically getting logged out when using an app that only uses a websocket connection and no HTTP requests (see <a href="https://github.com/openanalytics/shinyproxy/issues/137" data-hovercard-type="issue" data-hovercard-url="/openanalytics/shinyproxy/issues/137/hovercard">the corresponding GitHub issue</a>)</li>
<li>add support for using SpEL in <code>proxy.openid-logout-url</code> (so that <code>id_token_hint</code> can be provided) (see <a href="https://shinyproxy.io/documentation/configuration/#openid-logout-url" rel="nofollow">docs</a>)</li>
<li>add support for using <code>http.proxyHost</code> and <code>http.proxyPort</code> system properties for HTTP requests made by the SAML component (e.g. to fetch SAML metadata), contributed by <a href="https://github.com/bartleboeuf">@bartleboeuf</a></li>
<li>updated <a href="https://shinyproxy.io/documentation/ui/#admin-page" rel="nofollow">admin page</a> to show more information</li>
<li>add support for grouping apps (see <a href="https://shinyproxy.io/documentation/configuration/#template-groups" rel="nofollow">docs</a>)</li>
<li>add support for specifying metadata to an app that can be used in the template (see <a href="https://shinyproxy.io/documentation/configuration/#template-properties" rel="nofollow">docs</a>)</li>
<li>add <code>access-users</code> property to proxy specification. This allows to configure a list of users that should have access to the app (see <a href="https://shinyproxy.io/documentation/configuration/#access-users" rel="nofollow">docs</a>)</li>
<li>add <code>access-expression</code> property to proxy specification. This allows to configure a SpEL expression to determine whether a user has access to an app (see <a href="https://shinyproxy.io/documentation/configuration/#access-expression" rel="nofollow">docs</a>)</li>
<li>Operator: add <code>proxy.operator.force-transfer</code> option. When enabled a user is automatically transferred to the latest ShinyProxy instance when not using any apps. This is checked both on the main page and before starting a new app (see <a href="https://github.com/openanalytics/shinyproxy-operator/tree/develop/shinyproxy">the operator docs</a>).</li>
<li>Operator: automatically transfer user to latest ShinyProxy instance before logging in and after logging out (see <a href="https://github.com/openanalytics/shinyproxy-operator/tree/develop/shinyproxy">the operator docs</a>).</li>
<li>Operator: add <code>proxy.operator.show-transfer-message-app-page</code> option (see <a href="https://github.com/openanalytics/shinyproxy-operator/tree/develop/shinyproxy">the operator docs</a>).</li>
<li>Operator: add <code>proxy.operator.show-transfer-message-main-page</code> option (see <a href="https://github.com/openanalytics/shinyproxy-operator/tree/develop/shinyproxy">the operator docs</a>).</li>
<li>Fix: make issue form a client-side feature, such that current running app isn't closed</li>
<li>Fix: make it possible to run Jupyter Notebooks using ShinyProxy</li>
<li>Fix: make it easier to run Python Flask applications using ShinyProxy</li>
<li>Fix: update jQuery library so that the Bootstrap collapse module properly works</li>
<li>Fix: parsing of OIDC roles when these are provided as an embedded JSON string</li>
<li>Fix: return JSON on the <code>DELETE /api/proxy/id</code> API endpoint</li>
<li>Fix: show message when a login attempt is rejected because of an expired session</li>
<li>Fix: ensure API is accessible using access token when using Keycloak</li>
<li>Fix: cleanup any started container if user logs out during startup of an app</li>
<li>Fix: all web assets (JavaScript and CSS files) are now included in ShinyProxy itself and not loaded from a CDN</li>
<li>Fix: adapt the <code>proxy.same-site-cookie</code> property so that it also changes the SameSite Policy for session cookies created by Undertow (i.e. the session cookie when not using Redis)</li>
<li>Fix: adapt the <code>server.secure-cookies</code> property so that it also changes the Secure flag for session cookies created by Spring (i.e. the session cookie when using Redis)</li>
<li>Fix: update all included dependencies</li>
<li>Fix: do not show <code>undefined</code> in the browser when navigating away while an app is starting, for example, by logging out or navigating to the main page.</li>
<li>Fix: support parsing Keycloak JWKS information when it contains an ECDSA key</li>
<li>Note: using <code>#{proxySpec.containerSpecs[0].env.get('SHINYPROXY_PUBLIC_PATH')}</code><br>
in the specification of an app will no longer work. The code can be replaced<br>
by <code>#{proxy.getRuntimeValue('SHINYPROXY_PUBLIC_PATH')}</code> (see <a href="https://shinyproxy.io/documentation/spel" rel="nofollow">the SpEL docs</a>)</li>
<li>Note: change the default value for <code>proxy.same-site-cookie</code> to <code>Lax</code>, in order<br>
to ensure compatibility with changes to cookies in browsers (see <a href="https://shinyproxy.io/documentation/configuration/#same-site-cookies" rel="nofollow">the docs</a>)<br><br>
When using SAML this value may need to be changed (see <a href="https://shinyproxy.io/documentation/configuration/#samesitecookies-and-saml" rel="nofollow">the docs</a>)</li>
<li>Note: make sure to use <code>server.secure-cookies: true</code> when using <code>proxy.same-site-cookie: None</code> (e.g. for making SAML work properly), see <a href="https://shinyproxy.io/documentation/configuration/#same-site-cookies" rel="nofollow">the docs</a></li>
</ul>LEDfan