Skip to content

Commit 3f58309

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 8368134 commit 3f58309

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
@@ -52,7 +52,7 @@ def _validate_structure(self) -> None:
5252
"""Validate the identity data structure.
5353
5454
Raises:
55-
HTTPException: 400 if required fields are missing
55+
HTTPException: 400 if required fields are missing or malformed
5656
"""
5757
if (
5858
"identity" not in self.identity_data
@@ -68,44 +68,9 @@ def _validate_structure(self) -> None:
6868

6969
identity_type = identity["type"]
7070
if identity_type == "User":
71-
if "user" not in identity:
72-
logger.warning(
73-
"Identity validation failed: missing 'user' field for User type"
74-
)
75-
raise HTTPException(status_code=400, detail="Invalid identity data")
76-
user = identity["user"]
77-
if "user_id" not in user:
78-
logger.warning(
79-
"Identity validation failed: missing 'user_id' in user data"
80-
)
81-
raise HTTPException(status_code=400, detail="Invalid identity data")
82-
if "username" not in user:
83-
logger.warning(
84-
"Identity validation failed: missing 'username' in user data"
85-
)
86-
raise HTTPException(status_code=400, detail="Invalid identity data")
87-
self._validate_string_field("user_id", user["user_id"])
88-
self._validate_string_field("username", user["username"])
71+
self._validate_user_fields(identity)
8972
elif identity_type == "System":
90-
if "system" not in identity:
91-
logger.warning(
92-
"Identity validation failed: missing 'system' field for System type"
93-
)
94-
raise HTTPException(status_code=400, detail="Invalid identity data")
95-
system = identity["system"]
96-
if "cn" not in system:
97-
logger.warning(
98-
"Identity validation failed: missing 'cn' in system data"
99-
)
100-
raise HTTPException(status_code=400, detail="Invalid identity data")
101-
if "account_number" not in identity:
102-
logger.warning(
103-
"Identity validation failed: "
104-
"missing 'account_number' for System type"
105-
)
106-
raise HTTPException(status_code=400, detail="Invalid identity data")
107-
self._validate_string_field("cn", system["cn"])
108-
self._validate_string_field("account_number", identity["account_number"])
73+
self._validate_system_fields(identity)
10974
else:
11075
logger.warning("Identity validation failed: unsupported identity type")
11176
raise HTTPException(status_code=400, detail="Invalid identity data")
@@ -115,6 +80,59 @@ def _validate_structure(self) -> None:
11580
if org_id is not None and org_id != "":
11681
self._validate_string_field("org_id", org_id)
11782

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

0 commit comments

Comments
 (0)