TSK-548 Ldap Access must use uid field as user Id for persons

This commit is contained in:
BerndBreier 2018-06-04 16:37:40 +02:00 committed by Holger Hagen
parent 5ec61b406e
commit fd564b3053
8 changed files with 357 additions and 266 deletions

View File

@ -15,256 +15,264 @@ import pro.taskana.rest.resource.AccessIdResource;
public class LdapCacheTestImpl implements LdapCache { public class LdapCacheTestImpl implements LdapCache {
@Override @Override
public List<AccessIdResource> findMatchingAccessId(String searchFor) { public List<AccessIdResource> findMatchingAccessId(String searchFor, int maxNumerOfReturnedAccessIds) {
List<AccessIdResource> result = accessIds.stream() List<AccessIdResource> usersAndGroups = accessIds.stream()
.filter(t -> (t.getName().toLowerCase().contains(searchFor.toLowerCase()) .filter(t -> (t.getName().toLowerCase().contains(searchFor.toLowerCase())
|| t.getAccessId().toLowerCase().contains(searchFor.toLowerCase()))) || t.getAccessId().toLowerCase().contains(searchFor.toLowerCase())))
.collect(Collectors.toList()); .collect(Collectors.toList());
usersAndGroups.sort((AccessIdResource a, AccessIdResource b) -> {
return a.getAccessId().compareToIgnoreCase(b.getAccessId());
});
List<AccessIdResource> result = usersAndGroups.subList(0,
Math.min(usersAndGroups.size(), maxNumerOfReturnedAccessIds));
return result; return result;
} }
private static List<AccessIdResource> accessIds = new ArrayList<>(Arrays.asList( private static List<AccessIdResource> accessIds = new ArrayList<>(Arrays.asList(
new AccessIdResource("Rojas, Miguel", "cn=Miguel Rojas,ou=people,o=TaskanaTest"), new AccessIdResource("Martin, Rojas Miguel Angel", "user_1_1"),
new AccessIdResource("Lengl, Marcel", "cn=Marcel Lengl,ou=people,o=TaskanaTest"), new AccessIdResource("Lengl, Marcel", "user_1_2"),
new AccessIdResource("Zorgati, Mustapha", "cn=Mustapha Zorgati,ou=people,o=TaskanaTest"), new AccessIdResource("Zorgati, Mustapha", "user_2_1"),
new AccessIdResource("Breier, Bernd", "cn=Bernd Breier,ou=people,o=TaskanaTest"), new AccessIdResource("Breier, Bernd", "user_2_2"),
new AccessIdResource("Meyer, Dominik", "cn=Dominik Meyer,ou=people,o=TaskanaTest"), new AccessIdResource("Meyer, Dominik", "teamlead_1"),
new AccessIdResource("Hagen, Holger", "cn=Holger Hagen,ou=people,o=TaskanaTest"), new AccessIdResource("Hagen, Holger", "teamlead_2"),
new AccessIdResource("Behrendt, Maximilian", "cn=Maximilian Behrendt,ou=people,o=TaskanaTest"), new AccessIdResource("Behrendt, Maximilian", "max"),
new AccessIdResource("Ferrante, Elena", "cn=Elena Ferrante,ou=people,o=TaskanaTest"), new AccessIdResource("Ferrante, Elena", "elena"),
new AccessIdResource("Mueller, Simone", "cn=Simone Mueller,ou=people,o=TaskanaTest"), new AccessIdResource("Mueller, Simone", "simone"),
new AccessIdResource("Sirup, Aaron", "cn=Aaron Sirup,ou=people,o=TaskanaTest"), new AccessIdResource("Sirup, Aaron", "user001"),
new AccessIdResource("Kahn, Ada", "cn=Ada Kahn,ou=people,o=TaskanaTest"), new AccessIdResource("Kahn, Ada", "user002"),
new AccessIdResource("Lass, Ada", "cn=Ada Lass,ou=people,o=TaskanaTest"), new AccessIdResource("Lass, Ada", "user003"),
new AccessIdResource("Tion, Addi", "cn=Addi Tion,ou=people,o=TaskanaTest"), new AccessIdResource("Tion, Addi", "user004"),
new AccessIdResource("Lette, Adi", "cn=Adi Lette,ou=people,o=TaskanaTest"), new AccessIdResource("Lette, Adi", "user005"),
new AccessIdResource("Native, Alter", "cn=Alter Native,ou=people,o=TaskanaTest"), new AccessIdResource("Native, Alter", "user006"),
new AccessIdResource("Herum, Albert", "cn=Albert Herum,ou=people,o=TaskanaTest"), new AccessIdResource("Herum, Albert", "user007"),
new AccessIdResource("Bert, Ali", "cn=Ali Bert,ou=people,o=TaskanaTest"), new AccessIdResource("Bert, Ali", "user008"),
new AccessIdResource("Mente, Ali", "cn=Ali Mente,ou=people,o=TaskanaTest"), new AccessIdResource("Mente, Ali", "user009"),
new AccessIdResource("Mater, Alma", "cn=Alma Mater,ou=people,o=TaskanaTest"), new AccessIdResource("Mater, Alma", "user010"),
new AccessIdResource("Nach, Alma", "cn=Alma Nach,ou=people,o=TaskanaTest"), new AccessIdResource("Nach, Alma", "user011"),
new AccessIdResource("Gehzauch, Anders", "cn=Anders Gehzauch,ou=people,o=TaskanaTest"), new AccessIdResource("Gehzauch, Anders", "user012"),
new AccessIdResource("Theke, Andi", "cn=Andi Theke,ou=people,o=TaskanaTest"), new AccessIdResource("Theke, Andi", "user013"),
new AccessIdResource("Kreuz, Andreas", "cn=Andreas Kreuz,ou=people,o=TaskanaTest"), new AccessIdResource("Kreuz, Andreas", "user014"),
new AccessIdResource("Kette, Anka", "cn=Anka Kette,ou=people,o=TaskanaTest"), new AccessIdResource("Kette, Anka", "user015"),
new AccessIdResource("Tiefsee, Anka", "cn=Anka Tiefsee,ou=people,o=TaskanaTest"), new AccessIdResource("Tiefsee, Anka", "user016"),
new AccessIdResource("Fielmalz, Anke", "cn=Anke Fielmalz,ou=people,o=TaskanaTest"), new AccessIdResource("Fielmalz, Anke", "user017"),
new AccessIdResource("Fassen, Ann", "cn=Ann Fassen,ou=people,o=TaskanaTest"), new AccessIdResource("Fassen, Ann", "user018"),
new AccessIdResource("Probe, Ann", "cn=Ann Probe,ou=people,o=TaskanaTest"), new AccessIdResource("Probe, Ann", "user019"),
new AccessIdResource("Bolika, Anna", "cn=Anna Bolika,ou=people,o=TaskanaTest"), new AccessIdResource("Bolika, Anna", "user020"),
new AccessIdResource("Ecke, Anna", "cn=Anna Ecke,ou=people,o=TaskanaTest"), new AccessIdResource("Ecke, Anna", "user021"),
new AccessIdResource("Hosi, Anna", "cn=Anna Hosi,ou=people,o=TaskanaTest"), new AccessIdResource("Hosi, Anna", "user022"),
new AccessIdResource("Kronis-Tisch, Anna", "cn=Anna Kronis-Tisch,ou=people,o=TaskanaTest"), new AccessIdResource("Kronis-Tisch, Anna", "user023"),
new AccessIdResource("Logie, Anna", "cn=Anna Logie,ou=people,o=TaskanaTest"), new AccessIdResource("Logie, Anna", "user024"),
new AccessIdResource("Luehse, Anna", "cn=Anna Luehse,ou=people,o=TaskanaTest"), new AccessIdResource("Luehse, Anna", "user025"),
new AccessIdResource("Nass, Anna", "cn=Anna Nass,ou=people,o=TaskanaTest"), new AccessIdResource("Nass, Anna", "user026"),
new AccessIdResource("Thalb, Anna", "cn=Anna Thalb,ou=people,o=TaskanaTest"), new AccessIdResource("Thalb, Anna", "user027"),
new AccessIdResource("Tomie, Anna", "cn=Anna Tomie,ou=people,o=TaskanaTest"), new AccessIdResource("Tomie, Anna", "user028"),
new AccessIdResource("Donnich, Anne", "cn=Anne Donnich,ou=people,o=TaskanaTest"), new AccessIdResource("Donnich, Anne", "user029"),
new AccessIdResource("Kaffek, Anne", "cn=Anne Kaffek,ou=people,o=TaskanaTest"), new AccessIdResource("Kaffek, Anne", "user030"),
new AccessIdResource("Thek, Anne", "cn=Anne Thek,ou=people,o=TaskanaTest"), new AccessIdResource("Thek, Anne", "user031"),
new AccessIdResource("Matoer, Anni", "cn=Anni Matoer,ou=people,o=TaskanaTest"), new AccessIdResource("Matoer, Anni", "user032"),
new AccessIdResource("Ragentor, Ansgar", "cn=Ansgar Ragentor,ou=people,o=TaskanaTest"), new AccessIdResource("Ragentor, Ansgar", "user033"),
new AccessIdResource("Stoteles, Ari", "cn=Ari Stoteles,ou=people,o=TaskanaTest"), new AccessIdResource("Stoteles, Ari", "user034"),
new AccessIdResource("Thmetik, Ari", "cn=Ari Thmetik,ou=people,o=TaskanaTest"), new AccessIdResource("Thmetik, Ari", "user035"),
new AccessIdResource("Nuehm, Arno", "cn=Arno Nuehm,ou=people,o=TaskanaTest"), new AccessIdResource("Nuehm, Arno", "user036"),
new AccessIdResource("Schocke, Artie", "cn=Artie Schocke,ou=people,o=TaskanaTest"), new AccessIdResource("Schocke, Artie", "user037"),
new AccessIdResource("Stoppel, Bart", "cn=Bart Stoppel,ou=people,o=TaskanaTest"), new AccessIdResource("Stoppel, Bart", "user038"),
new AccessIdResource("Beitung, Bea", "cn=Bea Beitung,ou=people,o=TaskanaTest"), new AccessIdResource("Beitung, Bea", "user039"),
new AccessIdResource("Ildich, Bea", "cn=Bea Ildich,ou=people,o=TaskanaTest"), new AccessIdResource("Ildich, Bea", "user040"),
new AccessIdResource("Vista, Bella", "cn=Bella Vista,ou=people,o=TaskanaTest"), new AccessIdResource("Vista, Bella", "user041"),
new AccessIdResource("Utzer, Ben", "cn=Ben Utzer,ou=people,o=TaskanaTest"), new AccessIdResource("Utzer, Ben", "user042"),
new AccessIdResource("Zien, Ben", "cn=Ben Zien,ou=people,o=TaskanaTest"), new AccessIdResource("Zien, Ben", "user043"),
new AccessIdResource("Stein, Bernd", "cn=Bernd Stein,ou=people,o=TaskanaTest"), new AccessIdResource("Stein, Bernd", "user044"),
new AccessIdResource("Deramen, Bill", "cn=Bill Deramen,ou=people,o=TaskanaTest"), new AccessIdResource("Deramen, Bill", "user045"),
new AccessIdResource("Honig, Bine", "cn=Bine Honig,ou=people,o=TaskanaTest"), new AccessIdResource("Honig, Bine", "user046"),
new AccessIdResource("Densatz, Bo", "cn=Bo Densatz,ou=people,o=TaskanaTest"), new AccessIdResource("Densatz, Bo", "user047"),
new AccessIdResource("Densee, Bo", "cn=Bo Densee,ou=people,o=TaskanaTest"), new AccessIdResource("Densee, Bo", "user048"),
new AccessIdResource("Lerwagen, Bo", "cn=Bo Lerwagen,ou=people,o=TaskanaTest"), new AccessIdResource("Lerwagen, Bo", "user049"),
new AccessIdResource("Tail, Bob", "cn=Bob Tail,ou=people,o=TaskanaTest"), new AccessIdResource("Tail, Bob", "user050"),
new AccessIdResource("Ketta, Bruce", "cn=Bruce Ketta,ou=people,o=TaskanaTest"), new AccessIdResource("Ketta, Bruce", "user051"),
new AccessIdResource("Terrie, Bud", "cn=Bud Terrie,ou=people,o=TaskanaTest"), new AccessIdResource("Terrie, Bud", "user052"),
new AccessIdResource("Biener-Haken, Cara", "cn=iener- Cara Haken,ou=people,o=TaskanaTest"), new AccessIdResource("Biener-Haken, Cara", "user053"),
new AccessIdResource("Ass, Caro", "cn=Caro Ass,ou=people,o=TaskanaTest"), new AccessIdResource("Ass, Caro", "user054"),
new AccessIdResource("Kaffee, Caro", "cn=Caro Kaffee,ou=people,o=TaskanaTest"), new AccessIdResource("Kaffee, Caro", "user055"),
new AccessIdResource("Linger, Caro", "cn=Caro Linger,ou=people,o=TaskanaTest"), new AccessIdResource("Linger, Caro", "user056"),
new AccessIdResource("tenSaft, Caro", "cn=Caro tenSaft,ou=people,o=TaskanaTest"), new AccessIdResource("tenSaft, Caro", "user057"),
new AccessIdResource("Antheme, Chris", "cn=Chris Antheme,ou=people,o=TaskanaTest"), new AccessIdResource("Antheme, Chris", "user058"),
new AccessIdResource("Baum, Chris", "cn=Chris Baum,ou=people,o=TaskanaTest"), new AccessIdResource("Baum, Chris", "user059"),
new AccessIdResource("Tall, Chris", "cn=Chris Tall,ou=people,o=TaskanaTest"), new AccessIdResource("Tall, Chris", "user060"),
new AccessIdResource("Reiniger, Claas", "cn=Claas Reiniger,ou=people,o=TaskanaTest"), new AccessIdResource("Reiniger, Claas", "user061"),
new AccessIdResource("Grube, Claire", "cn=Claire Grube,ou=people,o=TaskanaTest"), new AccessIdResource("Grube, Claire", "user062"),
new AccessIdResource("Fall, Clara", "cn=Clara Fall,ou=people,o=TaskanaTest"), new AccessIdResource("Fall, Clara", "user063"),
new AccessIdResource("Korn, Clara", "cn=Clara Korn,ou=people,o=TaskanaTest"), new AccessIdResource("Korn, Clara", "user064"),
new AccessIdResource("Lenriff, Cora", "cn=Cora Lenriff,ou=people,o=TaskanaTest"), new AccessIdResource("Lenriff, Cora", "user065"),
new AccessIdResource("Schiert, Cora", "cn=Cora Schiert,ou=people,o=TaskanaTest"), new AccessIdResource("Schiert, Cora", "user066"),
new AccessIdResource("Hose, Cord", "cn=Cord Hose,ou=people,o=TaskanaTest"), new AccessIdResource("Hose, Cord", "user067"),
new AccessIdResource("Onbleu, Cord", "cn=Cord Onbleu,ou=people,o=TaskanaTest"), new AccessIdResource("Onbleu, Cord", "user068"),
new AccessIdResource("Umkleide, Damon", "cn=Damon Umkleide,ou=people,o=TaskanaTest"), new AccessIdResource("Umkleide, Damon", "user069"),
new AccessIdResource("Affier, Dean", "cn=Dean Affier,ou=people,o=TaskanaTest"), new AccessIdResource("Affier, Dean", "user070"),
new AccessIdResource("Orm, Dean", "cn=Dean Orm,ou=people,o=TaskanaTest"), new AccessIdResource("Orm, Dean", "user071"),
new AccessIdResource("Platz, Dennis", "cn=Dennis Platz,ou=people,o=TaskanaTest"), new AccessIdResource("Platz, Dennis", "user072"),
new AccessIdResource("Milch, Dick", "cn=Dick Milch,ou=people,o=TaskanaTest"), new AccessIdResource("Milch, Dick", "user073"),
new AccessIdResource("Mow, Dina", "cn=Dina Mow,ou=people,o=TaskanaTest"), new AccessIdResource("Mow, Dina", "user074"),
new AccessIdResource("Keil, Donna", "cn=Donna Keil,ou=people,o=TaskanaTest"), new AccessIdResource("Keil, Donna", "user075"),
new AccessIdResource("Littchen, Donna", "cn=Donna Littchen,ou=people,o=TaskanaTest"), new AccessIdResource("Littchen, Donna", "user076"),
new AccessIdResource("Wetter, Donna", "cn=Donna Wetter,ou=people,o=TaskanaTest"), new AccessIdResource("Wetter, Donna", "user077"),
new AccessIdResource("Was, Ed", "cn=Ed Was,ou=people,o=TaskanaTest"), new AccessIdResource("Was, Ed", "user078"),
new AccessIdResource("Khar, Ede", "cn=Ede Khar,ou=people,o=TaskanaTest"), new AccessIdResource("Khar, Ede", "user079"),
new AccessIdResource("Nut, Ella", "cn=Ella Nut,ou=people,o=TaskanaTest"), new AccessIdResource("Nut, Ella", "user080"),
new AccessIdResource("Stisch, Ella", "cn=Ella Stisch,ou=people,o=TaskanaTest"), new AccessIdResource("Stisch, Ella", "user081"),
new AccessIdResource("Diel, Emma", "cn=Emma Diel,ou=people,o=TaskanaTest"), new AccessIdResource("Diel, Emma", "user082"),
new AccessIdResource("Herdamit, Emma", "cn=Emma Herdamit,ou=people,o=TaskanaTest"), new AccessIdResource("Herdamit, Emma", "user083"),
new AccessIdResource("Mitter-Uhe, Emma", "cn=Emma Mitter-Uhe,ou=people,o=TaskanaTest"), new AccessIdResource("Mitter-Uhe, Emma", "user084"),
new AccessIdResource("Tatt, Erich", "cn=Erich Tatt,ou=people,o=TaskanaTest"), new AccessIdResource("Tatt, Erich", "user085"),
new AccessIdResource("Drigend, Ernie", "cn=Ernie Drigend,ou=people,o=TaskanaTest"), new AccessIdResource("Drigend, Ernie", "user086"),
new AccessIdResource("Poly, Esther", "cn=Esther Poly,ou=people,o=TaskanaTest"), new AccessIdResource("Poly, Esther", "user087"),
new AccessIdResource("Trautz, Eugen", "cn=Eugen Trautz,ou=people,o=TaskanaTest"), new AccessIdResource("Trautz, Eugen", "user088"),
new AccessIdResource("Quiert, Eva", "cn=Eva Quiert,ou=people,o=TaskanaTest"), new AccessIdResource("Quiert, Eva", "user089"),
new AccessIdResource("Inurlaub, Fatma", "cn=Fatma Inurlaub,ou=people,o=TaskanaTest"), new AccessIdResource("Inurlaub, Fatma", "user090"),
new AccessIdResource("Land, Finn", "cn=Finn Land,ou=people,o=TaskanaTest"), new AccessIdResource("Land, Finn", "user091"),
new AccessIdResource("Sternis, Finn", "cn=Finn Sternis,ou=people,o=TaskanaTest"), new AccessIdResource("Sternis, Finn", "user092"),
new AccessIdResource("Furt, Frank", "cn=Frank Furt,ou=people,o=TaskanaTest"), new AccessIdResource("Furt, Frank", "user093"),
new AccessIdResource("Reich, Frank", "cn=Frank Reich,ou=people,o=TaskanaTest"), new AccessIdResource("Reich, Frank", "user094"),
new AccessIdResource("Iskaner, Franz", "cn=Franz Iskaner,ou=people,o=TaskanaTest"), new AccessIdResource("Iskaner, Franz", "user095"),
new AccessIdResource("Nerr, Franziska", "cn=Franziska Nerr,ou=people,o=TaskanaTest"), new AccessIdResource("Nerr, Franziska", "user096"),
new AccessIdResource("Zafen, Friedrich", "cn=Friedrich Zafen,ou=people,o=TaskanaTest"), new AccessIdResource("Zafen, Friedrich", "user097"),
new AccessIdResource("Pomm, Fritz", "cn=Fritz Pomm,ou=people,o=TaskanaTest"), new AccessIdResource("Pomm, Fritz", "user098"),
new AccessIdResource("deWegs, Gera", "cn=Gera deWegs,ou=people,o=TaskanaTest"), new AccessIdResource("deWegs, Gera", "user099"),
new AccessIdResource("Staebe, Gitta", "cn=Gitta Staebe,ou=people,o=TaskanaTest"), new AccessIdResource("Staebe, Gitta", "user100"),
new AccessIdResource("Zend, Glenn", "cn=Glenn Zend,ou=people,o=TaskanaTest"), new AccessIdResource("Zend, Glenn", "user101"),
new AccessIdResource("Fisch, Grete", "cn=Grete Fisch,ou=people,o=TaskanaTest"), new AccessIdResource("Fisch, Grete", "user102"),
new AccessIdResource("Zucker, Gus", "cn=Gus Zucker,ou=people,o=TaskanaTest"), new AccessIdResource("Zucker, Gus", "user103"),
new AccessIdResource("Muhn, Hanni", "cn=Hanni Muhn,ou=people,o=TaskanaTest"), new AccessIdResource("Muhn, Hanni", "user104"),
new AccessIdResource("Fermesse, Hanno", "cn=Hanno Fermesse,ou=people,o=TaskanaTest"), new AccessIdResource("Fermesse, Hanno", "user105"),
new AccessIdResource("Aplast, Hans", "cn=Hans Aplast,ou=people,o=TaskanaTest"), new AccessIdResource("Aplast, Hans", "user106"),
new AccessIdResource("Eart, Hans", "cn=Hans Eart,ou=people,o=TaskanaTest"), new AccessIdResource("Eart, Hans", "user107"),
new AccessIdResource("Back, Hardy", "cn=Hardy Back,ou=people,o=TaskanaTest"), new AccessIdResource("Back, Hardy", "user108"),
new AccessIdResource("Beau, Harry", "cn=Harry Beau,ou=people,o=TaskanaTest"), new AccessIdResource("Beau, Harry", "user109"),
new AccessIdResource("Kraut, Heide", "cn=Heide Kraut,ou=people,o=TaskanaTest"), new AccessIdResource("Kraut, Heide", "user110"),
new AccessIdResource("Witzka, Heide", "cn=Heide Witzka,ou=people,o=TaskanaTest"), new AccessIdResource("Witzka, Heide", "user111"),
new AccessIdResource("Buchen, Hein", "cn=Hein Buchen,ou=people,o=TaskanaTest"), new AccessIdResource("Buchen, Hein", "user112"),
new AccessIdResource("Lichkeit, Hein", "cn=Hein Lichkeit,ou=people,o=TaskanaTest"), new AccessIdResource("Lichkeit, Hein", "user113"),
new AccessIdResource("Suchung, Hein", "cn=Hein Suchung,ou=people,o=TaskanaTest"), new AccessIdResource("Suchung, Hein", "user114"),
new AccessIdResource("Ellmann, Heinz", "cn=Heinz Ellmann,ou=people,o=TaskanaTest"), new AccessIdResource("Ellmann, Heinz", "user115"),
new AccessIdResource("Ketchup, Heinz", "cn=Heinz Ketchup,ou=people,o=TaskanaTest"), new AccessIdResource("Ketchup, Heinz", "user116"),
new AccessIdResource("Zeim, Hilde", "cn=Hilde Zeim,ou=people,o=TaskanaTest"), new AccessIdResource("Zeim, Hilde", "user117"),
new AccessIdResource("Bilien, Immo", "cn=Immo Bilien,ou=people,o=TaskanaTest"), new AccessIdResource("Bilien, Immo", "user118"),
new AccessIdResource("Her, Inge", "cn=Inge Her,ou=people,o=TaskanaTest"), new AccessIdResource("Her, Inge", "user119"),
new AccessIdResource("Wahrsam, Inge", "cn=Inge Wahrsam,ou=people,o=TaskanaTest"), new AccessIdResource("Wahrsam, Inge", "user120"),
new AccessIdResource("Flamm, Ingo", "cn=Ingo Flamm,ou=people,o=TaskanaTest"), new AccessIdResource("Flamm, Ingo", "user121"),
new AccessIdResource("Enzien, Ingrid", "cn=Ingrid Enzien,ou=people,o=TaskanaTest"), new AccessIdResource("Enzien, Ingrid", "user122"),
new AccessIdResource("Rohsch, Inken", "cn=Inken Rohsch,ou=people,o=TaskanaTest"), new AccessIdResource("Rohsch, Inken", "user123"),
new AccessIdResource("Ihr, Insa", "cn=Insa Ihr,ou=people,o=TaskanaTest"), new AccessIdResource("Ihr, Insa", "user124"),
new AccessIdResource("Nerda, Iska", "cn=Iska Nerda,ou=people,o=TaskanaTest"), new AccessIdResource("Nerda, Iska", "user125"),
new AccessIdResource("Eitz, Jens", "cn=Jens Eitz,ou=people,o=TaskanaTest"), new AccessIdResource("Eitz, Jens", "user126"),
new AccessIdResource("Nastik, Jim", "cn=Jim Nastik,ou=people,o=TaskanaTest"), new AccessIdResource("Nastik, Jim", "user127"),
new AccessIdResource("Gurt, Jo", "cn=Jo Gurt,ou=people,o=TaskanaTest"), new AccessIdResource("Gurt, Jo", "user128"),
new AccessIdResource("Kurrth, Jo", "cn=Jo Kurrth,ou=people,o=TaskanaTest"), new AccessIdResource("Kurrth, Jo", "user129"),
new AccessIdResource("Kolade, Joe", "cn=Joe Kolade,ou=people,o=TaskanaTest"), new AccessIdResource("Kolade, Joe", "user130"),
new AccessIdResource("Iter, Johann", "cn=Johann Iter,ou=people,o=TaskanaTest"), new AccessIdResource("Iter, Johann", "user131"),
new AccessIdResource("Tick, Joyce", "cn=Joyce Tick,ou=people,o=TaskanaTest"), new AccessIdResource("Tick, Joyce", "user132"),
new AccessIdResource("Case, Justin", "cn=Justin Case,ou=people,o=TaskanaTest"), new AccessIdResource("Case, Justin", "user133"),
new AccessIdResource("Time, Justin", "cn=Justin Time,ou=people,o=TaskanaTest"), new AccessIdResource("Time, Justin", "user134"),
new AccessIdResource("Komp, Jutta", "cn=Jutta Komp,ou=people,o=TaskanaTest"), new AccessIdResource("Komp, Jutta", "user135"),
new AccessIdResource("Mauer, Kai", "cn=Kai Mauer,ou=people,o=TaskanaTest"), new AccessIdResource("Mauer, Kai", "user136"),
new AccessIdResource("Pirinja, Kai", "cn=Kai Pirinja,ou=people,o=TaskanaTest"), new AccessIdResource("Pirinja, Kai", "user137"),
new AccessIdResource("Serpfalz, Kai", "cn=Kai Serpfalz,ou=people,o=TaskanaTest"), new AccessIdResource("Serpfalz, Kai", "user138"),
new AccessIdResource("Auer, Karl", "cn=Karl Auer,ou=people,o=TaskanaTest"), new AccessIdResource("Auer, Karl", "user139"),
new AccessIdResource("Ielauge, Karl", "cn=Karl Ielauge,ou=people,o=TaskanaTest"), new AccessIdResource("Ielauge, Karl", "user140"),
new AccessIdResource("Ifornjen, Karl", "cn=Karl Ifornjen,ou=people,o=TaskanaTest"), new AccessIdResource("Ifornjen, Karl", "user141"),
new AccessIdResource("Radi, Karl", "cn=Karl Radi,ou=people,o=TaskanaTest"), new AccessIdResource("Radi, Karl", "user142"),
new AccessIdResource("Verti, Karl", "cn=Karl Verti,ou=people,o=TaskanaTest"), new AccessIdResource("Verti, Karl", "user143"),
new AccessIdResource("Sery, Karo", "cn=Karo Sery,ou=people,o=TaskanaTest"), new AccessIdResource("Sery, Karo", "user144"),
new AccessIdResource("Lisator, Katha", "cn=Katha Lisator,ou=people,o=TaskanaTest"), new AccessIdResource("Lisator, Katha", "user145"),
new AccessIdResource("Flo, Kati", "cn=Kati Flo,ou=people,o=TaskanaTest"), new AccessIdResource("Flo, Kati", "user146"),
new AccessIdResource("Schenn, Knut", "cn=Knut Schenn,ou=people,o=TaskanaTest"), new AccessIdResource("Schenn, Knut", "user147"),
new AccessIdResource("Achse, Kurt", "cn=Kurt Achse,ou=people,o=TaskanaTest"), new AccessIdResource("Achse, Kurt", "user148"),
new AccessIdResource("Zepause, Kurt", "cn=Kurt Zepause,ou=people,o=TaskanaTest"), new AccessIdResource("Zepause, Kurt", "user149"),
new AccessIdResource("Zerr, Kurt", "cn=Kurt Zerr,ou=people,o=TaskanaTest"), new AccessIdResource("Zerr, Kurt", "user150"),
new AccessIdResource("Reden, Lasse", "cn=Lasse Reden,ou=people,o=TaskanaTest"), new AccessIdResource("Reden, Lasse", "user151"),
new AccessIdResource("Metten, Lee", "cn=Lee Metten,ou=people,o=TaskanaTest"), new AccessIdResource("Metten, Lee", "user152"),
new AccessIdResource("Arm, Lene", "cn=Lene Arm,ou=people,o=TaskanaTest"), new AccessIdResource("Arm, Lene", "user153"),
new AccessIdResource("Thur, Linnea", "cn=Linnea Thur,ou=people,o=TaskanaTest"), new AccessIdResource("Thur, Linnea", "user154"),
new AccessIdResource("Bonn, Lisa", "cn=Lisa Bonn,ou=people,o=TaskanaTest"), new AccessIdResource("Bonn, Lisa", "user155"),
new AccessIdResource("Sembourg, Luc", "cn=Luc Sembourg,ou=people,o=TaskanaTest"), new AccessIdResource("Sembourg, Luc", "user156"),
new AccessIdResource("Rung, Lucky", "cn=Lucky Rung,ou=people,o=TaskanaTest"), new AccessIdResource("Rung, Lucky", "user157"),
new AccessIdResource("Zafen, Ludwig", "cn=Ludwig Zafen,ou=people,o=TaskanaTest"), new AccessIdResource("Zafen, Ludwig", "user158"),
new AccessIdResource("Hauden, Lukas", "cn=Lukas Hauden,ou=people,o=TaskanaTest"), new AccessIdResource("Hauden, Lukas", "user159"),
new AccessIdResource("Hose, Lutz", "cn=Lutz Hose,ou=people,o=TaskanaTest"), new AccessIdResource("Hose, Lutz", "user160"),
new AccessIdResource("Tablette, Lutz", "cn=Lutz Tablette,ou=people,o=TaskanaTest"), new AccessIdResource("Tablette, Lutz", "user161"),
new AccessIdResource("Fehr, Luzie", "cn=Luzie Fehr,ou=people,o=TaskanaTest"), new AccessIdResource("Fehr, Luzie", "user162"),
new AccessIdResource("Nalyse, Magda", "cn=Magda Nalyse,ou=people,o=TaskanaTest"), new AccessIdResource("Nalyse, Magda", "user163"),
new AccessIdResource("Ehfer, Maik", "cn=Maik Ehfer,ou=people,o=TaskanaTest"), new AccessIdResource("Ehfer, Maik", "user164"),
new AccessIdResource("Sehr, Malte", "cn=Malte Sehr,ou=people,o=TaskanaTest"), new AccessIdResource("Sehr, Malte", "user165"),
new AccessIdResource("Thon, Mara", "cn=Mara Thon,ou=people,o=TaskanaTest"), new AccessIdResource("Thon, Mara", "user166"),
new AccessIdResource("Quark, Marga", "cn=Marga Quark,ou=people,o=TaskanaTest"), new AccessIdResource("Quark, Marga", "user167"),
new AccessIdResource("Nade, Marie", "cn=Marie Nade,ou=people,o=TaskanaTest"), new AccessIdResource("Nade, Marie", "user168"),
new AccessIdResource("Niert, Marie", "cn=Marie Niert,ou=people,o=TaskanaTest"), new AccessIdResource("Niert, Marie", "user169"),
new AccessIdResource("Neese, Mario", "cn=Mario Neese,ou=people,o=TaskanaTest"), new AccessIdResource("Neese, Mario", "user170"),
new AccessIdResource("Nette, Marion", "cn=Marion Nette,ou=people,o=TaskanaTest"), new AccessIdResource("Nette, Marion", "user171"),
new AccessIdResource("Nesium, Mark", "cn=Mark Nesium,ou=people,o=TaskanaTest"), new AccessIdResource("Nesium, Mark", "user172"),
new AccessIdResource("Thalle, Mark", "cn=Mark Thalle,ou=people,o=TaskanaTest"), new AccessIdResource("Thalle, Mark", "user173"),
new AccessIdResource("Diven, Marle", "cn=Marle Diven,ou=people,o=TaskanaTest"), new AccessIdResource("Diven, Marle", "user174"),
new AccessIdResource("Fitz, Marle", "cn=Marle Fitz,ou=people,o=TaskanaTest"), new AccessIdResource("Fitz, Marle", "user175"),
new AccessIdResource("Pfahl, Marta", "cn=Marta Pfahl,ou=people,o=TaskanaTest"), new AccessIdResource("Pfahl, Marta", "user176"),
new AccessIdResource("Zorn, Martin", "cn=Martin Zorn,ou=people,o=TaskanaTest"), new AccessIdResource("Zorn, Martin", "user177"),
new AccessIdResource("Krissmes, Mary", "cn=Mary Krissmes,ou=people,o=TaskanaTest"), new AccessIdResource("Krissmes, Mary", "user178"),
new AccessIdResource("Jess, Matt", "cn=Matt Jess,ou=people,o=TaskanaTest"), new AccessIdResource("Jess, Matt", "user179"),
new AccessIdResource("Strammer, Max", "cn=Max Strammer,ou=people,o=TaskanaTest"), new AccessIdResource("Strammer, Max", "user180"),
new AccessIdResource("Mumm, Maxi", "cn=Maxi Mumm,ou=people,o=TaskanaTest"), new AccessIdResource("Mumm, Maxi", "user181"),
new AccessIdResource("Morphose, Meta", "cn=Meta Morphose,ou=people,o=TaskanaTest"), new AccessIdResource("Morphose, Meta", "user182"),
new AccessIdResource("Uh, Mia", "cn=Mia Uh,ou=people,o=TaskanaTest"), new AccessIdResource("Uh, Mia", "user183"),
new AccessIdResource("Rofon, Mike", "cn=Mike Rofon,ou=people,o=TaskanaTest"), new AccessIdResource("Rofon, Mike", "user184"),
new AccessIdResource("Rosoft, Mike", "cn=Mike Rosoft,ou=people,o=TaskanaTest"), new AccessIdResource("Rosoft, Mike", "user185"),
new AccessIdResource("Liter, Milli", "cn=Milli Liter,ou=people,o=TaskanaTest"), new AccessIdResource("Liter, Milli", "user186"),
new AccessIdResource("Thär, Milli", "cn=hä Milli r,ou=people,o=TaskanaTest"), new AccessIdResource("Thär, Milli", "user187"),
new AccessIdResource("Welle, Mirko", "cn=Mirko Welle,ou=people,o=TaskanaTest"), new AccessIdResource("Welle, Mirko", "user188"),
new AccessIdResource("Thorat, Mo", "cn=Mo Thorat,ou=people,o=TaskanaTest"), new AccessIdResource("Thorat, Mo", "user189"),
new AccessIdResource("Thor, Moni", "cn=Moni Thor,ou=people,o=TaskanaTest"), new AccessIdResource("Thor, Moni", "user190"),
new AccessIdResource("Kinolta, Monika", "cn=Monika Kinolta,ou=people,o=TaskanaTest"), new AccessIdResource("Kinolta, Monika", "user191"),
new AccessIdResource("Mundhaar, Monika", "cn=Monika Mundhaar,ou=people,o=TaskanaTest"), new AccessIdResource("Mundhaar, Monika", "user192"),
new AccessIdResource("Munter, Monika", "cn=Monika Munter,ou=people,o=TaskanaTest"), new AccessIdResource("Munter, Monika", "user193"),
new AccessIdResource("Zwerg, Nat", "cn=Nat Zwerg,ou=people,o=TaskanaTest"), new AccessIdResource("Zwerg, Nat", "user194"),
new AccessIdResource("Elmine, Nick", "cn=Nick Elmine,ou=people,o=TaskanaTest"), new AccessIdResource("Elmine, Nick", "user195"),
new AccessIdResource("Thien, Niko", "cn=Niko Thien,ou=people,o=TaskanaTest"), new AccessIdResource("Thien, Niko", "user196"),
new AccessIdResource("Pferd, Nils", "cn=Nils Pferd,ou=people,o=TaskanaTest"), new AccessIdResource("Pferd, Nils", "user197"),
new AccessIdResource("Lerweise, Norma", "cn=Norma Lerweise,ou=people,o=TaskanaTest"), new AccessIdResource("Lerweise, Norma", "user198"),
new AccessIdResource("Motor, Otto", "cn=Otto Motor,ou=people,o=TaskanaTest"), new AccessIdResource("Motor, Otto", "user199"),
new AccessIdResource("Totol, Otto", "cn=Otto Totol,ou=people,o=TaskanaTest"), new AccessIdResource("Totol, Otto", "user200"),
new AccessIdResource("Nerr, Paula", "cn=Paula Nerr,ou=people,o=TaskanaTest"), new AccessIdResource("Nerr, Paula", "user201"),
new AccessIdResource("Imeter, Peer", "cn=Peer Imeter,ou=people,o=TaskanaTest"), new AccessIdResource("Imeter, Peer", "user202"),
new AccessIdResource("Serkatze, Peer", "cn=Peer Serkatze,ou=people,o=TaskanaTest"), new AccessIdResource("Serkatze, Peer", "user203"),
new AccessIdResource("Gogisch, Peter", "cn=Peter Gogisch,ou=people,o=TaskanaTest"), new AccessIdResource("Gogisch, Peter", "user204"),
new AccessIdResource("Silje, Peter", "cn=Peter Silje,ou=people,o=TaskanaTest"), new AccessIdResource("Silje, Peter", "user205"),
new AccessIdResource("Harmonie, Phil", "cn=Phil Harmonie,ou=people,o=TaskanaTest"), new AccessIdResource("Harmonie, Phil", "user206"),
new AccessIdResource("Ihnen, Philip", "cn=Philip Ihnen,ou=people,o=TaskanaTest"), new AccessIdResource("Ihnen, Philip", "user207"),
new AccessIdResource("Uto, Pia", "cn=Pia Uto,ou=people,o=TaskanaTest"), new AccessIdResource("Uto, Pia", "user208"),
new AccessIdResource("Kothek, Pina", "cn=Pina Kothek,ou=people,o=TaskanaTest"), new AccessIdResource("Kothek, Pina", "user209"),
new AccessIdResource("Zar, Pit", "cn=Pit Zar,ou=people,o=TaskanaTest"), new AccessIdResource("Zar, Pit", "user210"),
new AccessIdResource("Zeih, Polly", "cn=Polly Zeih,ou=people,o=TaskanaTest"), new AccessIdResource("Zeih, Polly", "user211"),
new AccessIdResource("Tswan, Puh", "cn=Puh Tswan,ou=people,o=TaskanaTest"), new AccessIdResource("Tswan, Puh", "user212"),
new AccessIdResource("Zufall, Rainer", "cn=Rainer Zufall,ou=people,o=TaskanaTest"), new AccessIdResource("Zufall, Rainer", "user213"),
new AccessIdResource("Lien, Rita", "cn=Rita Lien,ou=people,o=TaskanaTest"), new AccessIdResource("Lien, Rita", "user214"),
new AccessIdResource("Held, Roman", "cn=Roman Held,ou=people,o=TaskanaTest"), new AccessIdResource("Held, Roman", "user215"),
new AccessIdResource("Haar, Ross", "cn=Ross Haar,ou=people,o=TaskanaTest"), new AccessIdResource("Haar, Ross", "user216"),
new AccessIdResource("Dick, Roy", "cn=Roy Dick,ou=people,o=TaskanaTest"), new AccessIdResource("Dick, Roy", "user217"),
new AccessIdResource("Enplaner, Ruth", "cn=Ruth Enplaner,ou=people,o=TaskanaTest"), new AccessIdResource("Enplaner, Ruth", "user218"),
new AccessIdResource("Kommen, Ryan", "cn=Ryan Kommen,ou=people,o=TaskanaTest"), new AccessIdResource("Kommen, Ryan", "user219"),
new AccessIdResource("Philo, Sophie", "cn=Sophie Philo,ou=people,o=TaskanaTest"), new AccessIdResource("Philo, Sophie", "user220"),
new AccessIdResource("Matisier, Stig", "cn=Stig Matisier,ou=people,o=TaskanaTest"), new AccessIdResource("Matisier, Stig", "user221"),
new AccessIdResource("Loniki, Tessa", "cn=Tessa Loniki,ou=people,o=TaskanaTest"), new AccessIdResource("Loniki, Tessa", "user222"),
new AccessIdResource("Tralisch, Thea", "cn=Thea Tralisch,ou=people,o=TaskanaTest"), new AccessIdResource("Tralisch, Thea", "user223"),
new AccessIdResource("Logie, Theo", "cn=Theo Logie,ou=people,o=TaskanaTest"), new AccessIdResource("Logie, Theo", "user224"),
new AccessIdResource("Ister, Thorn", "cn=Thorn Ister,ou=people,o=TaskanaTest"), new AccessIdResource("Ister, Thorn", "user225"),
new AccessIdResource("Buktu, Tim", "cn=Tim Buktu,ou=people,o=TaskanaTest"), new AccessIdResource("Buktu, Tim", "user226"),
new AccessIdResource("Ate, Tom", "cn=Tom Ate,ou=people,o=TaskanaTest"), new AccessIdResource("Ate, Tom", "user227"),
new AccessIdResource("Pie, Udo", "cn=Udo Pie,ou=people,o=TaskanaTest"), new AccessIdResource("Pie, Udo", "user228"),
new AccessIdResource("Aloe, Vera", "cn=Vera Aloe,ou=people,o=TaskanaTest"), new AccessIdResource("Aloe, Vera", "user229"),
new AccessIdResource("Hausver, Walter", "cn=Walter Hausver,ou=people,o=TaskanaTest"), new AccessIdResource("Hausver, Walter", "user230"),
new AccessIdResource("Schuh, Wanda", "cn=Wanda Schuh,ou=people,o=TaskanaTest"), new AccessIdResource("Schuh, Wanda", "user231"),
new AccessIdResource("Rahm, Wolf", "cn=Wolf Rahm,ou=people,o=TaskanaTest"), new AccessIdResource("Rahm, Wolf", "user232"),
new AccessIdResource("DevelopersGroup", "cn=DevelopersGroup,ou=groups,o=TaskanaTest"), new AccessIdResource("DevelopersGroup", "cn=DevelopersGroup,ou=groups,o=TaskanaTest"),
new AccessIdResource("UsersGroup", "cn=UsersGroup,ou=groups,o=TaskanaTest"), new AccessIdResource("UsersGroup", "cn=UsersGroup,ou=groups,o=TaskanaTest"),
new AccessIdResource("sachbearbeiter", "cn=sachbearbeiter,ou=groups,o=TaskanaTest"), new AccessIdResource("sachbearbeiter", "cn=sachbearbeiter,ou=groups,o=TaskanaTest"),

View File

@ -13,14 +13,14 @@ objectclass: organizationalUnit
objectclass: top objectclass: top
ou: people ou: people
dn: cn=Miguel Rojas,ou=people,o=TaskanaTest dn: cn=Rojas Miguel Angel Martin,ou=people,o=TaskanaTest
objectclass: inetOrgPerson objectclass: inetOrgPerson
objectclass: organizationalPerson objectclass: organizationalPerson
objectclass: person objectclass: person
objectclass: top objectclass: top
cn: Miguel Rojas cn: Rojas Miguel Angel Martin
sn: Rojas sn: Martin
givenName: Miguel givenName: Rojas Miguel Angel
uid: user_1_1 uid: user_1_1
dn: cn=Marcel Lengl,ou=people,o=TaskanaTest dn: cn=Marcel Lengl,ou=people,o=TaskanaTest
@ -91,7 +91,7 @@ objectclass: top
cn: Elena Ferrante cn: Elena Ferrante
sn: Ferrante sn: Ferrante
givenName: Elena givenName: Elena
uid: Elena uid: elena
dn: cn=Simone Mueller,ou=people,o=TaskanaTest dn: cn=Simone Mueller,ou=people,o=TaskanaTest
objectclass: inetOrgPerson objectclass: inetOrgPerson
@ -101,7 +101,7 @@ objectclass: top
cn: Simone Mueller cn: Simone Mueller
sn: Mueller sn: Mueller
givenName: Simone givenName: Simone
uid: Simone uid: simone
dn: cn=Aaron Sirup,ou=people,o=TaskanaTest dn: cn=Aaron Sirup,ou=people,o=TaskanaTest
objectclass: inetOrgPerson objectclass: inetOrgPerson

View File

@ -19,7 +19,10 @@ taskana.ldap.userSearchFilterName=objectclass
taskana.ldap.userSearchFilterValue=person taskana.ldap.userSearchFilterValue=person
taskana.ldap.userFirstnameAttribute=givenName taskana.ldap.userFirstnameAttribute=givenName
taskana.ldap.userLastnameAttribute=sn taskana.ldap.userLastnameAttribute=sn
taskana.ldap.userIdAttribute=uid
taskana.ldap.groupSearchBase=ou=groups taskana.ldap.groupSearchBase=ou=groups
taskana.ldap.groupSearchFilterName=objectclass taskana.ldap.groupSearchFilterName=objectclass
taskana.ldap.groupSearchFilterValue=groupOfUniqueNames taskana.ldap.groupSearchFilterValue=groupOfUniqueNames
taskana.ldap.groupNameAttribute=cn taskana.ldap.groupNameAttribute=cn
taskana.ldap.minSearchForLength=3
taskana.ldap.maxNumberOfReturnedAccessIds=50

View File

@ -12,6 +12,8 @@ import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.impl.util.LoggerUtils;
import pro.taskana.rest.RestConfiguration; import pro.taskana.rest.RestConfiguration;
import pro.taskana.rest.resource.AccessIdResource; import pro.taskana.rest.resource.AccessIdResource;
@ -24,10 +26,11 @@ public class LdapTest {
private LdapClient ldapClient; private LdapClient ldapClient;
@Test @Test
public void testFindUsers() { public void testFindUsers() throws InvalidArgumentException {
if (ldapClient.useLdap()) { if (ldapClient.useLdap()) {
List<AccessIdResource> usersAndGroups = ldapClient.searchUsersAndGroups("ie"); List<AccessIdResource> usersAndGroups = ldapClient.searchUsersAndGroups("ser0");
assertEquals(31, usersAndGroups.size()); System.out.println("#### found " + LoggerUtils.listToString(usersAndGroups));
assertEquals(50, usersAndGroups.size());
} }
} }
} }

View File

@ -16,7 +16,9 @@ public interface LdapCache {
* *
* @param searchFor * @param searchFor
* the search string. The search is performed over names and ids of users and groups. * the search string. The search is performed over names and ids of users and groups.
* @param maxNumerOfReturnedAccessIds
* the maximum number of results to return.
* @return a List of access ids for users and group where the name or id contains the search string. * @return a List of access ids for users and group where the name or id contains the search string.
*/ */
List<AccessIdResource> findMatchingAccessId(String searchFor); List<AccessIdResource> findMatchingAccessId(String searchFor, int maxNumerOfReturnedAccessIds);
} }

View File

@ -18,6 +18,7 @@ import org.springframework.ldap.filter.OrFilter;
import org.springframework.ldap.filter.WhitespaceWildcardsFilter; import org.springframework.ldap.filter.WhitespaceWildcardsFilter;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.SystemException; import pro.taskana.exceptions.SystemException;
import pro.taskana.impl.util.LoggerUtils; import pro.taskana.impl.util.LoggerUtils;
import pro.taskana.rest.resource.AccessIdResource; import pro.taskana.rest.resource.AccessIdResource;
@ -44,10 +45,13 @@ public class LdapClient {
private String userSearchFilterValue; private String userSearchFilterValue;
private String userFirstnameAttribute; private String userFirstnameAttribute;
private String userLastnameAttribute; private String userLastnameAttribute;
private String userIdAttribute;
private String groupSearchBase; private String groupSearchBase;
private String groupSearchFilterName; private String groupSearchFilterName;
private String groupSearchFilterValue; private String groupSearchFilterValue;
private String groupNameAttribute; private String groupNameAttribute;
private int minSearchForLength;
private int maxNumberOfReturnedAccessIds;
private static final String CN = "cn"; private static final String CN = "cn";
private String message; private String message;
@ -55,18 +59,36 @@ public class LdapClient {
@PostConstruct @PostConstruct
private void init() { private void init() {
String strMinSearchForLength = getMinSearchForLengthAsString();
if (strMinSearchForLength == null || strMinSearchForLength.isEmpty()) {
minSearchForLength = 3;
} else {
minSearchForLength = Integer.parseInt(strMinSearchForLength);
}
String strMaxNumberOfReturnedAccessIds = getMaxNumberOfReturnedAccessIdsAsString();
if (strMaxNumberOfReturnedAccessIds == null || strMaxNumberOfReturnedAccessIds.isEmpty()) {
maxNumberOfReturnedAccessIds = 50;
} else {
maxNumberOfReturnedAccessIds = Integer.parseInt(strMaxNumberOfReturnedAccessIds);
}
if (useLdap()) { if (useLdap()) {
userSearchBase = getUserSearchBase(); userSearchBase = getUserSearchBase();
userSearchFilterName = getUserSearchFilterName(); userSearchFilterName = getUserSearchFilterName();
userSearchFilterValue = getUserSearchFilterValue(); userSearchFilterValue = getUserSearchFilterValue();
userFirstnameAttribute = getUserFirstnameAttribute(); userFirstnameAttribute = getUserFirstnameAttribute();
userLastnameAttribute = getUserLastnameAttribute(); userLastnameAttribute = getUserLastnameAttribute();
userIdAttribute = getUserIdAttribute();
groupSearchBase = getGroupSearchBase(); groupSearchBase = getGroupSearchBase();
groupSearchFilterName = getGroupSearchFilterName(); groupSearchFilterName = getGroupSearchFilterName();
groupSearchFilterValue = getGroupSearchFilterValue(); groupSearchFilterValue = getGroupSearchFilterValue();
groupNameAttribute = getGroupNameAttribute(); groupNameAttribute = getGroupNameAttribute();
message = "taskana.ldap.useLdap is set to true, but"; ldapTemplate.setDefaultCountLimit(maxNumberOfReturnedAccessIds);
final String emptyMessage = "taskana.ldap.useLdap is set to true, but";
message = emptyMessage;
if (userSearchBase == null) { if (userSearchBase == null) {
message += " taskana.ldap.userSearchBase is not configured."; message += " taskana.ldap.userSearchBase is not configured.";
} }
@ -82,6 +104,9 @@ public class LdapClient {
if (userLastnameAttribute == null) { if (userLastnameAttribute == null) {
message += " taskana.ldap.userLastnameAttribute is not configured."; message += " taskana.ldap.userLastnameAttribute is not configured.";
} }
if (userIdAttribute == null) {
message += " taskana.ldap.userIdAttribute is not configured.";
}
if (groupSearchBase == null) { if (groupSearchBase == null) {
message += " taskana.ldap.groupSearchBase is not configured."; message += " taskana.ldap.groupSearchBase is not configured.";
} }
@ -94,7 +119,7 @@ public class LdapClient {
if (groupNameAttribute == null) { if (groupNameAttribute == null) {
message += " taskana.ldap.groupNameAttribute is not configured."; message += " taskana.ldap.groupNameAttribute is not configured.";
} }
if (!message.equals("taskana.ldap.useLdap is set to true, but")) { if (!message.equals(emptyMessage)) {
LOGGER.error("Ldap configuration error detected: {}", message); LOGGER.error("Ldap configuration error detected: {}", message);
throw new SystemException(message); throw new SystemException(message);
} }
@ -102,36 +127,54 @@ public class LdapClient {
} }
} }
public List<AccessIdResource> searchUsersAndGroups(final String name) { public List<AccessIdResource> searchUsersAndGroups(final String name) throws InvalidArgumentException {
LOGGER.debug("entry to searchUsersAndGroups(name = {})", name); LOGGER.debug("entry to searchUsersAndGroups(name = {})", name);
if (!active) { if (!active) {
LOGGER.error("LdapClient was called but is not active due to missing configuration: " + message); LOGGER.error("LdapClient was called but is not active due to missing configuration: " + message);
throw new SystemException( throw new SystemException(
"LdapClient was called but is not active due to missing configuration: " + message); "LdapClient was called but is not active due to missing configuration: " + message);
} }
List<AccessIdResource> users = searchUsersByName(name); if (name == null || name.length() < minSearchForLength) {
users.addAll(searchGroupsByName(name)); throw new InvalidArgumentException("searchFor string " + name + " is too short. Minimum Length = "
LOGGER.debug("exit from searchUsersAndGroups(name = {}). Found {} users and groups.", name, users.size()); + getMinSearchForLength());
return users;
} }
public List<AccessIdResource> searchUsersByName(final String name) { List<AccessIdResource> users = searchUsersByName(name);
users.addAll(searchGroupsByName(name));
users.sort((AccessIdResource a, AccessIdResource b) -> {
return a.getAccessId().compareToIgnoreCase(b.getAccessId());
});
List<AccessIdResource> result = users.subList(0, Math.min(users.size(), maxNumberOfReturnedAccessIds));
LOGGER.debug("exit from searchUsersAndGroups(name = {}). Returning {} users and groups: {}", name, users.size(),
LoggerUtils.listToString(result));
return result;
}
public List<AccessIdResource> searchUsersByName(final String name) throws InvalidArgumentException {
LOGGER.debug("entry to searchUsersByName(name = {}).", name); LOGGER.debug("entry to searchUsersByName(name = {}).", name);
if (!active) { if (!active) {
LOGGER.error("LdapClient was called but is not active due to missing configuration: " + message); LOGGER.error("LdapClient was called but is not active due to missing configuration: " + message);
throw new SystemException( throw new SystemException(
"LdapClient was called but is not active due to missing configuration: " + message); "LdapClient was called but is not active due to missing configuration: " + message);
} }
if (name == null || name.length() < minSearchForLength) {
throw new InvalidArgumentException("searchFor string " + name + " is too short. Minimum Length = "
+ getMinSearchForLength());
}
final AndFilter andFilter = new AndFilter(); final AndFilter andFilter = new AndFilter();
andFilter.and(new EqualsFilter(getUserSearchFilterName(), getUserSearchFilterValue())); andFilter.and(new EqualsFilter(getUserSearchFilterName(), getUserSearchFilterValue()));
final OrFilter orFilter = new OrFilter(); final OrFilter orFilter = new OrFilter();
orFilter.or(new WhitespaceWildcardsFilter(CN, name));
orFilter.or(new WhitespaceWildcardsFilter(getUserFirstnameAttribute(), name)); orFilter.or(new WhitespaceWildcardsFilter(getUserFirstnameAttribute(), name));
orFilter.or(new WhitespaceWildcardsFilter(getUserLastnameAttribute(), name)); orFilter.or(new WhitespaceWildcardsFilter(getUserLastnameAttribute(), name));
orFilter.or(new WhitespaceWildcardsFilter(getUserIdAttribute(), name));
andFilter.and(orFilter); andFilter.and(orFilter);
String[] userAttributesToReturn = {getUserFirstnameAttribute(), getUserLastnameAttribute(), CN}; String[] userAttributesToReturn = {getUserFirstnameAttribute(), getUserLastnameAttribute(),
getUserIdAttribute()};
try { try {
final List<AccessIdResource> accessIds = ldapTemplate.search(getUserSearchBase(), andFilter.encode(), final List<AccessIdResource> accessIds = ldapTemplate.search(getUserSearchBase(), andFilter.encode(),
@ -145,13 +188,18 @@ public class LdapClient {
} }
} }
public List<AccessIdResource> searchGroupsByName(final String name) { public List<AccessIdResource> searchGroupsByName(final String name) throws InvalidArgumentException {
LOGGER.debug("entry to searchGroupsByName(name = {}).", name); LOGGER.debug("entry to searchGroupsByName(name = {}).", name);
if (!active) { if (!active) {
LOGGER.error("LdapClient was called but is not active due to missing configuration: " + message); LOGGER.error("LdapClient was called but is not active due to missing configuration: " + message);
throw new SystemException( throw new SystemException(
"LdapClient was called but is not active due to missing configuration: " + message); "LdapClient was called but is not active due to missing configuration: " + message);
} }
if (name == null || name.length() < minSearchForLength) {
throw new InvalidArgumentException("searchFor string " + name + " is too short. Minimum Length = "
+ getMinSearchForLength());
}
final AndFilter andFilter = new AndFilter(); final AndFilter andFilter = new AndFilter();
andFilter.and(new EqualsFilter(getGroupSearchFilterName(), getGroupSearchFilterValue())); andFilter.and(new EqualsFilter(getGroupSearchFilterName(), getGroupSearchFilterValue()));
final OrFilter orFilter = new OrFilter(); final OrFilter orFilter = new OrFilter();
@ -210,6 +258,10 @@ public class LdapClient {
return env.getProperty("taskana.ldap.userLastnameAttribute"); return env.getProperty("taskana.ldap.userLastnameAttribute");
} }
public String getUserIdAttribute() {
return env.getProperty("taskana.ldap.userIdAttribute");
}
public String getGroupSearchBase() { public String getGroupSearchBase() {
return env.getProperty("taskana.ldap.groupSearchBase"); return env.getProperty("taskana.ldap.groupSearchBase");
} }
@ -226,6 +278,22 @@ public class LdapClient {
return env.getProperty("taskana.ldap.groupNameAttribute"); return env.getProperty("taskana.ldap.groupNameAttribute");
} }
public String getMinSearchForLengthAsString() {
return env.getProperty("taskana.ldap.minSearchForLength");
}
public int getMinSearchForLength() {
return minSearchForLength;
}
public String getMaxNumberOfReturnedAccessIdsAsString() {
return env.getProperty("taskana.ldap.maxNumberOfReturnedAccessIds");
}
public int getMaxNumberOfReturnedAccessIds() {
return maxNumberOfReturnedAccessIds;
}
/** /**
* Context Mapper for user entries. * Context Mapper for user entries.
*/ */
@ -234,7 +302,7 @@ public class LdapClient {
@Override @Override
public AccessIdResource doMapFromContext(final DirContextOperations context) { public AccessIdResource doMapFromContext(final DirContextOperations context) {
final AccessIdResource accessId = new AccessIdResource(); final AccessIdResource accessId = new AccessIdResource();
accessId.setAccessId(context.getNameInNamespace()); // fully qualified dn accessId.setAccessId(context.getStringAttribute(getUserIdAttribute()));
String firstName = context.getStringAttribute(getUserFirstnameAttribute()); String firstName = context.getStringAttribute(getUserFirstnameAttribute());
String lastName = context.getStringAttribute(getUserLastnameAttribute()); String lastName = context.getStringAttribute(getUserLastnameAttribute());
accessId.setName(lastName + ", " + firstName); accessId.setName(lastName + ", " + firstName);

View File

@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.ldap.LdapCache; import pro.taskana.ldap.LdapCache;
import pro.taskana.ldap.LdapClient; import pro.taskana.ldap.LdapClient;
import pro.taskana.rest.resource.AccessIdResource; import pro.taskana.rest.resource.AccessIdResource;
@ -34,11 +35,17 @@ public class AccessIdController {
@GetMapping @GetMapping
public ResponseEntity<List<AccessIdResource>> validateAccessIds( public ResponseEntity<List<AccessIdResource>> validateAccessIds(
@RequestParam(required = false) String searchFor) { @RequestParam(required = false) String searchFor) throws InvalidArgumentException {
if (searchFor == null || searchFor.length() < ldapClient.getMinSearchForLength()) {
throw new InvalidArgumentException("searchFor string " + searchFor + " is too short. Minimum Length = "
+ ldapClient.getMinSearchForLength());
}
if (ldapClient.useLdap()) { if (ldapClient.useLdap()) {
return new ResponseEntity<>(ldapClient.searchUsersAndGroups(searchFor), HttpStatus.OK); return new ResponseEntity<>(ldapClient.searchUsersAndGroups(searchFor), HttpStatus.OK);
} else if (ldapCache != null) { } else if (ldapCache != null) {
return new ResponseEntity<>(ldapCache.findMatchingAccessId(searchFor), HttpStatus.OK); return new ResponseEntity<>(
ldapCache.findMatchingAccessId(searchFor, ldapClient.getMaxNumberOfReturnedAccessIds()),
HttpStatus.OK);
} else { } else {
return new ResponseEntity<>(new ArrayList<>(), HttpStatus.NOT_FOUND); return new ResponseEntity<>(new ArrayList<>(), HttpStatus.NOT_FOUND);
} }

View File

@ -57,7 +57,7 @@ public class RestConfiguration {
contextSource.setUserDn(env.getRequiredProperty("taskana.ldap.bindDn")); contextSource.setUserDn(env.getRequiredProperty("taskana.ldap.bindDn"));
contextSource.setPassword(env.getRequiredProperty("taskana.ldap.bindPassword")); contextSource.setPassword(env.getRequiredProperty("taskana.ldap.bindPassword"));
} else { } else {
contextSource.setUrl("ldap://com.dummy:9999"); contextSource.setUrl("ldap://localhost:9999");
contextSource.setBase("o=taskana"); contextSource.setBase("o=taskana");
contextSource.setUserDn("user"); contextSource.setUserDn("user");
contextSource.setPassword("secret"); contextSource.setPassword("secret");