Skip to content

Releases: openanalytics/shinyproxy

v2.6.1

Choose a tag to compare

@LEDfan LEDfan released this 01 Apr 12:01
  • Fix: update Spring Boot to 2.5.12 in order to mitigate CVE-2022-22965 See the GitHub issue for the latest updates on how this issue affects ShinyProxy.

  • Note: when using Redis for session persistence (e.g. when using the ShinyProxy Operator), you have to change the Redis configuration to use a different database (or a different namespace). By default, database 0 is used, you must change this to use database 1 (or any other free database). Use the spring.redis.database 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.

    A typical Redis session configuration should be changed from:

    spring:
      session:
        store-type: redis
      redis:
        host: redis
        password: ${REDIS_PASSWORD}

    to:

    spring:
      session:
        store-type: redis
      redis:
        host: redis
        password: ${REDIS_PASSWORD}
        database: 1

v2.6.0

Choose a tag to compare

@LEDfan LEDfan released this 05 Nov 12:14
  • add proxy.default-stop-proxy-on-logout option to not stop apps on logout of a user (see docs)
  • add option to limit the maximum lifetime of an app (see docs)
  • add proxy.stop-proxies-on-shutdown option to not stop apps on shutdown of ShinyProxy (see docs)
  • optionally restore running apps on startup (known as App Recovery)
  • add heartbeat-timeout property to the specification of proxies (see docs)
  • allow to disable the heartbeat-timeout property (see docs)
  • add authentication information to SpEL context (see docs)
  • add way to easily use runtime-values in SpEL (see docs)
  • add kubernetes-additional-persistent-manifests option to specification of apps. These Kubernetes manifests are created when an app starts, but are never removed (in contrast to kubernetes-additional-manifests) (see docs)
  • add absolute_apps_running, absolute_users_logged_in, absolute_users_logged_in metrics to Micrometer (i.e. Prometheus) metrics, providing a way more consistent and correct value
  • add proxy.usage-stats-micrometer-prefix to optionally prefix Micrometer (i.e. Prometheus) metrics
  • add target-path option to specification of apps (see docs)
  • 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.).
  • add Restart app button to navigation bar
  • add Stop app button to navigation bar
  • add mechanism to automatically reconnect the websocket connection in case it gets disconnected (see docs)
  • add support for running multiple instances of the same app by a single user (see docs)
  • add hide-navbar-on-main-page-link option to the specification of apps. When this option is enabled, the sp_hide_navbar 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).
  • 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 the corresponding GitHub issue)
  • add support for using SpEL in proxy.openid-logout-url (so that id_token_hint can be provided) (see docs)
  • add support for using http.proxyHost and http.proxyPort system properties for HTTP requests made by the SAML component (e.g. to fetch SAML metadata), contributed by @bartleboeuf
  • updated admin page to show more information
  • add support for grouping apps (see docs)
  • add support for specifying metadata to an app that can be used in the template (see docs)
  • add access-users property to proxy specification. This allows to configure a list of users that should have access to the app (see docs)
  • add access-expression property to proxy specification. This allows to configure a SpEL expression to determine whether a user has access to an app (see docs)
  • Operator: add proxy.operator.force-transfer 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 the operator docs).
  • Operator: automatically transfer user to latest ShinyProxy instance before logging in and after logging out (see the operator docs).
  • Operator: add proxy.operator.show-transfer-message-app-page option (see the operator docs).
  • Operator: add proxy.operator.show-transfer-message-main-page option (see the operator docs).
  • Fix: make issue form a client-side feature, such that current running app isn't closed
  • Fix: make it possible to run Jupyter Notebooks using ShinyProxy
  • Fix: make it easier to run Python Flask applications using ShinyProxy
  • Fix: update jQuery library so that the Bootstrap collapse module properly works
  • Fix: parsing of OIDC roles when these are provided as an embedded JSON string
  • Fix: return JSON on the DELETE /api/proxy/id API endpoint
  • Fix: show message when a login attempt is rejected because of an expired session
  • Fix: ensure API is accessible using access token when using Keycloak
  • Fix: cleanup any started container if user logs out during startup of an app
  • Fix: all web assets (JavaScript and CSS files) are now included in ShinyProxy itself and not loaded from a CDN
  • Fix: adapt the proxy.same-site-cookie property so that it also changes the SameSite Policy for session cookies created by Undertow (i.e. the session cookie when not using Redis)
  • Fix: adapt the server.secure-cookies property so that it also changes the Secure flag for session cookies created by Spring (i.e. the session cookie when using Redis)
  • Fix: update all included dependencies
  • Fix: do not show undefined in the browser when navigating away while an app is starting, for example, by logging out or navigating to the main page.
  • Fix: support parsing Keycloak JWKS information when it contains an ECDSA key
  • Note: using #{proxySpec.containerSpecs[0].env.get('SHINYPROXY_PUBLIC_PATH')}
    in the specification of an app will no longer work. The code can be replaced
    by #{proxy.getRuntimeValue('SHINYPROXY_PUBLIC_PATH')} (see the SpEL docs)
  • Note: change the default value for proxy.same-site-cookie to Lax, in order
    to ensure compatibility with changes to cookies in browsers (see the docs)

    When using SAML this value may need to be changed (see the docs)
  • Note: make sure to use server.secure-cookies: true when using proxy.same-site-cookie: None (e.g. for making SAML work properly), see the docs

