From 4f0b1a599126b9215500884d0b45d0f5aabea623 Mon Sep 17 00:00:00 2001 From: sgilbride Date: Tue, 20 Jul 2021 09:27:18 -0700 Subject: [PATCH 1/4] Returns user to login page if admin access token times out --- volttron/platform/web/admin_endpoints.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/volttron/platform/web/admin_endpoints.py b/volttron/platform/web/admin_endpoints.py index 7dc7884a9e..2f1c5e0cc3 100644 --- a/volttron/platform/web/admin_endpoints.py +++ b/volttron/platform/web/admin_endpoints.py @@ -41,7 +41,10 @@ import re from urllib.parse import parse_qs +import jwt + from volttron.platform.agent.known_identities import PLATFORM_WEB, AUTH +from volttron.platform.jsonrpc import RemoteError try: from jinja2 import Environment, FileSystemLoader, select_autoescape, TemplateNotFound @@ -157,9 +160,14 @@ def verify_and_dispatch(self, env, data): from volttron.platform.web import get_bearer, NotAuthorized try: claims = self._rpc_caller(PLATFORM_WEB, 'get_user_claims', get_bearer(env)).get() - except NotAuthorized: - _log.error("Unauthorized user attempted to connect to {}".format(env.get('PATH_INFO'))) - return Response('

Unauthorized User

', status="401 Unauthorized") + except RemoteError as e: + if "ExpiredSignatureError" in e.exc_info["exc_type"]: + _log.warn("Access token has expired! Please re-login to renew.") + template = template_env(env).get_template('login.html') + _log.debug("Login.html: {}".format(env.get('PATH_INFO'))) + return Response(template.render(), content_type='text/html') + else: + _log.error(e) # Make sure we have only admins for viewing this. if 'admin' not in claims.get('groups'): From 51d511a55c9252654cc5ace26008f9fabb792544 Mon Sep 17 00:00:00 2001 From: sgilbride Date: Tue, 20 Jul 2021 09:42:37 -0700 Subject: [PATCH 2/4] update warn to warning. --- volttron/platform/web/admin_endpoints.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/volttron/platform/web/admin_endpoints.py b/volttron/platform/web/admin_endpoints.py index 2f1c5e0cc3..1a22a4c5f2 100644 --- a/volttron/platform/web/admin_endpoints.py +++ b/volttron/platform/web/admin_endpoints.py @@ -162,7 +162,7 @@ def verify_and_dispatch(self, env, data): claims = self._rpc_caller(PLATFORM_WEB, 'get_user_claims', get_bearer(env)).get() except RemoteError as e: if "ExpiredSignatureError" in e.exc_info["exc_type"]: - _log.warn("Access token has expired! Please re-login to renew.") + _log.warning("Access token has expired! Please re-login to renew.") template = template_env(env).get_template('login.html') _log.debug("Login.html: {}".format(env.get('PATH_INFO'))) return Response(template.render(), content_type='text/html') From fcaae3217316cc0a868094c5d6738bd9755c228a Mon Sep 17 00:00:00 2001 From: sgilbride Date: Tue, 20 Jul 2021 10:52:23 -0700 Subject: [PATCH 3/4] Added catch for NotAuthorized back to verify_and_dispatch. --- volttron/platform/web/admin_endpoints.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/volttron/platform/web/admin_endpoints.py b/volttron/platform/web/admin_endpoints.py index 1a22a4c5f2..1e51a5f431 100644 --- a/volttron/platform/web/admin_endpoints.py +++ b/volttron/platform/web/admin_endpoints.py @@ -160,6 +160,9 @@ def verify_and_dispatch(self, env, data): from volttron.platform.web import get_bearer, NotAuthorized try: claims = self._rpc_caller(PLATFORM_WEB, 'get_user_claims', get_bearer(env)).get() + except NotAuthorized: + _log.error("Unauthorized user attempted to connect to {}".format(env.get('PATH_INFO'))) + return Response('

Unauthorized User

', status="401 Unauthorized") except RemoteError as e: if "ExpiredSignatureError" in e.exc_info["exc_type"]: _log.warning("Access token has expired! Please re-login to renew.") From 7b42ea502e93a95a795351b163854c7320b51fcb Mon Sep 17 00:00:00 2001 From: sgilbride Date: Tue, 20 Jul 2021 12:01:11 -0700 Subject: [PATCH 4/4] Removed unnecessary jwt import. --- volttron/platform/web/admin_endpoints.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/volttron/platform/web/admin_endpoints.py b/volttron/platform/web/admin_endpoints.py index 1e51a5f431..c386695863 100644 --- a/volttron/platform/web/admin_endpoints.py +++ b/volttron/platform/web/admin_endpoints.py @@ -41,8 +41,6 @@ import re from urllib.parse import parse_qs -import jwt - from volttron.platform.agent.known_identities import PLATFORM_WEB, AUTH from volttron.platform.jsonrpc import RemoteError