From fd564b305382ac7d9e0a2a755cb71d7632ddacbb Mon Sep 17 00:00:00 2001 From: BerndBreier <33351391+BerndBreier@users.noreply.github.com> Date: Mon, 4 Jun 2018 16:37:40 +0200 Subject: [PATCH] TSK-548 Ldap Access must use uid field as user Id for persons --- .../pro/taskana/ldap/LdapCacheTestImpl.java | 494 +++++++++--------- .../src/main/resources/TaskanaTest.ldif | 12 +- .../src/main/resources/application.properties | 3 + .../test/java/pro/taskana/ldap/LdapTest.java | 9 +- .../main/java/pro/taskana/ldap/LdapCache.java | 4 +- .../java/pro/taskana/ldap/LdapClient.java | 88 +++- .../pro/taskana/rest/AccessIdController.java | 11 +- .../pro/taskana/rest/RestConfiguration.java | 2 +- 8 files changed, 357 insertions(+), 266 deletions(-) diff --git a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/ldap/LdapCacheTestImpl.java b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/ldap/LdapCacheTestImpl.java index 6588a0a67..eb1231c35 100644 --- a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/ldap/LdapCacheTestImpl.java +++ b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/ldap/LdapCacheTestImpl.java @@ -15,256 +15,264 @@ import pro.taskana.rest.resource.AccessIdResource; public class LdapCacheTestImpl implements LdapCache { @Override - public List findMatchingAccessId(String searchFor) { - List result = accessIds.stream() + public List findMatchingAccessId(String searchFor, int maxNumerOfReturnedAccessIds) { + List usersAndGroups = accessIds.stream() .filter(t -> (t.getName().toLowerCase().contains(searchFor.toLowerCase()) || t.getAccessId().toLowerCase().contains(searchFor.toLowerCase()))) .collect(Collectors.toList()); + + usersAndGroups.sort((AccessIdResource a, AccessIdResource b) -> { + return a.getAccessId().compareToIgnoreCase(b.getAccessId()); + }); + + List result = usersAndGroups.subList(0, + Math.min(usersAndGroups.size(), maxNumerOfReturnedAccessIds)); + return result; } private static List accessIds = new ArrayList<>(Arrays.asList( - new AccessIdResource("Rojas, Miguel", "cn=Miguel Rojas,ou=people,o=TaskanaTest"), - new AccessIdResource("Lengl, Marcel", "cn=Marcel Lengl,ou=people,o=TaskanaTest"), - new AccessIdResource("Zorgati, Mustapha", "cn=Mustapha Zorgati,ou=people,o=TaskanaTest"), - new AccessIdResource("Breier, Bernd", "cn=Bernd Breier,ou=people,o=TaskanaTest"), - new AccessIdResource("Meyer, Dominik", "cn=Dominik Meyer,ou=people,o=TaskanaTest"), - new AccessIdResource("Hagen, Holger", "cn=Holger Hagen,ou=people,o=TaskanaTest"), - new AccessIdResource("Behrendt, Maximilian", "cn=Maximilian Behrendt,ou=people,o=TaskanaTest"), - new AccessIdResource("Ferrante, Elena", "cn=Elena Ferrante,ou=people,o=TaskanaTest"), - new AccessIdResource("Mueller, Simone", "cn=Simone Mueller,ou=people,o=TaskanaTest"), - new AccessIdResource("Sirup, Aaron", "cn=Aaron Sirup,ou=people,o=TaskanaTest"), - new AccessIdResource("Kahn, Ada", "cn=Ada Kahn,ou=people,o=TaskanaTest"), - new AccessIdResource("Lass, Ada", "cn=Ada Lass,ou=people,o=TaskanaTest"), - new AccessIdResource("Tion, Addi", "cn=Addi Tion,ou=people,o=TaskanaTest"), - new AccessIdResource("Lette, Adi", "cn=Adi Lette,ou=people,o=TaskanaTest"), - new AccessIdResource("Native, Alter", "cn=Alter Native,ou=people,o=TaskanaTest"), - new AccessIdResource("Herum, Albert", "cn=Albert Herum,ou=people,o=TaskanaTest"), - new AccessIdResource("Bert, Ali", "cn=Ali Bert,ou=people,o=TaskanaTest"), - new AccessIdResource("Mente, Ali", "cn=Ali Mente,ou=people,o=TaskanaTest"), - new AccessIdResource("Mater, Alma", "cn=Alma Mater,ou=people,o=TaskanaTest"), - new AccessIdResource("Nach, Alma", "cn=Alma Nach,ou=people,o=TaskanaTest"), - new AccessIdResource("Gehzauch, Anders", "cn=Anders Gehzauch,ou=people,o=TaskanaTest"), - new AccessIdResource("Theke, Andi", "cn=Andi Theke,ou=people,o=TaskanaTest"), - new AccessIdResource("Kreuz, Andreas", "cn=Andreas Kreuz,ou=people,o=TaskanaTest"), - new AccessIdResource("Kette, Anka", "cn=Anka Kette,ou=people,o=TaskanaTest"), - new AccessIdResource("Tiefsee, Anka", "cn=Anka Tiefsee,ou=people,o=TaskanaTest"), - new AccessIdResource("Fielmalz, Anke", "cn=Anke Fielmalz,ou=people,o=TaskanaTest"), - new AccessIdResource("Fassen, Ann", "cn=Ann Fassen,ou=people,o=TaskanaTest"), - new AccessIdResource("Probe, Ann", "cn=Ann Probe,ou=people,o=TaskanaTest"), - new AccessIdResource("Bolika, Anna", "cn=Anna Bolika,ou=people,o=TaskanaTest"), - new AccessIdResource("Ecke, Anna", "cn=Anna Ecke,ou=people,o=TaskanaTest"), - new AccessIdResource("Hosi, Anna", "cn=Anna Hosi,ou=people,o=TaskanaTest"), - new AccessIdResource("Kronis-Tisch, Anna", "cn=Anna Kronis-Tisch,ou=people,o=TaskanaTest"), - new AccessIdResource("Logie, Anna", "cn=Anna Logie,ou=people,o=TaskanaTest"), - new AccessIdResource("Luehse, Anna", "cn=Anna Luehse,ou=people,o=TaskanaTest"), - new AccessIdResource("Nass, Anna", "cn=Anna Nass,ou=people,o=TaskanaTest"), - new AccessIdResource("Thalb, Anna", "cn=Anna Thalb,ou=people,o=TaskanaTest"), - new AccessIdResource("Tomie, Anna", "cn=Anna Tomie,ou=people,o=TaskanaTest"), - new AccessIdResource("Donnich, Anne", "cn=Anne Donnich,ou=people,o=TaskanaTest"), - new AccessIdResource("Kaffek, Anne", "cn=Anne Kaffek,ou=people,o=TaskanaTest"), - new AccessIdResource("Thek, Anne", "cn=Anne Thek,ou=people,o=TaskanaTest"), - new AccessIdResource("Matoer, Anni", "cn=Anni Matoer,ou=people,o=TaskanaTest"), - new AccessIdResource("Ragentor, Ansgar", "cn=Ansgar Ragentor,ou=people,o=TaskanaTest"), - new AccessIdResource("Stoteles, Ari", "cn=Ari Stoteles,ou=people,o=TaskanaTest"), - new AccessIdResource("Thmetik, Ari", "cn=Ari Thmetik,ou=people,o=TaskanaTest"), - new AccessIdResource("Nuehm, Arno", "cn=Arno Nuehm,ou=people,o=TaskanaTest"), - new AccessIdResource("Schocke, Artie", "cn=Artie Schocke,ou=people,o=TaskanaTest"), - new AccessIdResource("Stoppel, Bart", "cn=Bart Stoppel,ou=people,o=TaskanaTest"), - new AccessIdResource("Beitung, Bea", "cn=Bea Beitung,ou=people,o=TaskanaTest"), - new AccessIdResource("Ildich, Bea", "cn=Bea Ildich,ou=people,o=TaskanaTest"), - new AccessIdResource("Vista, Bella", "cn=Bella Vista,ou=people,o=TaskanaTest"), - new AccessIdResource("Utzer, Ben", "cn=Ben Utzer,ou=people,o=TaskanaTest"), - new AccessIdResource("Zien, Ben", "cn=Ben Zien,ou=people,o=TaskanaTest"), - new AccessIdResource("Stein, Bernd", "cn=Bernd Stein,ou=people,o=TaskanaTest"), - new AccessIdResource("Deramen, Bill", "cn=Bill Deramen,ou=people,o=TaskanaTest"), - new AccessIdResource("Honig, Bine", "cn=Bine Honig,ou=people,o=TaskanaTest"), - new AccessIdResource("Densatz, Bo", "cn=Bo Densatz,ou=people,o=TaskanaTest"), - new AccessIdResource("Densee, Bo", "cn=Bo Densee,ou=people,o=TaskanaTest"), - new AccessIdResource("Lerwagen, Bo", "cn=Bo Lerwagen,ou=people,o=TaskanaTest"), - new AccessIdResource("Tail, Bob", "cn=Bob Tail,ou=people,o=TaskanaTest"), - new AccessIdResource("Ketta, Bruce", "cn=Bruce Ketta,ou=people,o=TaskanaTest"), - new AccessIdResource("Terrie, Bud", "cn=Bud Terrie,ou=people,o=TaskanaTest"), - new AccessIdResource("Biener-Haken, Cara", "cn=iener- Cara Haken,ou=people,o=TaskanaTest"), - new AccessIdResource("Ass, Caro", "cn=Caro Ass,ou=people,o=TaskanaTest"), - new AccessIdResource("Kaffee, Caro", "cn=Caro Kaffee,ou=people,o=TaskanaTest"), - new AccessIdResource("Linger, Caro", "cn=Caro Linger,ou=people,o=TaskanaTest"), - new AccessIdResource("tenSaft, Caro", "cn=Caro tenSaft,ou=people,o=TaskanaTest"), - new AccessIdResource("Antheme, Chris", "cn=Chris Antheme,ou=people,o=TaskanaTest"), - new AccessIdResource("Baum, Chris", "cn=Chris Baum,ou=people,o=TaskanaTest"), - new AccessIdResource("Tall, Chris", "cn=Chris Tall,ou=people,o=TaskanaTest"), - new AccessIdResource("Reiniger, Claas", "cn=Claas Reiniger,ou=people,o=TaskanaTest"), - new AccessIdResource("Grube, Claire", "cn=Claire Grube,ou=people,o=TaskanaTest"), - new AccessIdResource("Fall, Clara", "cn=Clara Fall,ou=people,o=TaskanaTest"), - new AccessIdResource("Korn, Clara", "cn=Clara Korn,ou=people,o=TaskanaTest"), - new AccessIdResource("Lenriff, Cora", "cn=Cora Lenriff,ou=people,o=TaskanaTest"), - new AccessIdResource("Schiert, Cora", "cn=Cora Schiert,ou=people,o=TaskanaTest"), - new AccessIdResource("Hose, Cord", "cn=Cord Hose,ou=people,o=TaskanaTest"), - new AccessIdResource("Onbleu, Cord", "cn=Cord Onbleu,ou=people,o=TaskanaTest"), - new AccessIdResource("Umkleide, Damon", "cn=Damon Umkleide,ou=people,o=TaskanaTest"), - new AccessIdResource("Affier, Dean", "cn=Dean Affier,ou=people,o=TaskanaTest"), - new AccessIdResource("Orm, Dean", "cn=Dean Orm,ou=people,o=TaskanaTest"), - new AccessIdResource("Platz, Dennis", "cn=Dennis Platz,ou=people,o=TaskanaTest"), - new AccessIdResource("Milch, Dick", "cn=Dick Milch,ou=people,o=TaskanaTest"), - new AccessIdResource("Mow, Dina", "cn=Dina Mow,ou=people,o=TaskanaTest"), - new AccessIdResource("Keil, Donna", "cn=Donna Keil,ou=people,o=TaskanaTest"), - new AccessIdResource("Littchen, Donna", "cn=Donna Littchen,ou=people,o=TaskanaTest"), - new AccessIdResource("Wetter, Donna", "cn=Donna Wetter,ou=people,o=TaskanaTest"), - new AccessIdResource("Was, Ed", "cn=Ed Was,ou=people,o=TaskanaTest"), - new AccessIdResource("Khar, Ede", "cn=Ede Khar,ou=people,o=TaskanaTest"), - new AccessIdResource("Nut, Ella", "cn=Ella Nut,ou=people,o=TaskanaTest"), - new AccessIdResource("Stisch, Ella", "cn=Ella Stisch,ou=people,o=TaskanaTest"), - new AccessIdResource("Diel, Emma", "cn=Emma Diel,ou=people,o=TaskanaTest"), - new AccessIdResource("Herdamit, Emma", "cn=Emma Herdamit,ou=people,o=TaskanaTest"), - new AccessIdResource("Mitter-Uhe, Emma", "cn=Emma Mitter-Uhe,ou=people,o=TaskanaTest"), - new AccessIdResource("Tatt, Erich", "cn=Erich Tatt,ou=people,o=TaskanaTest"), - new AccessIdResource("Drigend, Ernie", "cn=Ernie Drigend,ou=people,o=TaskanaTest"), - new AccessIdResource("Poly, Esther", "cn=Esther Poly,ou=people,o=TaskanaTest"), - new AccessIdResource("Trautz, Eugen", "cn=Eugen Trautz,ou=people,o=TaskanaTest"), - new AccessIdResource("Quiert, Eva", "cn=Eva Quiert,ou=people,o=TaskanaTest"), - new AccessIdResource("Inurlaub, Fatma", "cn=Fatma Inurlaub,ou=people,o=TaskanaTest"), - new AccessIdResource("Land, Finn", "cn=Finn Land,ou=people,o=TaskanaTest"), - new AccessIdResource("Sternis, Finn", "cn=Finn Sternis,ou=people,o=TaskanaTest"), - new AccessIdResource("Furt, Frank", "cn=Frank Furt,ou=people,o=TaskanaTest"), - new AccessIdResource("Reich, Frank", "cn=Frank Reich,ou=people,o=TaskanaTest"), - new AccessIdResource("Iskaner, Franz", "cn=Franz Iskaner,ou=people,o=TaskanaTest"), - new AccessIdResource("Nerr, Franziska", "cn=Franziska Nerr,ou=people,o=TaskanaTest"), - new AccessIdResource("Zafen, Friedrich", "cn=Friedrich Zafen,ou=people,o=TaskanaTest"), - new AccessIdResource("Pomm, Fritz", "cn=Fritz Pomm,ou=people,o=TaskanaTest"), - new AccessIdResource("deWegs, Gera", "cn=Gera deWegs,ou=people,o=TaskanaTest"), - new AccessIdResource("Staebe, Gitta", "cn=Gitta Staebe,ou=people,o=TaskanaTest"), - new AccessIdResource("Zend, Glenn", "cn=Glenn Zend,ou=people,o=TaskanaTest"), - new AccessIdResource("Fisch, Grete", "cn=Grete Fisch,ou=people,o=TaskanaTest"), - new AccessIdResource("Zucker, Gus", "cn=Gus Zucker,ou=people,o=TaskanaTest"), - new AccessIdResource("Muhn, Hanni", "cn=Hanni Muhn,ou=people,o=TaskanaTest"), - new AccessIdResource("Fermesse, Hanno", "cn=Hanno Fermesse,ou=people,o=TaskanaTest"), - new AccessIdResource("Aplast, Hans", "cn=Hans Aplast,ou=people,o=TaskanaTest"), - new AccessIdResource("Eart, Hans", "cn=Hans Eart,ou=people,o=TaskanaTest"), - new AccessIdResource("Back, Hardy", "cn=Hardy Back,ou=people,o=TaskanaTest"), - new AccessIdResource("Beau, Harry", "cn=Harry Beau,ou=people,o=TaskanaTest"), - new AccessIdResource("Kraut, Heide", "cn=Heide Kraut,ou=people,o=TaskanaTest"), - new AccessIdResource("Witzka, Heide", "cn=Heide Witzka,ou=people,o=TaskanaTest"), - new AccessIdResource("Buchen, Hein", "cn=Hein Buchen,ou=people,o=TaskanaTest"), - new AccessIdResource("Lichkeit, Hein", "cn=Hein Lichkeit,ou=people,o=TaskanaTest"), - new AccessIdResource("Suchung, Hein", "cn=Hein Suchung,ou=people,o=TaskanaTest"), - new AccessIdResource("Ellmann, Heinz", "cn=Heinz Ellmann,ou=people,o=TaskanaTest"), - new AccessIdResource("Ketchup, Heinz", "cn=Heinz Ketchup,ou=people,o=TaskanaTest"), - new AccessIdResource("Zeim, Hilde", "cn=Hilde Zeim,ou=people,o=TaskanaTest"), - new AccessIdResource("Bilien, Immo", "cn=Immo Bilien,ou=people,o=TaskanaTest"), - new AccessIdResource("Her, Inge", "cn=Inge Her,ou=people,o=TaskanaTest"), - new AccessIdResource("Wahrsam, Inge", "cn=Inge Wahrsam,ou=people,o=TaskanaTest"), - new AccessIdResource("Flamm, Ingo", "cn=Ingo Flamm,ou=people,o=TaskanaTest"), - new AccessIdResource("Enzien, Ingrid", "cn=Ingrid Enzien,ou=people,o=TaskanaTest"), - new AccessIdResource("Rohsch, Inken", "cn=Inken Rohsch,ou=people,o=TaskanaTest"), - new AccessIdResource("Ihr, Insa", "cn=Insa Ihr,ou=people,o=TaskanaTest"), - new AccessIdResource("Nerda, Iska", "cn=Iska Nerda,ou=people,o=TaskanaTest"), - new AccessIdResource("Eitz, Jens", "cn=Jens Eitz,ou=people,o=TaskanaTest"), - new AccessIdResource("Nastik, Jim", "cn=Jim Nastik,ou=people,o=TaskanaTest"), - new AccessIdResource("Gurt, Jo", "cn=Jo Gurt,ou=people,o=TaskanaTest"), - new AccessIdResource("Kurrth, Jo", "cn=Jo Kurrth,ou=people,o=TaskanaTest"), - new AccessIdResource("Kolade, Joe", "cn=Joe Kolade,ou=people,o=TaskanaTest"), - new AccessIdResource("Iter, Johann", "cn=Johann Iter,ou=people,o=TaskanaTest"), - new AccessIdResource("Tick, Joyce", "cn=Joyce Tick,ou=people,o=TaskanaTest"), - new AccessIdResource("Case, Justin", "cn=Justin Case,ou=people,o=TaskanaTest"), - new AccessIdResource("Time, Justin", "cn=Justin Time,ou=people,o=TaskanaTest"), - new AccessIdResource("Komp, Jutta", "cn=Jutta Komp,ou=people,o=TaskanaTest"), - new AccessIdResource("Mauer, Kai", "cn=Kai Mauer,ou=people,o=TaskanaTest"), - new AccessIdResource("Pirinja, Kai", "cn=Kai Pirinja,ou=people,o=TaskanaTest"), - new AccessIdResource("Serpfalz, Kai", "cn=Kai Serpfalz,ou=people,o=TaskanaTest"), - new AccessIdResource("Auer, Karl", "cn=Karl Auer,ou=people,o=TaskanaTest"), - new AccessIdResource("Ielauge, Karl", "cn=Karl Ielauge,ou=people,o=TaskanaTest"), - new AccessIdResource("Ifornjen, Karl", "cn=Karl Ifornjen,ou=people,o=TaskanaTest"), - new AccessIdResource("Radi, Karl", "cn=Karl Radi,ou=people,o=TaskanaTest"), - new AccessIdResource("Verti, Karl", "cn=Karl Verti,ou=people,o=TaskanaTest"), - new AccessIdResource("Sery, Karo", "cn=Karo Sery,ou=people,o=TaskanaTest"), - new AccessIdResource("Lisator, Katha", "cn=Katha Lisator,ou=people,o=TaskanaTest"), - new AccessIdResource("Flo, Kati", "cn=Kati Flo,ou=people,o=TaskanaTest"), - new AccessIdResource("Schenn, Knut", "cn=Knut Schenn,ou=people,o=TaskanaTest"), - new AccessIdResource("Achse, Kurt", "cn=Kurt Achse,ou=people,o=TaskanaTest"), - new AccessIdResource("Zepause, Kurt", "cn=Kurt Zepause,ou=people,o=TaskanaTest"), - new AccessIdResource("Zerr, Kurt", "cn=Kurt Zerr,ou=people,o=TaskanaTest"), - new AccessIdResource("Reden, Lasse", "cn=Lasse Reden,ou=people,o=TaskanaTest"), - new AccessIdResource("Metten, Lee", "cn=Lee Metten,ou=people,o=TaskanaTest"), - new AccessIdResource("Arm, Lene", "cn=Lene Arm,ou=people,o=TaskanaTest"), - new AccessIdResource("Thur, Linnea", "cn=Linnea Thur,ou=people,o=TaskanaTest"), - new AccessIdResource("Bonn, Lisa", "cn=Lisa Bonn,ou=people,o=TaskanaTest"), - new AccessIdResource("Sembourg, Luc", "cn=Luc Sembourg,ou=people,o=TaskanaTest"), - new AccessIdResource("Rung, Lucky", "cn=Lucky Rung,ou=people,o=TaskanaTest"), - new AccessIdResource("Zafen, Ludwig", "cn=Ludwig Zafen,ou=people,o=TaskanaTest"), - new AccessIdResource("Hauden, Lukas", "cn=Lukas Hauden,ou=people,o=TaskanaTest"), - new AccessIdResource("Hose, Lutz", "cn=Lutz Hose,ou=people,o=TaskanaTest"), - new AccessIdResource("Tablette, Lutz", "cn=Lutz Tablette,ou=people,o=TaskanaTest"), - new AccessIdResource("Fehr, Luzie", "cn=Luzie Fehr,ou=people,o=TaskanaTest"), - new AccessIdResource("Nalyse, Magda", "cn=Magda Nalyse,ou=people,o=TaskanaTest"), - new AccessIdResource("Ehfer, Maik", "cn=Maik Ehfer,ou=people,o=TaskanaTest"), - new AccessIdResource("Sehr, Malte", "cn=Malte Sehr,ou=people,o=TaskanaTest"), - new AccessIdResource("Thon, Mara", "cn=Mara Thon,ou=people,o=TaskanaTest"), - new AccessIdResource("Quark, Marga", "cn=Marga Quark,ou=people,o=TaskanaTest"), - new AccessIdResource("Nade, Marie", "cn=Marie Nade,ou=people,o=TaskanaTest"), - new AccessIdResource("Niert, Marie", "cn=Marie Niert,ou=people,o=TaskanaTest"), - new AccessIdResource("Neese, Mario", "cn=Mario Neese,ou=people,o=TaskanaTest"), - new AccessIdResource("Nette, Marion", "cn=Marion Nette,ou=people,o=TaskanaTest"), - new AccessIdResource("Nesium, Mark", "cn=Mark Nesium,ou=people,o=TaskanaTest"), - new AccessIdResource("Thalle, Mark", "cn=Mark Thalle,ou=people,o=TaskanaTest"), - new AccessIdResource("Diven, Marle", "cn=Marle Diven,ou=people,o=TaskanaTest"), - new AccessIdResource("Fitz, Marle", "cn=Marle Fitz,ou=people,o=TaskanaTest"), - new AccessIdResource("Pfahl, Marta", "cn=Marta Pfahl,ou=people,o=TaskanaTest"), - new AccessIdResource("Zorn, Martin", "cn=Martin Zorn,ou=people,o=TaskanaTest"), - new AccessIdResource("Krissmes, Mary", "cn=Mary Krissmes,ou=people,o=TaskanaTest"), - new AccessIdResource("Jess, Matt", "cn=Matt Jess,ou=people,o=TaskanaTest"), - new AccessIdResource("Strammer, Max", "cn=Max Strammer,ou=people,o=TaskanaTest"), - new AccessIdResource("Mumm, Maxi", "cn=Maxi Mumm,ou=people,o=TaskanaTest"), - new AccessIdResource("Morphose, Meta", "cn=Meta Morphose,ou=people,o=TaskanaTest"), - new AccessIdResource("Uh, Mia", "cn=Mia Uh,ou=people,o=TaskanaTest"), - new AccessIdResource("Rofon, Mike", "cn=Mike Rofon,ou=people,o=TaskanaTest"), - new AccessIdResource("Rosoft, Mike", "cn=Mike Rosoft,ou=people,o=TaskanaTest"), - new AccessIdResource("Liter, Milli", "cn=Milli Liter,ou=people,o=TaskanaTest"), - new AccessIdResource("Thär, Milli", "cn=hä Milli r,ou=people,o=TaskanaTest"), - new AccessIdResource("Welle, Mirko", "cn=Mirko Welle,ou=people,o=TaskanaTest"), - new AccessIdResource("Thorat, Mo", "cn=Mo Thorat,ou=people,o=TaskanaTest"), - new AccessIdResource("Thor, Moni", "cn=Moni Thor,ou=people,o=TaskanaTest"), - new AccessIdResource("Kinolta, Monika", "cn=Monika Kinolta,ou=people,o=TaskanaTest"), - new AccessIdResource("Mundhaar, Monika", "cn=Monika Mundhaar,ou=people,o=TaskanaTest"), - new AccessIdResource("Munter, Monika", "cn=Monika Munter,ou=people,o=TaskanaTest"), - new AccessIdResource("Zwerg, Nat", "cn=Nat Zwerg,ou=people,o=TaskanaTest"), - new AccessIdResource("Elmine, Nick", "cn=Nick Elmine,ou=people,o=TaskanaTest"), - new AccessIdResource("Thien, Niko", "cn=Niko Thien,ou=people,o=TaskanaTest"), - new AccessIdResource("Pferd, Nils", "cn=Nils Pferd,ou=people,o=TaskanaTest"), - new AccessIdResource("Lerweise, Norma", "cn=Norma Lerweise,ou=people,o=TaskanaTest"), - new AccessIdResource("Motor, Otto", "cn=Otto Motor,ou=people,o=TaskanaTest"), - new AccessIdResource("Totol, Otto", "cn=Otto Totol,ou=people,o=TaskanaTest"), - new AccessIdResource("Nerr, Paula", "cn=Paula Nerr,ou=people,o=TaskanaTest"), - new AccessIdResource("Imeter, Peer", "cn=Peer Imeter,ou=people,o=TaskanaTest"), - new AccessIdResource("Serkatze, Peer", "cn=Peer Serkatze,ou=people,o=TaskanaTest"), - new AccessIdResource("Gogisch, Peter", "cn=Peter Gogisch,ou=people,o=TaskanaTest"), - new AccessIdResource("Silje, Peter", "cn=Peter Silje,ou=people,o=TaskanaTest"), - new AccessIdResource("Harmonie, Phil", "cn=Phil Harmonie,ou=people,o=TaskanaTest"), - new AccessIdResource("Ihnen, Philip", "cn=Philip Ihnen,ou=people,o=TaskanaTest"), - new AccessIdResource("Uto, Pia", "cn=Pia Uto,ou=people,o=TaskanaTest"), - new AccessIdResource("Kothek, Pina", "cn=Pina Kothek,ou=people,o=TaskanaTest"), - new AccessIdResource("Zar, Pit", "cn=Pit Zar,ou=people,o=TaskanaTest"), - new AccessIdResource("Zeih, Polly", "cn=Polly Zeih,ou=people,o=TaskanaTest"), - new AccessIdResource("Tswan, Puh", "cn=Puh Tswan,ou=people,o=TaskanaTest"), - new AccessIdResource("Zufall, Rainer", "cn=Rainer Zufall,ou=people,o=TaskanaTest"), - new AccessIdResource("Lien, Rita", "cn=Rita Lien,ou=people,o=TaskanaTest"), - new AccessIdResource("Held, Roman", "cn=Roman Held,ou=people,o=TaskanaTest"), - new AccessIdResource("Haar, Ross", "cn=Ross Haar,ou=people,o=TaskanaTest"), - new AccessIdResource("Dick, Roy", "cn=Roy Dick,ou=people,o=TaskanaTest"), - new AccessIdResource("Enplaner, Ruth", "cn=Ruth Enplaner,ou=people,o=TaskanaTest"), - new AccessIdResource("Kommen, Ryan", "cn=Ryan Kommen,ou=people,o=TaskanaTest"), - new AccessIdResource("Philo, Sophie", "cn=Sophie Philo,ou=people,o=TaskanaTest"), - new AccessIdResource("Matisier, Stig", "cn=Stig Matisier,ou=people,o=TaskanaTest"), - new AccessIdResource("Loniki, Tessa", "cn=Tessa Loniki,ou=people,o=TaskanaTest"), - new AccessIdResource("Tralisch, Thea", "cn=Thea Tralisch,ou=people,o=TaskanaTest"), - new AccessIdResource("Logie, Theo", "cn=Theo Logie,ou=people,o=TaskanaTest"), - new AccessIdResource("Ister, Thorn", "cn=Thorn Ister,ou=people,o=TaskanaTest"), - new AccessIdResource("Buktu, Tim", "cn=Tim Buktu,ou=people,o=TaskanaTest"), - new AccessIdResource("Ate, Tom", "cn=Tom Ate,ou=people,o=TaskanaTest"), - new AccessIdResource("Pie, Udo", "cn=Udo Pie,ou=people,o=TaskanaTest"), - new AccessIdResource("Aloe, Vera", "cn=Vera Aloe,ou=people,o=TaskanaTest"), - new AccessIdResource("Hausver, Walter", "cn=Walter Hausver,ou=people,o=TaskanaTest"), - new AccessIdResource("Schuh, Wanda", "cn=Wanda Schuh,ou=people,o=TaskanaTest"), - new AccessIdResource("Rahm, Wolf", "cn=Wolf Rahm,ou=people,o=TaskanaTest"), + new AccessIdResource("Martin, Rojas Miguel Angel", "user_1_1"), + new AccessIdResource("Lengl, Marcel", "user_1_2"), + new AccessIdResource("Zorgati, Mustapha", "user_2_1"), + new AccessIdResource("Breier, Bernd", "user_2_2"), + new AccessIdResource("Meyer, Dominik", "teamlead_1"), + new AccessIdResource("Hagen, Holger", "teamlead_2"), + new AccessIdResource("Behrendt, Maximilian", "max"), + new AccessIdResource("Ferrante, Elena", "elena"), + new AccessIdResource("Mueller, Simone", "simone"), + new AccessIdResource("Sirup, Aaron", "user001"), + new AccessIdResource("Kahn, Ada", "user002"), + new AccessIdResource("Lass, Ada", "user003"), + new AccessIdResource("Tion, Addi", "user004"), + new AccessIdResource("Lette, Adi", "user005"), + new AccessIdResource("Native, Alter", "user006"), + new AccessIdResource("Herum, Albert", "user007"), + new AccessIdResource("Bert, Ali", "user008"), + new AccessIdResource("Mente, Ali", "user009"), + new AccessIdResource("Mater, Alma", "user010"), + new AccessIdResource("Nach, Alma", "user011"), + new AccessIdResource("Gehzauch, Anders", "user012"), + new AccessIdResource("Theke, Andi", "user013"), + new AccessIdResource("Kreuz, Andreas", "user014"), + new AccessIdResource("Kette, Anka", "user015"), + new AccessIdResource("Tiefsee, Anka", "user016"), + new AccessIdResource("Fielmalz, Anke", "user017"), + new AccessIdResource("Fassen, Ann", "user018"), + new AccessIdResource("Probe, Ann", "user019"), + new AccessIdResource("Bolika, Anna", "user020"), + new AccessIdResource("Ecke, Anna", "user021"), + new AccessIdResource("Hosi, Anna", "user022"), + new AccessIdResource("Kronis-Tisch, Anna", "user023"), + new AccessIdResource("Logie, Anna", "user024"), + new AccessIdResource("Luehse, Anna", "user025"), + new AccessIdResource("Nass, Anna", "user026"), + new AccessIdResource("Thalb, Anna", "user027"), + new AccessIdResource("Tomie, Anna", "user028"), + new AccessIdResource("Donnich, Anne", "user029"), + new AccessIdResource("Kaffek, Anne", "user030"), + new AccessIdResource("Thek, Anne", "user031"), + new AccessIdResource("Matoer, Anni", "user032"), + new AccessIdResource("Ragentor, Ansgar", "user033"), + new AccessIdResource("Stoteles, Ari", "user034"), + new AccessIdResource("Thmetik, Ari", "user035"), + new AccessIdResource("Nuehm, Arno", "user036"), + new AccessIdResource("Schocke, Artie", "user037"), + new AccessIdResource("Stoppel, Bart", "user038"), + new AccessIdResource("Beitung, Bea", "user039"), + new AccessIdResource("Ildich, Bea", "user040"), + new AccessIdResource("Vista, Bella", "user041"), + new AccessIdResource("Utzer, Ben", "user042"), + new AccessIdResource("Zien, Ben", "user043"), + new AccessIdResource("Stein, Bernd", "user044"), + new AccessIdResource("Deramen, Bill", "user045"), + new AccessIdResource("Honig, Bine", "user046"), + new AccessIdResource("Densatz, Bo", "user047"), + new AccessIdResource("Densee, Bo", "user048"), + new AccessIdResource("Lerwagen, Bo", "user049"), + new AccessIdResource("Tail, Bob", "user050"), + new AccessIdResource("Ketta, Bruce", "user051"), + new AccessIdResource("Terrie, Bud", "user052"), + new AccessIdResource("Biener-Haken, Cara", "user053"), + new AccessIdResource("Ass, Caro", "user054"), + new AccessIdResource("Kaffee, Caro", "user055"), + new AccessIdResource("Linger, Caro", "user056"), + new AccessIdResource("tenSaft, Caro", "user057"), + new AccessIdResource("Antheme, Chris", "user058"), + new AccessIdResource("Baum, Chris", "user059"), + new AccessIdResource("Tall, Chris", "user060"), + new AccessIdResource("Reiniger, Claas", "user061"), + new AccessIdResource("Grube, Claire", "user062"), + new AccessIdResource("Fall, Clara", "user063"), + new AccessIdResource("Korn, Clara", "user064"), + new AccessIdResource("Lenriff, Cora", "user065"), + new AccessIdResource("Schiert, Cora", "user066"), + new AccessIdResource("Hose, Cord", "user067"), + new AccessIdResource("Onbleu, Cord", "user068"), + new AccessIdResource("Umkleide, Damon", "user069"), + new AccessIdResource("Affier, Dean", "user070"), + new AccessIdResource("Orm, Dean", "user071"), + new AccessIdResource("Platz, Dennis", "user072"), + new AccessIdResource("Milch, Dick", "user073"), + new AccessIdResource("Mow, Dina", "user074"), + new AccessIdResource("Keil, Donna", "user075"), + new AccessIdResource("Littchen, Donna", "user076"), + new AccessIdResource("Wetter, Donna", "user077"), + new AccessIdResource("Was, Ed", "user078"), + new AccessIdResource("Khar, Ede", "user079"), + new AccessIdResource("Nut, Ella", "user080"), + new AccessIdResource("Stisch, Ella", "user081"), + new AccessIdResource("Diel, Emma", "user082"), + new AccessIdResource("Herdamit, Emma", "user083"), + new AccessIdResource("Mitter-Uhe, Emma", "user084"), + new AccessIdResource("Tatt, Erich", "user085"), + new AccessIdResource("Drigend, Ernie", "user086"), + new AccessIdResource("Poly, Esther", "user087"), + new AccessIdResource("Trautz, Eugen", "user088"), + new AccessIdResource("Quiert, Eva", "user089"), + new AccessIdResource("Inurlaub, Fatma", "user090"), + new AccessIdResource("Land, Finn", "user091"), + new AccessIdResource("Sternis, Finn", "user092"), + new AccessIdResource("Furt, Frank", "user093"), + new AccessIdResource("Reich, Frank", "user094"), + new AccessIdResource("Iskaner, Franz", "user095"), + new AccessIdResource("Nerr, Franziska", "user096"), + new AccessIdResource("Zafen, Friedrich", "user097"), + new AccessIdResource("Pomm, Fritz", "user098"), + new AccessIdResource("deWegs, Gera", "user099"), + new AccessIdResource("Staebe, Gitta", "user100"), + new AccessIdResource("Zend, Glenn", "user101"), + new AccessIdResource("Fisch, Grete", "user102"), + new AccessIdResource("Zucker, Gus", "user103"), + new AccessIdResource("Muhn, Hanni", "user104"), + new AccessIdResource("Fermesse, Hanno", "user105"), + new AccessIdResource("Aplast, Hans", "user106"), + new AccessIdResource("Eart, Hans", "user107"), + new AccessIdResource("Back, Hardy", "user108"), + new AccessIdResource("Beau, Harry", "user109"), + new AccessIdResource("Kraut, Heide", "user110"), + new AccessIdResource("Witzka, Heide", "user111"), + new AccessIdResource("Buchen, Hein", "user112"), + new AccessIdResource("Lichkeit, Hein", "user113"), + new AccessIdResource("Suchung, Hein", "user114"), + new AccessIdResource("Ellmann, Heinz", "user115"), + new AccessIdResource("Ketchup, Heinz", "user116"), + new AccessIdResource("Zeim, Hilde", "user117"), + new AccessIdResource("Bilien, Immo", "user118"), + new AccessIdResource("Her, Inge", "user119"), + new AccessIdResource("Wahrsam, Inge", "user120"), + new AccessIdResource("Flamm, Ingo", "user121"), + new AccessIdResource("Enzien, Ingrid", "user122"), + new AccessIdResource("Rohsch, Inken", "user123"), + new AccessIdResource("Ihr, Insa", "user124"), + new AccessIdResource("Nerda, Iska", "user125"), + new AccessIdResource("Eitz, Jens", "user126"), + new AccessIdResource("Nastik, Jim", "user127"), + new AccessIdResource("Gurt, Jo", "user128"), + new AccessIdResource("Kurrth, Jo", "user129"), + new AccessIdResource("Kolade, Joe", "user130"), + new AccessIdResource("Iter, Johann", "user131"), + new AccessIdResource("Tick, Joyce", "user132"), + new AccessIdResource("Case, Justin", "user133"), + new AccessIdResource("Time, Justin", "user134"), + new AccessIdResource("Komp, Jutta", "user135"), + new AccessIdResource("Mauer, Kai", "user136"), + new AccessIdResource("Pirinja, Kai", "user137"), + new AccessIdResource("Serpfalz, Kai", "user138"), + new AccessIdResource("Auer, Karl", "user139"), + new AccessIdResource("Ielauge, Karl", "user140"), + new AccessIdResource("Ifornjen, Karl", "user141"), + new AccessIdResource("Radi, Karl", "user142"), + new AccessIdResource("Verti, Karl", "user143"), + new AccessIdResource("Sery, Karo", "user144"), + new AccessIdResource("Lisator, Katha", "user145"), + new AccessIdResource("Flo, Kati", "user146"), + new AccessIdResource("Schenn, Knut", "user147"), + new AccessIdResource("Achse, Kurt", "user148"), + new AccessIdResource("Zepause, Kurt", "user149"), + new AccessIdResource("Zerr, Kurt", "user150"), + new AccessIdResource("Reden, Lasse", "user151"), + new AccessIdResource("Metten, Lee", "user152"), + new AccessIdResource("Arm, Lene", "user153"), + new AccessIdResource("Thur, Linnea", "user154"), + new AccessIdResource("Bonn, Lisa", "user155"), + new AccessIdResource("Sembourg, Luc", "user156"), + new AccessIdResource("Rung, Lucky", "user157"), + new AccessIdResource("Zafen, Ludwig", "user158"), + new AccessIdResource("Hauden, Lukas", "user159"), + new AccessIdResource("Hose, Lutz", "user160"), + new AccessIdResource("Tablette, Lutz", "user161"), + new AccessIdResource("Fehr, Luzie", "user162"), + new AccessIdResource("Nalyse, Magda", "user163"), + new AccessIdResource("Ehfer, Maik", "user164"), + new AccessIdResource("Sehr, Malte", "user165"), + new AccessIdResource("Thon, Mara", "user166"), + new AccessIdResource("Quark, Marga", "user167"), + new AccessIdResource("Nade, Marie", "user168"), + new AccessIdResource("Niert, Marie", "user169"), + new AccessIdResource("Neese, Mario", "user170"), + new AccessIdResource("Nette, Marion", "user171"), + new AccessIdResource("Nesium, Mark", "user172"), + new AccessIdResource("Thalle, Mark", "user173"), + new AccessIdResource("Diven, Marle", "user174"), + new AccessIdResource("Fitz, Marle", "user175"), + new AccessIdResource("Pfahl, Marta", "user176"), + new AccessIdResource("Zorn, Martin", "user177"), + new AccessIdResource("Krissmes, Mary", "user178"), + new AccessIdResource("Jess, Matt", "user179"), + new AccessIdResource("Strammer, Max", "user180"), + new AccessIdResource("Mumm, Maxi", "user181"), + new AccessIdResource("Morphose, Meta", "user182"), + new AccessIdResource("Uh, Mia", "user183"), + new AccessIdResource("Rofon, Mike", "user184"), + new AccessIdResource("Rosoft, Mike", "user185"), + new AccessIdResource("Liter, Milli", "user186"), + new AccessIdResource("Thär, Milli", "user187"), + new AccessIdResource("Welle, Mirko", "user188"), + new AccessIdResource("Thorat, Mo", "user189"), + new AccessIdResource("Thor, Moni", "user190"), + new AccessIdResource("Kinolta, Monika", "user191"), + new AccessIdResource("Mundhaar, Monika", "user192"), + new AccessIdResource("Munter, Monika", "user193"), + new AccessIdResource("Zwerg, Nat", "user194"), + new AccessIdResource("Elmine, Nick", "user195"), + new AccessIdResource("Thien, Niko", "user196"), + new AccessIdResource("Pferd, Nils", "user197"), + new AccessIdResource("Lerweise, Norma", "user198"), + new AccessIdResource("Motor, Otto", "user199"), + new AccessIdResource("Totol, Otto", "user200"), + new AccessIdResource("Nerr, Paula", "user201"), + new AccessIdResource("Imeter, Peer", "user202"), + new AccessIdResource("Serkatze, Peer", "user203"), + new AccessIdResource("Gogisch, Peter", "user204"), + new AccessIdResource("Silje, Peter", "user205"), + new AccessIdResource("Harmonie, Phil", "user206"), + new AccessIdResource("Ihnen, Philip", "user207"), + new AccessIdResource("Uto, Pia", "user208"), + new AccessIdResource("Kothek, Pina", "user209"), + new AccessIdResource("Zar, Pit", "user210"), + new AccessIdResource("Zeih, Polly", "user211"), + new AccessIdResource("Tswan, Puh", "user212"), + new AccessIdResource("Zufall, Rainer", "user213"), + new AccessIdResource("Lien, Rita", "user214"), + new AccessIdResource("Held, Roman", "user215"), + new AccessIdResource("Haar, Ross", "user216"), + new AccessIdResource("Dick, Roy", "user217"), + new AccessIdResource("Enplaner, Ruth", "user218"), + new AccessIdResource("Kommen, Ryan", "user219"), + new AccessIdResource("Philo, Sophie", "user220"), + new AccessIdResource("Matisier, Stig", "user221"), + new AccessIdResource("Loniki, Tessa", "user222"), + new AccessIdResource("Tralisch, Thea", "user223"), + new AccessIdResource("Logie, Theo", "user224"), + new AccessIdResource("Ister, Thorn", "user225"), + new AccessIdResource("Buktu, Tim", "user226"), + new AccessIdResource("Ate, Tom", "user227"), + new AccessIdResource("Pie, Udo", "user228"), + new AccessIdResource("Aloe, Vera", "user229"), + new AccessIdResource("Hausver, Walter", "user230"), + new AccessIdResource("Schuh, Wanda", "user231"), + new AccessIdResource("Rahm, Wolf", "user232"), new AccessIdResource("DevelopersGroup", "cn=DevelopersGroup,ou=groups,o=TaskanaTest"), new AccessIdResource("UsersGroup", "cn=UsersGroup,ou=groups,o=TaskanaTest"), new AccessIdResource("sachbearbeiter", "cn=sachbearbeiter,ou=groups,o=TaskanaTest"), diff --git a/rest/taskana-rest-spring-example/src/main/resources/TaskanaTest.ldif b/rest/taskana-rest-spring-example/src/main/resources/TaskanaTest.ldif index e0b17f427..54310d8c5 100644 --- a/rest/taskana-rest-spring-example/src/main/resources/TaskanaTest.ldif +++ b/rest/taskana-rest-spring-example/src/main/resources/TaskanaTest.ldif @@ -13,14 +13,14 @@ objectclass: organizationalUnit objectclass: top ou: people -dn: cn=Miguel Rojas,ou=people,o=TaskanaTest +dn: cn=Rojas Miguel Angel Martin,ou=people,o=TaskanaTest objectclass: inetOrgPerson objectclass: organizationalPerson objectclass: person objectclass: top -cn: Miguel Rojas -sn: Rojas -givenName: Miguel +cn: Rojas Miguel Angel Martin +sn: Martin +givenName: Rojas Miguel Angel uid: user_1_1 dn: cn=Marcel Lengl,ou=people,o=TaskanaTest @@ -91,7 +91,7 @@ objectclass: top cn: Elena Ferrante sn: Ferrante givenName: Elena -uid: Elena +uid: elena dn: cn=Simone Mueller,ou=people,o=TaskanaTest objectclass: inetOrgPerson @@ -101,7 +101,7 @@ objectclass: top cn: Simone Mueller sn: Mueller givenName: Simone -uid: Simone +uid: simone dn: cn=Aaron Sirup,ou=people,o=TaskanaTest objectclass: inetOrgPerson diff --git a/rest/taskana-rest-spring-example/src/main/resources/application.properties b/rest/taskana-rest-spring-example/src/main/resources/application.properties index e5938cfbf..6bfc09c4a 100644 --- a/rest/taskana-rest-spring-example/src/main/resources/application.properties +++ b/rest/taskana-rest-spring-example/src/main/resources/application.properties @@ -19,7 +19,10 @@ taskana.ldap.userSearchFilterName=objectclass taskana.ldap.userSearchFilterValue=person taskana.ldap.userFirstnameAttribute=givenName taskana.ldap.userLastnameAttribute=sn +taskana.ldap.userIdAttribute=uid taskana.ldap.groupSearchBase=ou=groups taskana.ldap.groupSearchFilterName=objectclass taskana.ldap.groupSearchFilterValue=groupOfUniqueNames taskana.ldap.groupNameAttribute=cn +taskana.ldap.minSearchForLength=3 +taskana.ldap.maxNumberOfReturnedAccessIds=50 diff --git a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/ldap/LdapTest.java b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/ldap/LdapTest.java index e50da27d2..a192d4362 100644 --- a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/ldap/LdapTest.java +++ b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/ldap/LdapTest.java @@ -12,6 +12,8 @@ import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.test.context.ContextConfiguration; 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.resource.AccessIdResource; @@ -24,10 +26,11 @@ public class LdapTest { private LdapClient ldapClient; @Test - public void testFindUsers() { + public void testFindUsers() throws InvalidArgumentException { if (ldapClient.useLdap()) { - List usersAndGroups = ldapClient.searchUsersAndGroups("ie"); - assertEquals(31, usersAndGroups.size()); + List usersAndGroups = ldapClient.searchUsersAndGroups("ser0"); + System.out.println("#### found " + LoggerUtils.listToString(usersAndGroups)); + assertEquals(50, usersAndGroups.size()); } } } diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapCache.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapCache.java index d0192ea28..80d3cf2db 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapCache.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapCache.java @@ -16,7 +16,9 @@ public interface LdapCache { * * @param searchFor * 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. */ - List findMatchingAccessId(String searchFor); + List findMatchingAccessId(String searchFor, int maxNumerOfReturnedAccessIds); } diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapClient.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapClient.java index 2ed678584..387c4de0a 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapClient.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapClient.java @@ -18,6 +18,7 @@ import org.springframework.ldap.filter.OrFilter; import org.springframework.ldap.filter.WhitespaceWildcardsFilter; import org.springframework.stereotype.Component; +import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.SystemException; import pro.taskana.impl.util.LoggerUtils; import pro.taskana.rest.resource.AccessIdResource; @@ -44,10 +45,13 @@ public class LdapClient { private String userSearchFilterValue; private String userFirstnameAttribute; private String userLastnameAttribute; + private String userIdAttribute; private String groupSearchBase; private String groupSearchFilterName; private String groupSearchFilterValue; private String groupNameAttribute; + private int minSearchForLength; + private int maxNumberOfReturnedAccessIds; private static final String CN = "cn"; private String message; @@ -55,18 +59,36 @@ public class LdapClient { @PostConstruct 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()) { userSearchBase = getUserSearchBase(); userSearchFilterName = getUserSearchFilterName(); userSearchFilterValue = getUserSearchFilterValue(); userFirstnameAttribute = getUserFirstnameAttribute(); userLastnameAttribute = getUserLastnameAttribute(); + userIdAttribute = getUserIdAttribute(); groupSearchBase = getGroupSearchBase(); groupSearchFilterName = getGroupSearchFilterName(); groupSearchFilterValue = getGroupSearchFilterValue(); 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) { message += " taskana.ldap.userSearchBase is not configured."; } @@ -82,6 +104,9 @@ public class LdapClient { if (userLastnameAttribute == null) { message += " taskana.ldap.userLastnameAttribute is not configured."; } + if (userIdAttribute == null) { + message += " taskana.ldap.userIdAttribute is not configured."; + } if (groupSearchBase == null) { message += " taskana.ldap.groupSearchBase is not configured."; } @@ -94,7 +119,7 @@ public class LdapClient { if (groupNameAttribute == null) { 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); throw new SystemException(message); } @@ -102,36 +127,54 @@ public class LdapClient { } } - public List searchUsersAndGroups(final String name) { + public List searchUsersAndGroups(final String name) throws InvalidArgumentException { LOGGER.debug("entry to searchUsersAndGroups(name = {})", name); if (!active) { LOGGER.error("LdapClient was called but is not active due to missing configuration: " + message); throw new SystemException( "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()); + } + List users = searchUsersByName(name); users.addAll(searchGroupsByName(name)); - LOGGER.debug("exit from searchUsersAndGroups(name = {}). Found {} users and groups.", name, users.size()); - return users; + users.sort((AccessIdResource a, AccessIdResource b) -> { + return a.getAccessId().compareToIgnoreCase(b.getAccessId()); + }); + + List 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 searchUsersByName(final String name) { + public List searchUsersByName(final String name) throws InvalidArgumentException { LOGGER.debug("entry to searchUsersByName(name = {}).", name); if (!active) { LOGGER.error("LdapClient was called but is not active due to missing configuration: " + message); throw new SystemException( "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(); andFilter.and(new EqualsFilter(getUserSearchFilterName(), getUserSearchFilterValue())); final OrFilter orFilter = new OrFilter(); - orFilter.or(new WhitespaceWildcardsFilter(CN, name)); orFilter.or(new WhitespaceWildcardsFilter(getUserFirstnameAttribute(), name)); orFilter.or(new WhitespaceWildcardsFilter(getUserLastnameAttribute(), name)); + orFilter.or(new WhitespaceWildcardsFilter(getUserIdAttribute(), name)); andFilter.and(orFilter); - String[] userAttributesToReturn = {getUserFirstnameAttribute(), getUserLastnameAttribute(), CN}; + String[] userAttributesToReturn = {getUserFirstnameAttribute(), getUserLastnameAttribute(), + getUserIdAttribute()}; try { final List accessIds = ldapTemplate.search(getUserSearchBase(), andFilter.encode(), @@ -145,13 +188,18 @@ public class LdapClient { } } - public List searchGroupsByName(final String name) { + public List searchGroupsByName(final String name) throws InvalidArgumentException { LOGGER.debug("entry to searchGroupsByName(name = {}).", name); if (!active) { LOGGER.error("LdapClient was called but is not active due to missing configuration: " + message); throw new SystemException( "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(); andFilter.and(new EqualsFilter(getGroupSearchFilterName(), getGroupSearchFilterValue())); final OrFilter orFilter = new OrFilter(); @@ -210,6 +258,10 @@ public class LdapClient { return env.getProperty("taskana.ldap.userLastnameAttribute"); } + public String getUserIdAttribute() { + return env.getProperty("taskana.ldap.userIdAttribute"); + } + public String getGroupSearchBase() { return env.getProperty("taskana.ldap.groupSearchBase"); } @@ -226,6 +278,22 @@ public class LdapClient { 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. */ @@ -234,7 +302,7 @@ public class LdapClient { @Override public AccessIdResource doMapFromContext(final DirContextOperations context) { final AccessIdResource accessId = new AccessIdResource(); - accessId.setAccessId(context.getNameInNamespace()); // fully qualified dn + accessId.setAccessId(context.getStringAttribute(getUserIdAttribute())); String firstName = context.getStringAttribute(getUserFirstnameAttribute()); String lastName = context.getStringAttribute(getUserLastnameAttribute()); accessId.setName(lastName + ", " + firstName); diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/AccessIdController.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/AccessIdController.java index 8b2cfca42..e8a0147f5 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/AccessIdController.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/AccessIdController.java @@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.ldap.LdapCache; import pro.taskana.ldap.LdapClient; import pro.taskana.rest.resource.AccessIdResource; @@ -34,11 +35,17 @@ public class AccessIdController { @GetMapping public ResponseEntity> 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()) { return new ResponseEntity<>(ldapClient.searchUsersAndGroups(searchFor), HttpStatus.OK); } else if (ldapCache != null) { - return new ResponseEntity<>(ldapCache.findMatchingAccessId(searchFor), HttpStatus.OK); + return new ResponseEntity<>( + ldapCache.findMatchingAccessId(searchFor, ldapClient.getMaxNumberOfReturnedAccessIds()), + HttpStatus.OK); } else { return new ResponseEntity<>(new ArrayList<>(), HttpStatus.NOT_FOUND); } diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/RestConfiguration.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/RestConfiguration.java index ec4e2fc0f..309ff7859 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/RestConfiguration.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/RestConfiguration.java @@ -57,7 +57,7 @@ public class RestConfiguration { contextSource.setUserDn(env.getRequiredProperty("taskana.ldap.bindDn")); contextSource.setPassword(env.getRequiredProperty("taskana.ldap.bindPassword")); } else { - contextSource.setUrl("ldap://com.dummy:9999"); + contextSource.setUrl("ldap://localhost:9999"); contextSource.setBase("o=taskana"); contextSource.setUserDn("user"); contextSource.setPassword("secret");