From 207d78fc775b3e0486c4e2beeb8d84043a105686 Mon Sep 17 00:00:00 2001 From: nitinkr0411 Date: Mon, 19 Aug 2024 04:11:19 +0000 Subject: [PATCH] rt-branding --- Dockerfile | 1 + backend/apps/webui/routers/auths.py | 2 +- backend/utils/utils.py | 2 +- rt-static/favicon.png | Bin 0 -> 1479 bytes rt-static/splash.png | Bin 0 -> 18186 bytes 5 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 rt-static/favicon.png create mode 100644 rt-static/splash.png diff --git a/Dockerfile b/Dockerfile index 8078bf0eac..b7a33a9d52 100644 --- a/Dockerfile +++ b/Dockerfile @@ -145,6 +145,7 @@ RUN pip3 install uv && \ COPY --chown=$UID:$GID --from=build /app/build /app/build COPY --chown=$UID:$GID --from=build /app/CHANGELOG.md /app/CHANGELOG.md COPY --chown=$UID:$GID --from=build /app/package.json /app/package.json +COPY --chown=$UID:$GID ./rt-static /app/rt-static # copy backend files COPY --chown=$UID:$GID ./backend . diff --git a/backend/apps/webui/routers/auths.py b/backend/apps/webui/routers/auths.py index 9676f78b56..e68cad7f00 100644 --- a/backend/apps/webui/routers/auths.py +++ b/backend/apps/webui/routers/auths.py @@ -132,7 +132,7 @@ async def signin(request: Request, response: Response, form_data: SigninForm): trusted_email = decode_token_from_alb(jwt)["email"] trusted_email = trusted_email.lower() trusted_name = trusted_email - + if WEBUI_AUTH_TRUSTED_NAME_HEADER: trusted_name = request.headers.get( WEBUI_AUTH_TRUSTED_NAME_HEADER, trusted_email diff --git a/backend/utils/utils.py b/backend/utils/utils.py index ddac6f2181..0a92ddcde0 100644 --- a/backend/utils/utils.py +++ b/backend/utils/utils.py @@ -54,7 +54,7 @@ def decode_token(token: str) -> Optional[dict]: except Exception: return None - + def decode_token_from_alb(token: str) -> Optional[dict]: try: payload = jwt.decode(token, options={"verify_signature": False}) diff --git a/rt-static/favicon.png b/rt-static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..cc13ab97e104ddbdf204edbe45a88eb4558f6989 GIT binary patch literal 1479 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 literal 0 HcmV?d00001