Skip to content

Commit fe3befd

Browse files
committed
chore(graph/education): deduplicate LDAP Search result processing
1 parent 9f7b425 commit fe3befd

2 files changed

Lines changed: 23 additions & 78 deletions

File tree

services/graph/pkg/identity/ldap_education_school.go

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -356,43 +356,11 @@ func (i *LDAP) GetEducationSchool(ctx context.Context, numberOrID string) (*libr
356356

357357
// GetEducationSchools implements the EducationBackend interface for the LDAP backend.
358358
func (i *LDAP) GetEducationSchools(ctx context.Context) ([]*libregraph.EducationSchool, error) {
359-
var filter string
360-
filter = fmt.Sprintf("(objectClass=%s)", i.educationConfig.schoolObjectClass)
361-
359+
filter := fmt.Sprintf("(objectClass=%s)", i.educationConfig.schoolObjectClass)
362360
if i.educationConfig.schoolFilter != "" {
363361
filter = fmt.Sprintf("(&%s%s)", i.educationConfig.schoolFilter, filter)
364362
}
365-
366-
searchRequest := ldap.NewSearchRequest(
367-
i.educationConfig.schoolBaseDN,
368-
i.educationConfig.schoolScope,
369-
ldap.NeverDerefAliases, 0, 0, false,
370-
filter,
371-
i.getEducationSchoolAttrTypes(),
372-
nil,
373-
)
374-
i.logger.Debug().Str("backend", "ldap").
375-
Str("base", searchRequest.BaseDN).
376-
Str("filter", searchRequest.Filter).
377-
Int("scope", searchRequest.Scope).
378-
Int("sizelimit", searchRequest.SizeLimit).
379-
Interface("attributes", searchRequest.Attributes).
380-
Msg("GetEducationSchools")
381-
res, err := i.conn.Search(searchRequest)
382-
if err != nil {
383-
return nil, errorcode.New(errorcode.ItemNotFound, err.Error())
384-
}
385-
386-
schools := make([]*libregraph.EducationSchool, 0, len(res.Entries))
387-
for _, e := range res.Entries {
388-
school := i.createSchoolModelFromLDAP(e)
389-
// Skip invalid LDAP entries
390-
if school == nil {
391-
continue
392-
}
393-
schools = append(schools, school)
394-
}
395-
return schools, nil
363+
return i.searchEducationSchools(ctx, filter)
396364
}
397365

398366
// FilterEducationSchoolsByAttribute implements the EducationBackend interface for the LDAP backend.
@@ -413,7 +381,11 @@ func (i *LDAP) FilterEducationSchoolsByAttribute(ctx context.Context, attr, valu
413381
ldap.EscapeFilter(ldapAttr),
414382
ldap.EscapeFilter(value),
415383
)
384+
return i.searchEducationSchools(ctx, filter)
385+
}
416386

