Skip to content

Commit e274f9f

Browse files
committed
refactor(auth): extract user/system validation into helper methods
Reduce cyclomatic complexity of _validate_structure from C (14) to B (8) by extracting _validate_user_fields and _validate_system_fields helper methods. No behavior change. RSPEED-2652 Signed-off-by: Major Hayden <major@redhat.com>
1 parent 4c7da17 commit e274f9f

1 file changed

Lines changed: 56 additions & 38 deletions

File tree

src/authentication/rh_identity.py

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def _validate_structure(self) -> None:
4848
"""Validate the identity data structure.
4949
5050
Raises:
51-
HTTPException: 400 if required fields are missing
51+
HTTPException: 400 if required fields are missing or malformed
5252
"""
5353
if (
5454
"identity" not in self.identity_data
@@ -64,44 +64,9 @@ def _validate_structure(self) -> None:
6464

6565
identity_type = identity["type"]
6666
if identity_type == "User":
67-
if "user" not in identity:
68-
logger.warning(
69-
"Identity validation failed: missing 'user' field for User type"
70-
)
71-
raise HTTPException(status_code=400, detail="Invalid identity data")
72-
user = identity["user"]
73-
if "user_id" not in user:
74-
logger.warning(
75-
"Identity validation failed: missing 'user_id' in user data"
76-
)
77-
raise HTTPException(status_code=400, detail="Invalid identity data")
78-
if "username" not in user:
79-
logger.warning(
80-
"Identity validation failed: missing 'username' in user data"
81-
)
82-
raise HTTPException(status_code=400, detail="Invalid identity data")
83-
self._validate_string_field("user_id", user["user_id"])
84-
self._validate_string_field("username", user["username"])
67+
self._validate_user_fields(identity)
8568
elif identity_type == "System":
86-
if "system" not in identity:
87-
logger.warning(
88-
"Identity validation failed: missing 'system' field for System type"
89-
)
90-
raise HTTPException(status_code=400, detail="Invalid identity data")
91-
system = identity["system"]
92-
if "cn" not in system:
93-
logger.warning(
94-
"Identity validation failed: missing 'cn' in system data"
95-
)
96-
raise HTTPException(status_code=400, detail="Invalid identity data")
97-
if "account_number" not in identity:
98-
logger.warning(
99-
"Identity validation failed: "
100-
"missing 'account_number' for System type"
101-
)
102-
raise HTTPException(status_code=400, detail="Invalid identity data")
103-
self._validate_string_field("cn", system["cn"])
104-
self._validate_string_field("account_number", identity["account_number"])
69+
self._validate_system_fields(identity)
10570
else:
10671
logger.warning("Identity validation failed: unsupported identity type")
10772
raise HTTPException(status_code=400, detail="Invalid identity data")
@@ -111,6 +76,59 @@ def _validate_structure(self) -> None:
11176
if org_id is not None and org_id != "":
11277
self._validate_string_field("org_id", org_id)
11378

79+
def _validate_user_fields(self, identity: dict) -> None:
80+
"""Validate required fields for User identity type.
81+
82+
Args:
83+
identity: The identity dict containing user data
84+
85+
Raises:
86+
HTTPException: 400 if required User fields are missing or malformed
87+
"""
88+
if "user" not in identity:
89+
logger.warning(
90+
"Identity validation failed: missing 'user' field for User type"
91+
)
92+
raise HTTPException(status_code=400, detail="Invalid identity data")
93+
user = identity["user"]
94+
if "user_id" not in user:
95+
logger.warning("Identity validation failed: missing 'user_id' in user data")
96+
raise HTTPException(status_code=400, detail="Invalid identity data")
97+
if "username" not in user:
98+
logger.warning(
99+
"Identity validation failed: missing 'username' in user data"
100+
)
101+
raise HTTPException(status_code=400, detail="Invalid identity data")
102+
self._validate_string_field("user_id", user["user_id"])
103+
self._validate_string_field("username", user["username"])
104+
105+
def _validate_system_fields(self, identity: dict) -> None:
106+
"""Validate required fields for System identity type.
107+
108+
Args:
109+
identity: The identity dict containing system data
110+
111+
Raises:
112+
HTTPException: 400 if required System fields are missing or malformed
113+
"""
114+
if "system" not in identity:
115+
logger.warning(
116+
"Identity validation failed: missing 'system' field for System type"
117+
)
118+
raise HTTPException(status_code=400, detail="Invalid identity data")
119+
system = identity["system"]
120+
if "cn" not in system:
121+
logger.warning("Identity validation failed: missing 'cn' in system data")
122+
raise HTTPException(status_code=400, detail="Invalid identity data")
123+
if "account_number" not in identity:
124+
logger.warning(
125+
"Identity validation failed: "
126+
"missing 'account_number' for System type"
127+
)
128+
raise HTTPException(status_code=400, detail="Invalid identity data")
129+
self._validate_string_field("cn", system["cn"])
130+
self._validate_string_field("account_number", identity["account_number"])
131+
114132
def _validate_string_field(
115133
self, field_name: str, value: Any, max_length: int = 256
116134
) -> None:

0 commit comments

Comments
 (0)