v2.5.1

Choose a tag to compare

@LEDfan LEDfan released this 05 Nov 12:12

This release consists only of a security update. In previous releases, the SAML and Keycloak authentication backends did not protect against session fixation. If an attacker can deploy a malicious application in ShinyProxy or an attacker has control over web applications hosted on the same domain (or subdomain) of the ShinyProxy server, such an attacker was able to fix the session id of a user and ultimately hijack the session of a user. This requires the victim to either open the malicious app or webpage. Updating to ShinyProxy 2.5.1 or 2.6.0 is advised when using the Keycloak or SAML backend. Other authentication backends (e.g. OpenID Connect, LDAP) are not vulnerable. Therefore, it is possible to switch to
another authentication backend as a workaround.

  • Security Fix: enable session fixation protection when using SAML authentication

  • Security Fix: enable session fixation protection when using Keycloak authentication

    Note: the documentation of the Keycloak library advices to not employ session fixation protection, since this breaks "universal logout". However, since this is a non-standard extension of the OIDC protocol, we prefer the security benefits of this protection over the "universal logout" feature.

v2.5.0

Choose a tag to compare

@LEDfan LEDfan released this 02 Mar 13:12
  • add support for exposing Prometheus metrics
  • add support for SAML Logout (using the /saml/logout endpoint), contributed by @DefensePoint
  • add support for SAML Single Logout (using the /saml/SingleLogout endpoint)
  • add option to log SAML attributes whenever a user authenticates using SAML (proxy.saml.log-attributes)
  • expose SAML metadata on /saml/metadata endpoint
  • properly handle receiving expired SAML credentials by redirecting the user to /auth-error and logging a warning message.
  • add option to configure the max authentication age of SAML credentials (proxy.saml.max-authentication-age).
  • allow to specify the Same Site policy for Cookies (proxy.same-site-cookie).
  • add load balancer support for SAML authentication, contributed by @johannestang.
  • provide the SHINYPROXY_PUBLIC_PATH environment variable to app containers in order to allow compatibility with Dash 1.3 and RStudio. [
  • refactor label and annotations of application containers. These labels and annotations can be processed by monitoring software, such as Grafana Loki.
  • allow to specify the query parameter sp_hide_navbar=true on app pages in order to hide the navbar.
  • Docker image was improved in order to reduce the image size (~300MB vs ~800MB). Note: the /etc/shinyproxy config directory no longer exists. Configuration files should be placed inside the /opt/shinyproxy/application.yml directory. [
  • Fix: ensure SHINYPROXY_OIDC_ACCESS_TOKEN is always set when using OIDC and Redis for session storage
  • Fix: ensure clicking back button after authenticating does not cause errors when using SAML with (Azure) Active Directory
  • Fix: do not hardcode JS and CSS versions inside templates to allow easier upgrade
  • Fix: prevent redirect-loop when using OIDC and email is missing in attributes
  • Fix: handle stale session cookies and state when using OIDC (and Keycloak). This prevents errors when the user keeps an OIDC login page open for too long or using stale bookmarks.
  • Fix: username not shown when using OIDC, SAML ...

See the full release notes (with pointers to the documentation) at https://shinyproxy.io/downloads/#250

2.4.3

Choose a tag to compare

@LEDfan LEDfan released this 08 Jan 16:04
  • use GitHub Actions to test ShinyProxy against multiple Java and Kubernetes versions
  • Fix: properly cleanup proxies at shutdown
  • Fix: include health of Redis into readiness probe (but only when Redis is used)
  • Fix: fix SAML and Kerberos authentication (since 2.4.2 it would throw an Exception at startup)
  • Fix: take server context-path into account when redirecting to/auth-error

2.4.2

Choose a tag to compare

@LEDfan LEDfan released this 17 Dec 11:17
  • support any JDBC compatible database for storing usage statistics
  • use database connection pooling for usage statistics (improves the performance and reliability of it)
  • allow to use Spring Expression Language inside the kubernetes-pod-patches and kubernetes-additional-manifests configuration properties
  • add proxy.kubernetes.pod-wait-time property to configure the time ShinyProxy waits for a Kubernetes pod to become ready
  • add warning when using the removed server.use-forward-headers property
  • Fix: do not throw StackOverflowException when OpenID Connect throws an exception (e.g., when there is a configuration issue)
  • Fix: do not cause a redirect loop when ShinyProxy cannot verify an OpenID Connect token, but the user is correctly logged in (e.g., when there is a configuration issue)
  • Fix: disable debug log level for org.springframework.web.servlet.DispatcherServlet since it interfere with requests being proxied to the app
  • Fix: POST requests don't work when using OpenID Connect
  • Fix: make heartbeat mechanism less intrusive such that it doesn't break the websockets connection. Especially useful on slow connections and when using Shiny apps with large plots.

2.4.1

Choose a tag to compare

@LEDfan LEDfan released this 21 Oct 10:03
  • Fix: rebuild JAR packages using OpenJDK 8 so that they can be run using OpenJDK 8

2.4.0

Choose a tag to compare

@LEDfan LEDfan released this 12 Oct 11:51
  • support arbitrary settings at app level for the Kubernetes backend using pod patches
  • support for creating additional Kubernetes resources when an app starts and removing these when the app stops
  • instrument ShinyProxy for deployment using a Kubernetes operator
  • support Kubernetes liveness and readiness probes
  • improved handling of concurrent users of a proxied resource (increase proxy client's queue size to 100)
  • include version of ShinyProxy in startup messsage
  • support logout redirection for SAML authentication (proxy.saml.logout-url)
  • Fix: support compilation with both OpenJDK and Oracle JDK
  • Fix: POST requests to apps a.o. large file uploads
  • Fix: correct checksums generated by builds
  • Fix: build snapshot Docker images and push to Docker Hub
  • Fix: update dependencies so that Google Social Login is supported

2.3.1

Choose a tag to compare

@tverbeke tverbeke released this 18 Jun 15:40
  • support hosting of Zeppelin notebooks on ShinyProxy (by using non-greedy pattern matching to get app name)
  • possibility to set secure flag on cookies (server.secureCookies)
  • set HttpOnly on cookies set by ShinyProxy
  • set X-Frame-Options header using server.frameOptions
  • perform CSRF check on the login form and set X-Content-Type-Options header to nosniff
  • allow to set a forceAuthN flag when using SAML authentication (proxy.saml.force-authn)
  • improved parsing of custom OIDC role claims
  • improved support for the 'emails' claim in OIDC
  • Fix: AJAX error when using Keycloak
  • Fix: 'Error: 200' page in case of login expiration
  • Fix: 404 when a user makes concurrent /app_direct calls;
  • Fix: error when stopping containers in a different namespace;
  • Fix: documentation for web service authentication

2.3.0

Choose a tag to compare

@tverbeke tverbeke released this 21 Jun 15:21
  • support for (encrypted) SAML 2.0 based authentication and authorization;
  • support for writing application logs to S3 buckets;
  • additional logging for OpenID Connect based authentication and authorization