in app/auth/LDAP.scala [97:129]
def getUserRoles (uid: String)(implicit cache:SyncCacheApi) : Option[List[String]] = {
if(connectionPool.isFailure) return None
val cacheKey = "userRoles." + uid
logger.debug(s"cacheKey: $cacheKey")
logger.debug(s"cache: $cache")
val userRoles : Option[List[String]] = cache.getOrElseUpdate[Option[List[String]]](cacheKey,Duration.create(ldapCacheDuration,"seconds")) {
logger.debug("LDAP: get roles for " + uid)
try {
val searchEntries : java.util.List[com.unboundid.ldap.sdk.SearchResultEntry] = connectionPool.get
.search(new SearchRequest(
userBaseDN,
SearchScope.SUB,
Filter.createEqualityFilter(uidAttribute,uid),roleMemberAttribute)
)
.getSearchEntries
val groups : List[String] = searchEntries.get(0)
.getAttributeValues("memberOf")
.toList
.map { _.split(",")(0).split("=")(1) }
logger.debug(s"Got roles $groups")
Some(groups)
} catch {
case ex:java.lang.IndexOutOfBoundsException=>
logger.error(s"User $uid has no roles attached?", ex)
None
case lde: LDAPException =>
logger.error("Could not look up ldap groups", lde)
None
}
}
logger.debug(s"Got user roles $userRoles")
userRoles
}