Skip to content

Commit 0cee847

Browse files
Merge pull request #234 from AditiChikkali/feature/whoami-test-page
refactored ldap related variables
2 parents 11bbbfc + 89b0c09 commit 0cee847

4 files changed

Lines changed: 20 additions & 14 deletions

File tree

src/nsls2api/api/models/person_model.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,22 @@ class AccountInfo(pydantic.BaseModel):
117117
badPwdCount: int = 0
118118
pwdLastSet: Optional[str] = None
119119
lastLogon: Optional[str] = None
120-
userAccountControlFlags: List[str] = []
120+
userAccountControlFlags: List[str] = pydantic.Field(default_factory=list)
121121
userPrincipalName: Optional[str] = None
122122
logonCount: int = 0
123123
sAMAccountName: Optional[str] = None
124124
sAMAccountType: Optional[str] = None
125-
lastLogoff: Optional[int] = None
126-
uSNCreated: int = 0
125+
lastLogoff: Optional[str] = None
126+
uSNCreated: Optional[int] = None
127+
uSNChanged: Optional[int] = None
127128

128129
class DirectoryInfo(pydantic.BaseModel):
129130
objectGUID: Optional[str] = None
130131
objectSid: Optional[str] = None
131132
primaryGroupID: Optional[str] = None
132133
distinguishedName: Optional[str] = None
134+
whenCreated: Optional[str] = None
135+
whenChanged: Optional[str] = None
133136

134137
class AttributesInfo(pydantic.BaseModel):
135138
sn: Optional[str] = None
@@ -140,7 +143,7 @@ class AttributesInfo(pydantic.BaseModel):
140143
codePage: Optional[str] = None
141144
countryCode: Optional[str] = None
142145
instanceType: Optional[str] = None
143-
objectClass: List[str] = []
146+
objectClass: List[str] = pydantic.Field(default_factory=list)
144147

145148
class LDAPUserResponse(pydantic.BaseModel):
146149
"""Complete LDAP user data from direct LDAP query"""
@@ -150,5 +153,5 @@ class LDAPUserResponse(pydantic.BaseModel):
150153
identity: Optional[IdentityInfo] = None
151154
account: Optional[AccountInfo] = None
152155
directory: Optional[DirectoryInfo] = None
153-
groups: List[str] = []
156+
groups: List[str] = pydantic.Field(default_factory=list)
154157
attributes: Optional[AttributesInfo] = None

src/nsls2api/api/v1/user_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ async def get_myself(request: Request, upn: str= None):
8383
ldap_info = await asyncio.to_thread(get_user_info,
8484
upn,
8585
settings.ldap_server,
86-
settings.base_dn,
87-
settings.bind_user,
86+
settings.ldap_base_dn,
87+
settings.ldap_bind_user,
8888
settings.ldap_bind_password
8989
)
9090
if not ldap_info:

src/nsls2api/infrastructure/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ class Settings(BaseSettings):
7373

7474
#Whoami LDAP settings
7575
ldap_server: str = Field(default="ldaps://ldapproxy.nsls2.bnl.gov", alias="LDAP_SERVER")
76-
base_dn: str = Field(default="dc=bnl,dc=gov", alias="BASE_DN")
77-
bind_user: str = Field(default="", alias="BIND_USER")
76+
ldap_base_dn: str = Field(default="dc=bnl,dc=gov", alias="LDAP_BASE_DN")
77+
ldap_bind_user: str = Field(default="", alias="LDAP_BIND_USER")
7878
ldap_bind_password: str = Field(default="", alias="LDAP_BIND_PASSWORD")
7979

8080

src/nsls2api/services/ldap_service.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ def to_hex(val):
1212
return binascii.hexlify(val).decode()
1313
return None
1414

15-
def get_user_info(upn, ldap_server, base_dn, bind_user, bind_password):
15+
def get_user_info(upn, ldap_server, ldap_base_dn, ldap_bind_user, bind_password):
1616
conn = None
1717
try:
1818
server = Server(ldap_server)
19-
conn = Connection(server, user=bind_user, password=bind_password, auto_bind=True)
19+
conn = Connection(server, user=ldap_bind_user, password=bind_password, auto_bind=True)
2020
search_filter = f"(&(objectclass=person)(userPrincipalName={upn}))"
21-
conn.search(base_dn, search_filter, attributes=['sAMAccountName'])
21+
conn.search(ldap_base_dn, search_filter, attributes=['sAMAccountName'])
2222

2323
if not conn.entries:
2424
logger.warning("No entries found for the given UPN.")
@@ -30,7 +30,7 @@ def get_user_info(upn, ldap_server, base_dn, bind_user, bind_password):
3030
return None
3131

3232
search_filter = f"(&(objectclass=posixaccount)(sAMAccountName={username}))"
33-
conn.search(base_dn, search_filter, attributes=['*'])
33+
conn.search(ldap_base_dn, search_filter, attributes=['*'])
3434

3535
if not conn.entries:
3636
logger.warning("no posix entries found for the given username.")
@@ -120,14 +120,17 @@ def clean_groups(groups_val):
120120
"logonCount": int(user_info.get("logonCount") or 0),
121121
"sAMAccountName": user_info.get("sAMAccountName"),
122122
"sAMAccountType": user_info.get("sAMAccountType"),
123-
"lastLogoff": user_info.get("lastLogoff"),
123+
"lastLogoff": filetime_to_str(user_info.get("lastLogoff")),
124124
"uSNCreated": int(user_info.get("uSNCreated") or 0),
125+
"uSNChanged": int(user_info.get("uSNChanged") or 0),
125126
},
126127
"directory": {
127128
"objectGUID": to_hex(user_info.get("objectGUID")),
128129
"objectSid": to_hex(user_info.get("objectSid")),
129130
"primaryGroupID": user_info.get("primaryGroupID"),
130131
"distinguishedName": user_info.get("distinguishedName"),
132+
"whenCreated": generalized_time_to_str(user_info.get("whenCreated")),
133+
"whenChanged": generalized_time_to_str(user_info.get("whenChanged")),
131134
},
132135
"groups": clean_groups(user_info.get("memberOf")),
133136
"attributes": {

0 commit comments

Comments
 (0)