22# SPDX-License-Identifier: Apache-2.0
33
44
5- from pydantic import BaseModel , ConfigDict , Field
5+ import json
6+ from typing import Any
7+
8+ from pydantic import BaseModel , ConfigDict , Field , field_validator
69
710
811class CORSSettings (BaseModel ):
@@ -23,20 +26,20 @@ class CORSSettings(BaseModel):
2326 .. code-block:: bash
2427
2528 SYNCMASTER__SERVER__CORS__ENABLED=True
26- SYNCMASTER__SERVER__CORS__ALLOW_ORIGINS=["*"]
27- SYNCMASTER__SERVER__CORS__ALLOW_METHODS=["*"]
28- SYNCMASTER__SERVER__CORS__ALLOW_HEADERS=["*"]
29- SYNCMASTER__SERVER__CORS__EXPOSE_HEADERS=[" X-Request-ID"]
29+ SYNCMASTER__SERVER__CORS__ALLOW_ORIGINS=*
30+ SYNCMASTER__SERVER__CORS__ALLOW_METHODS=*
31+ SYNCMASTER__SERVER__CORS__ALLOW_HEADERS=*
32+ SYNCMASTER__SERVER__CORS__EXPOSE_HEADERS=X-Request-ID,Location,Access-Control-Allow-Credentials
3033
3134 For production environment:
3235
3336 .. code-block:: bash
3437
3538 SYNCMASTER__SERVER__CORS__ENABLED=True
36- SYNCMASTER__SERVER__CORS__ALLOW_ORIGINS=[" production.example.com"]
37- SYNCMASTER__SERVER__CORS__ALLOW_METHODS=[" GET"]
38- SYNCMASTER__SERVER__CORS__ALLOW_HEADERS=[" X-Request-ID", " X-Request-With"]
39- SYNCMASTER__SERVER__CORS__EXPOSE_HEADERS=[" X-Request-ID"]
39+ SYNCMASTER__SERVER__CORS__ALLOW_ORIGINS=production.example.com
40+ SYNCMASTER__SERVER__CORS__ALLOW_METHODS=GET
41+ SYNCMASTER__SERVER__CORS__ALLOW_HEADERS=X-Request-ID, X-Request-With
42+ SYNCMASTER__SERVER__CORS__EXPOSE_HEADERS=X-Request-ID
4043 # custom option passed directly to middleware
4144 SYNCMASTER__SERVER__CORS__MAX_AGE=600
4245 """
@@ -55,4 +58,13 @@ class CORSSettings(BaseModel):
5558 )
5659 expose_headers : list [str ] = Field (default = ["X-Request-ID" ], description = "HTTP headers exposed from server" )
5760
61+ @field_validator ("allow_origins" , "allow_methods" , "allow_headers" , "expose_headers" , mode = "before" )
62+ @classmethod
63+ def _validate_bootstrap_servers (cls , value : Any ):
64+ if not isinstance (value , str ):
65+ return value
66+ if "[" in value :
67+ return json .loads (value )
68+ return [item .strip () for item in value .split ("," )]
69+
5870 model_config = ConfigDict (extra = "allow" )
0 commit comments