387+
// searchEducationSchools builds and executes an LDAP search for education schools and converts the results to EducationSchool models.
388+
func (i *LDAP) searchEducationSchools(ctx context.Context, filter string) ([]*libregraph.EducationSchool, error) {
417389
searchRequest := ldap.NewSearchRequest(
418390
i.educationConfig.schoolBaseDN,
419391
i.educationConfig.schoolScope,
@@ -422,12 +394,14 @@ func (i *LDAP) FilterEducationSchoolsByAttribute(ctx context.Context, attr, valu
422394
i.getEducationSchoolAttrTypes(),
423395
nil,
424396
)
425-
logger.Debug().Str("base", searchRequest.BaseDN).
397+
logger := i.logger.SubloggerWithRequestID(ctx)
398+
logger.Debug().Str("backend", "ldap").
399+
Str("base", searchRequest.BaseDN).
426400
Str("filter", searchRequest.Filter).
427401
Int("scope", searchRequest.Scope).
428402
Int("sizelimit", searchRequest.SizeLimit).
429403
Interface("attributes", searchRequest.Attributes).
430-
Msg("LDAP Search Request")
404+
Msg("searchEducationSchools")
431405

432406
res, err := i.conn.Search(searchRequest)
433407
if err != nil {
@@ -437,6 +411,7 @@ func (i *LDAP) FilterEducationSchoolsByAttribute(ctx context.Context, attr, valu
437411
schools := make([]*libregraph.EducationSchool, 0, len(res.Entries))
438412
for _, e := range res.Entries {
439413
school := i.createSchoolModelFromLDAP(e)
414+
// Skip invalid LDAP entries
440415
if school == nil {
441416
continue
442417
}

services/graph/pkg/identity/ldap_education_user.go

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -208,48 +208,13 @@ func (i *LDAP) GetEducationUser(ctx context.Context, nameOrID string) (*libregra
208208

209209
// GetEducationUsers implements the EducationBackend interface for the LDAP backend.
210210
func (i *LDAP) GetEducationUsers(ctx context.Context) ([]*libregraph.EducationUser, error) {
211-
logger := i.logger.SubloggerWithRequestID(ctx)
212-
logger.Debug().Str("backend", "ldap").Msg("GetEducationUsers")
213-
214-
var userFilter string
215-
211+
var filter string
216212
if i.userFilter == "" {
217-
userFilter = fmt.Sprintf("(objectClass=%s)", i.educationConfig.userObjectClass)
213+
filter = fmt.Sprintf("(objectClass=%s)", i.educationConfig.userObjectClass)
218214
} else {
219-
userFilter = fmt.Sprintf("(&%s(objectClass=%s))", i.userFilter, i.educationConfig.userObjectClass)
220-
}
221-
222-
searchRequest := ldap.NewSearchRequest(
223-
i.userBaseDN,
224-
i.userScope,
225-
ldap.NeverDerefAliases, 0, 0, false,
226-
userFilter,
227-
i.getEducationUserAttrTypes(),
228-
nil,
229-
)
230-
logger.Debug().Str("backend", "ldap").
231-
Str("base", searchRequest.BaseDN).
232-
Str("filter", searchRequest.Filter).
233-
Int("scope", searchRequest.Scope).
234-
Int("sizelimit", searchRequest.SizeLimit).
235-
Interface("attributes", searchRequest.Attributes).
236-
Msg("GetEducationUsers")
237-
res, err := i.conn.Search(searchRequest)
238-
if err != nil {
239-
return nil, errorcode.New(errorcode.ItemNotFound, err.Error())
215+
filter = fmt.Sprintf("(&%s(objectClass=%s))", i.userFilter, i.educationConfig.userObjectClass)
240216
}
241-
242-
users := make([]*libregraph.EducationUser, 0, len(res.Entries))
243-
244-
for _, e := range res.Entries {
245-
u := i.createEducationUserModelFromLDAP(e)
246-
// Skip invalid LDAP users
247-
if u == nil {
248-
continue
249-
}
250-
users = append(users, u)
251-
}
252-
return users, nil
217+
return i.searchEducationUsers(ctx, filter)
253218
}
254219

255220
func (i *LDAP) FilterEducationUsersByAttribute(ctx context.Context, attr, value string) ([]*libregraph.EducationUser, error) {
@@ -272,7 +237,11 @@ func (i *LDAP) FilterEducationUsersByAttribute(ctx context.Context, attr, value
272237
return nil, errorcode.New(errorcode.InvalidRequest, fmt.Sprintf("filtering by attribute '%s' is not supported", attr))
273238
}
274239
filter := fmt.Sprintf("(&%s(objectClass=%s)(%s=%s))", i.userFilter, i.educationConfig.userObjectClass, ldap.EscapeFilter(ldapAttr), ldap.EscapeFilter(value))
240+
return i.searchEducationUsers(ctx, filter)
241+
}
275242

243+
// searchEducationUsers builds and executes an LDAP search for education users and converts the results to EducationUser models.
244+
func (i *LDAP) searchEducationUsers(ctx context.Context, filter string) ([]*libregraph.EducationUser, error) {
276245
searchRequest := ldap.NewSearchRequest(
277246
i.userBaseDN,
278247
i.userScope,
@@ -281,20 +250,21 @@ func (i *LDAP) FilterEducationUsersByAttribute(ctx context.Context, attr, value
281250
i.getEducationUserAttrTypes(),
282251
nil,
283252
)
284-
logger.Debug().Str("base", searchRequest.BaseDN).
253+
logger := i.logger.SubloggerWithRequestID(ctx)
254+
logger.Debug().Str("backend", "ldap").
255+
Str("base", searchRequest.BaseDN).
285256
Str("filter", searchRequest.Filter).
286257
Int("scope", searchRequest.Scope).
287258
Int("sizelimit", searchRequest.SizeLimit).
288259
Interface("attributes", searchRequest.Attributes).
289-
Msg("LDAP Search Request")
260+
Msg("searchEducationUsers")
290261

291262
res, err := i.conn.Search(searchRequest)
292263
if err != nil {
293264
return nil, errorcode.New(errorcode.ItemNotFound, err.Error())
294265
}
295266

296267
users := make([]*libregraph.EducationUser, 0, len(res.Entries))
297-
298268
for _, e := range res.Entries {
299269
u := i.createEducationUserModelFromLDAP(e)
300270
// Skip invalid LDAP users

0 commit comments

Comments
 (0)