Skip to content

Commit 9904c62

Browse files
hiteshghugehghuge
andauthored
- redoc CPS issue (#1930)
Co-authored-by: hghuge <hghuge@digite.com>
1 parent 18c5b74 commit 9904c62

File tree

5 files changed

+54
-0
lines changed

5 files changed

+54
-0
lines changed

kairon/actions/server.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from loguru import logger as logging
22
from time import time
3+
import copy
34

45
from fastapi import FastAPI
56
from fastapi import Request, status
@@ -131,6 +132,13 @@ async def add_secure_headers(request: Request, call_next):
131132
response.headers["Access-Control-Allow-Origin"] = (
132133
requested_origin if requested_origin is not None else allowed_origins[0]
133134
)
135+
if request.url.path == "/redoc":
136+
custom_csp = copy.deepcopy(csp)
137+
custom_csp.worker_src("blob:")
138+
secure_headers.csp = custom_csp
139+
secure_headers.framework.fastapi(response)
140+
secure_headers.csp = csp
141+
134142
return response
135143

136144

kairon/api/app/main.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import copy
12
from fastapi import FastAPI, Request
23
from fastapi.exceptions import RequestValidationError
34
from fastapi.middleware.cors import CORSMiddleware
@@ -98,6 +99,12 @@ async def add_secure_headers(request: Request, call_next):
9899
response.headers['Cross-Origin-Resource-Policy'] = 'same-origin'
99100
requested_origin = request.headers.get("origin")
100101
response.headers["Access-Control-Allow-Origin"] = requested_origin if requested_origin is not None else allowed_origins[0]
102+
if request.url.path == "/redoc":
103+
custom_csp = copy.deepcopy(csp)
104+
custom_csp.worker_src("blob:")
105+
secure_headers.csp = custom_csp
106+
secure_headers.framework.fastapi(response)
107+
secure_headers.csp = csp
101108
return response
102109

103110

kairon/chat/server.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from time import time
2+
import copy
23

34
from fastapi import FastAPI, Request
45
from fastapi.exceptions import RequestValidationError
@@ -107,6 +108,12 @@ async def add_secure_headers(request: Request, call_next):
107108
logger.info(
108109
f"request path={request.url.path} completed_in={formatted_process_time}ms status_code={response.status_code}"
109110
)
111+
if request.url.path == "/redoc":
112+
custom_csp = copy.deepcopy(csp)
113+
custom_csp.worker_src("blob:")
114+
secure_headers.csp = custom_csp
115+
secure_headers.framework.fastapi(response)
116+
secure_headers.csp = csp
110117
return response
111118

112119

kairon/events/server.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import copy
12
from typing import Text
23

34
from fastapi import FastAPI, Request, Path, Query
@@ -86,6 +87,12 @@ async def add_secure_headers(request: Request, call_next):
8687
response.headers["Access-Control-Allow-Origin"] = requested_origin if requested_origin else allowed_origins[0]
8788
response.headers['Cross-Origin-Resource-Policy'] = 'same-origin'
8889
response.headers['Content-Type'] = 'application/json'
90+
if request.url.path == "/redoc":
91+
custom_csp = copy.deepcopy(csp)
92+
custom_csp.worker_src("blob:")
93+
secure_headers.csp = custom_csp
94+
secure_headers.framework.fastapi(response)
95+
secure_headers.csp = csp
8996
return response
9097

9198

tests/integration_test/services_test.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30574,3 +30574,28 @@ def test_leave_non_existent_bot_1():
3057430574
assert actual["message"] == "Access to bot is denied"
3057530575
assert actual["error_code"] == 422
3057630576
assert not actual["success"]
30577+
30578+
30579+
30580+
def test_redoc_headers():
30581+
response = client.get("/redoc")
30582+
assert response.status_code == 200
30583+
assert response.headers == {
30584+
"content-length": "498",
30585+
"content-type": "text/html; charset=utf-8",
30586+
"content-encoding": "gzip",
30587+
"vary": "Accept-Encoding",
30588+
"server": "Secure",
30589+
"strict-transport-security": "includeSubDomains; preload; max-age=31536000",
30590+
"x-frame-options": "SAMEORIGIN",
30591+
"x-xss-protection": "0",
30592+
"x-content-type-options": "nosniff",
30593+
"content-security-policy": "default-src 'self'; frame-ancestors 'self'; form-action 'self'; base-uri 'self'; connect-src 'self'; frame-src 'self'; style-src 'self' https: 'unsafe-inline'; img-src 'self' https:; script-src 'self' https: 'unsafe-inline'; worker-src blob:",
30594+
"referrer-policy": "no-referrer",
30595+
"cache-control": "must-revalidate",
30596+
"permissions-policy": "accelerometer=(), autoplay=(), camera=(), document-domain=(), encrypted-media=(), fullscreen=(), vibrate=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), sync-xhr=(), usb=()",
30597+
"cross-origin-embedder-policy": "require-corp",
30598+
"cross-origin-opener-policy": "same-origin",
30599+
"cross-origin-resource-policy": "same-origin",
30600+
"access-control-allow-origin": "*"
30601+
}

0 commit comments

Comments
 (0)