diff --git a/lib/taskana-core/src/main/resources/sql/taskana-schema.sql b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql index f162ba3ca..78c82c9ba 100644 --- a/lib/taskana-core/src/main/resources/sql/taskana-schema.sql +++ b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql @@ -3,7 +3,7 @@ CREATE TABLE TASKANA.TASKANA_SCHEMA_VERSION( VERSION VARCHAR(255) NOT NULL, PRIMARY KEY (ID) ); -INSERT INTO TASKANA.TASKANA_SCHEMA_VERSION VALUES ('1', '0.1.2'); +INSERT INTO TASKANA.TASKANA_SCHEMA_VERSION VALUES ('1', '0.1.5'); CREATE TABLE TASKANA.CLASSIFICATION( ID CHAR(40) NOT NULL, diff --git a/rest/taskana-rest-spring-example/pom.xml b/rest/taskana-rest-spring-example/pom.xml index 320ff9ebc..1661591b1 100644 --- a/rest/taskana-rest-spring-example/pom.xml +++ b/rest/taskana-rest-spring-example/pom.xml @@ -23,6 +23,7 @@ UTF-8 UTF-8 1.8 + 2.3.2.RELEASE @@ -47,6 +48,11 @@ org.springframework.plugin spring-plugin-core + + org.springframework.ldap + spring-ldap-core + ${spring.ldap.version} + com.h2database h2 @@ -68,6 +74,18 @@ spring-boot-starter-test test + + org.springframework.ldap + spring-ldap-test + ${spring.ldap.version} + test + + + commons-logging + commons-logging + + + 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 new file mode 100644 index 000000000..6588a0a67 --- /dev/null +++ b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/ldap/LdapCacheTestImpl.java @@ -0,0 +1,286 @@ +package pro.taskana.ldap; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import pro.taskana.rest.resource.AccessIdResource; + +/** + * Implementation of LdapCache used for Unit tests. + * + * @author bbr + */ +public class LdapCacheTestImpl implements LdapCache { + + @Override + public List findMatchingAccessId(String searchFor) { + List result = accessIds.stream() + .filter(t -> (t.getName().toLowerCase().contains(searchFor.toLowerCase()) + || t.getAccessId().toLowerCase().contains(searchFor.toLowerCase()))) + .collect(Collectors.toList()); + 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("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"), + new AccessIdResource("leben", "cn=leben,ou=groups,o=TaskanaTest"), + new AccessIdResource("chirurgie", "cn=chirurgie,ou=groups,o=TaskanaTest"), + new AccessIdResource("zahn", "cn=zahn,ou=groups,o=TaskanaTest"), + new AccessIdResource("knie", "cn=knie,ou=groups,o=TaskanaTest"), + new AccessIdResource("schaden", "cn=schaden,ou=groups,o=TaskanaTest"), + new AccessIdResource("kapital", "cn=kapital,ou=groups,o=TaskanaTest"), + new AccessIdResource("ausland", "cn=ausland,ou=groups,o=TaskanaTest"), + new AccessIdResource("teamlead", "cn=teamlead,ou=groups,o=TaskanaTest"), + new AccessIdResource("gesundheit", "cn=gesundheit,ou=groups,o=TaskanaTest"), + new AccessIdResource("vip", "cn=vip,ou=groups,o=TaskanaTest"), + new AccessIdResource("manager", "cn=manager,ou=groups,o=TaskanaTest"), + new AccessIdResource("kfz", "cn=kfz,ou=groups,o=TaskanaTest"), + new AccessIdResource("haftpflicht", "cn=haftpflicht,ou=groups,o=TaskanaTest"), + new AccessIdResource("bauspar", "cn=bauspar,ou=groups,o=TaskanaTest"))); + +} diff --git a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/ExampleRestApplication.java b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/ExampleRestApplication.java index 3069d59ca..16a23f943 100644 --- a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/ExampleRestApplication.java +++ b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/ExampleRestApplication.java @@ -2,8 +2,10 @@ package pro.taskana.rest; import java.sql.SQLException; +import javax.annotation.PostConstruct; import javax.sql.DataSource; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; @@ -16,6 +18,8 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.PlatformTransactionManager; +import pro.taskana.ldap.LdapCacheTestImpl; +import pro.taskana.ldap.LdapClient; import pro.taskana.sampledata.SampleDataGenerator; /** @@ -26,6 +30,9 @@ import pro.taskana.sampledata.SampleDataGenerator; @Import(RestConfiguration.class) public class ExampleRestApplication { + @Autowired + private LdapClient ldapClient; + public static void main(String[] args) { SpringApplication.run(ExampleRestApplication.class, args); } @@ -56,4 +63,11 @@ public class ExampleRestApplication { sampleDataGenerator.generateSampleData(); return sampleDataGenerator; } + + @PostConstruct + private void init() { + if (!ldapClient.useLdap()) { + AccessIdController.setLdapCache(new LdapCacheTestImpl()); + } + } } diff --git a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/sampledata/SampleDataGenerator.java b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/sampledata/SampleDataGenerator.java index 7b268c7e0..01585afbb 100644 --- a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/sampledata/SampleDataGenerator.java +++ b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/sampledata/SampleDataGenerator.java @@ -21,6 +21,7 @@ public class SampleDataGenerator { private static final Logger LOGGER = LoggerFactory.getLogger(SampleDataGenerator.class); private static final String SQL = "/sql"; private static final String TEST_DATA = "/sample-data"; + private static final String CLEAR = SQL + TEST_DATA + "/clear-db.sql"; private static final String TASK = SQL + TEST_DATA + "/task.sql"; private static final String WORKBASKET = SQL + TEST_DATA + "/workbasket.sql"; private static final String DISTRIBUTION_TARGETS = SQL + TEST_DATA + "/distribution-targets.sql"; @@ -42,6 +43,13 @@ public class SampleDataGenerator { StringWriter errorWriter = new StringWriter(); PrintWriter errorLogWriter = new PrintWriter(errorWriter); + try { + runner.setStopOnError(false); + runner.runScript(new BufferedReader( + new InputStreamReader(this.getClass().getResourceAsStream(CLEAR), StandardCharsets.UTF_8))); + } catch (Exception e) { + LOGGER.error("caught Exception {}", e); + } runner.setStopOnError(true); runner.setLogWriter(logWriter); diff --git a/rest/taskana-rest-spring-example/src/main/resources/TaskanaTest.ldif b/rest/taskana-rest-spring-example/src/main/resources/TaskanaTest.ldif new file mode 100644 index 000000000..e0b17f427 --- /dev/null +++ b/rest/taskana-rest-spring-example/src/main/resources/TaskanaTest.ldif @@ -0,0 +1,2840 @@ +version: 1 + +# dn: o=TaskanaTest +# objectclass: extensibleObject +# objectclass: top +# objectclass: domain +# o: sevenSeas + +########### Users ############################# + +dn: ou=people,o=TaskanaTest +objectclass: organizationalUnit +objectclass: top +ou: people + +dn: cn=Miguel Rojas,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Miguel Rojas +sn: Rojas +givenName: Miguel +uid: user_1_1 + +dn: cn=Marcel Lengl,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Marcel Lengl +sn: Lengl +givenName: Marcel +uid: user_1_2 + +dn: cn=Mustapha Zorgati,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mustapha Zorgati +sn: Zorgati +givenName: Mustapha +uid: user_2_1 + +dn: cn=Bernd Breier,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bernd Breier +sn: Breier +givenName: Bernd +uid: user_2_2 + +dn: cn=Dominik Meyer,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Dominik Meyer +sn: Meyer +givenName: Dominik +uid: teamlead_1 + +dn: cn=Holger Hagen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Holger Hagen +sn: Hagen +givenName: Holger +uid: teamlead_2 + +dn: cn=Maximilian Behrendt,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Maximilian Behrendt +sn: Behrendt +givenName: Maximilian +uid: max + +dn: cn=Elena Ferrante,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Elena Ferrante +sn: Ferrante +givenName: Elena +uid: Elena + +dn: cn=Simone Mueller,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Simone Mueller +sn: Mueller +givenName: Simone +uid: Simone + +dn: cn=Aaron Sirup,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Aaron Sirup +givenName: Aaron +sn: Sirup +uid: user001 + +dn: cn=Ada Kahn,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ada Kahn +givenName: Ada +sn: Kahn +uid: user002 + +dn: cn=Ada Lass,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ada Lass +givenName: Ada +sn: Lass +uid: user003 + +dn: cn=Addi Tion,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Addi Tion +givenName: Addi +sn: Tion +uid: user004 + +dn: cn=Adi Lette,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Adi Lette +givenName: Adi +sn: Lette +uid: user005 + +dn: cn=Alter Native,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Alter Native +givenName: Alter +sn: Native +uid: user006 + +dn: cn=Albert Herum,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Albert Herum +givenName: Albert +sn: Herum +uid: user007 + +dn: cn=Ali Bert,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ali Bert +givenName: Ali +sn: Bert +uid: user008 + +dn: cn=Ali Mente,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ali Mente +givenName: Ali +sn: Mente +uid: user009 + +dn: cn=Alma Mater,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Alma Mater +givenName: Alma +sn: Mater +uid: user010 + +dn: cn=Alma Nach,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Alma Nach +givenName: Alma +sn: Nach +uid: user011 + +dn: cn=Anders Gehzauch,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anders Gehzauch +givenName: Anders +sn: Gehzauch +uid: user012 + +dn: cn=Andi Theke,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Andi Theke +givenName: Andi +sn: Theke +uid: user013 + +dn: cn=Andreas Kreuz,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Andreas Kreuz +givenName: Andreas +sn: Kreuz +uid: user014 + +dn: cn=Anka Kette,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anka Kette +givenName: Anka +sn: Kette +uid: user015 + +dn: cn=Anka Tiefsee,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anka Tiefsee +givenName: Anka +sn: Tiefsee +uid: user016 + +dn: cn=Anke Fielmalz,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anke Fielmalz +givenName: Anke +sn: Fielmalz +uid: user017 + +dn: cn=Ann Fassen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ann Fassen +givenName: Ann +sn: Fassen +uid: user018 + +dn: cn=Ann Probe,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ann Probe +givenName: Ann +sn: Probe +uid: user019 + +dn: cn=Anna Bolika,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anna Bolika +givenName: Anna +sn: Bolika +uid: user020 + +dn: cn=Anna Ecke,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anna Ecke +givenName: Anna +sn: Ecke +uid: user021 + +dn: cn=Anna Hosi,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anna Hosi +givenName: Anna +sn: Hosi +uid: user022 + +dn: cn=Anna Kronis-Tisch,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anna Kronis-Tisch +givenName: Anna +sn: Kronis-Tisch +uid: user023 + +dn: cn=Anna Logie,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anna Logie +givenName: Anna +sn: Logie +uid: user024 + +dn: cn=Anna Luehse,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anna Luehse +givenName: Anna +sn: Luehse +uid: user025 + +dn: cn=Anna Nass,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anna Nass +givenName: Anna +sn: Nass +uid: user026 + +dn: cn=Anna Thalb,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anna Thalb +givenName: Anna +sn: Thalb +uid: user027 + +dn: cn=Anna Tomie,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anna Tomie +givenName: Anna +sn: Tomie +uid: user028 + +dn: cn=Anne Donnich,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anne Donnich +givenName: Anne +sn: Donnich +uid: user029 + +dn: cn=Anne Kaffek,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anne Kaffek +givenName: Anne +sn: Kaffek +uid: user030 + +dn: cn=Anne Thek,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anne Thek +givenName: Anne +sn: Thek +uid: user031 + +dn: cn=Anni Matoer,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Anni Matoer +givenName: Anni +sn: Matoer +uid: user032 + +dn: cn=Ansgar Ragentor,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ansgar Ragentor +givenName: Ansgar +sn: Ragentor +uid: user033 + +dn: cn=Ari Stoteles,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ari Stoteles +givenName: Ari +sn: Stoteles +uid: user034 + +dn: cn=Ari Thmetik,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ari Thmetik +givenName: Ari +sn: Thmetik +uid: user035 + +dn: cn=Arno Nuehm,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Arno Nuehm +givenName: Arno +sn: Nuehm +uid: user036 + +dn: cn=Artie Schocke,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Artie Schocke +givenName: Artie +sn: Schocke +uid: user037 + +dn: cn=Bart Stoppel,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bart Stoppel +givenName: Bart +sn: Stoppel +uid: user038 + +dn: cn=Bea Beitung,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bea Beitung +givenName: Bea +sn: Beitung +uid: user039 + +dn: cn=Bea Ildich,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bea Ildich +givenName: Bea +sn: Ildich +uid: user040 + +dn: cn=Bella Vista,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bella Vista +givenName: Bella +sn: Vista +uid: user041 + +dn: cn=Ben Utzer,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ben Utzer +givenName: Ben +sn: Utzer +uid: user042 + +dn: cn=Ben Zien,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ben Zien +givenName: Ben +sn: Zien +uid: user043 + +dn: cn=Bernd Stein,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bernd Stein +givenName: Bernd +sn: Stein +uid: user044 + +dn: cn=Bill Deramen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bill Deramen +givenName: Bill +sn: Deramen +uid: user045 + +dn: cn=Bine Honig,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bine Honig +givenName: Bine +sn: Honig +uid: user046 + +dn: cn=Bo Densatz,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bo Densatz +givenName: Bo +sn: Densatz +uid: user047 + +dn: cn=Bo Densee,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bo Densee +givenName: Bo +sn: Densee +uid: user048 + +dn: cn=Bo Lerwagen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bo Lerwagen +givenName: Bo +sn: Lerwagen +uid: user049 + +dn: cn=Bob Tail,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bob Tail +givenName: Bob +sn: Tail +uid: user050 + +dn: cn=Bruce Ketta,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bruce Ketta +givenName: Bruce +sn: Ketta +uid: user051 + +dn: cn=Bud Terrie,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Bud Terrie +givenName: Bud +sn: Terrie +uid: user052 + +dn: cn=Cara Biener-Haken,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Cara Biener-Haken +givenName: Cara +sn: Biener-Haken +uid: user053 + +dn: cn=Caro Ass,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Caro Ass +givenName: Caro +sn: Ass +uid: user054 + +dn: cn=Caro Kaffee,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Caro Kaffee +givenName: Caro +sn: Kaffee +uid: user055 + +dn: cn=Caro Linger,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Caro Linger +givenName: Caro +sn: Linger +uid: user056 + +dn: cn=Caro tenSaft,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Caro tenSaft +givenName: Caro +sn: tenSaft +uid: user057 + +dn: cn=Chris Antheme,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Chris Antheme +givenName: Chris +sn: Antheme +uid: user058 + +dn: cn=Chris Baum,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Chris Baum +givenName: Chris +sn: Baum +uid: user059 + +dn: cn=Chris Tall,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Chris Tall +givenName: Chris +sn: Tall +uid: user060 + +dn: cn=Claas Reiniger,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Claas Reiniger +givenName: Claas +sn: Reiniger +uid: user061 + +dn: cn=Claire Grube,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Claire Grube +givenName: Claire +sn: Grube +uid: user062 + +dn: cn=Clara Fall,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Clara Fall +givenName: Clara +sn: Fall +uid: user063 + +dn: cn=Clara Korn,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Clara Korn +givenName: Clara +sn: Korn +uid: user064 + +dn: cn=Cora Lenriff,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Cora Lenriff +givenName: Cora +sn: Lenriff +uid: user065 + +dn: cn=Cora Schiert,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Cora Schiert +givenName: Cora +sn: Schiert +uid: user066 + +dn: cn=Cord Hose,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Cord Hose +givenName: Cord +sn: Hose +uid: user067 + +dn: cn=Cord Onbleu,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Cord Onbleu +givenName: Cord +sn: Onbleu +uid: user068 + +dn: cn=Damon Umkleide,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Damon Umkleide +givenName: Damon +sn: Umkleide +uid: user069 + +dn: cn=Dean Affier,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Dean Affier +givenName: Dean +sn: Affier +uid: user070 + +dn: cn=Dean Orm,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Dean Orm +givenName: Dean +sn: Orm +uid: user071 + +dn: cn=Dennis Platz,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Dennis Platz +givenName: Dennis +sn: Platz +uid: user072 + +dn: cn=Dick Milch,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Dick Milch +givenName: Dick +sn: Milch +uid: user073 + +dn: cn=Dina Mow,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Dina Mow +givenName: Dina +sn: Mow +uid: user074 + +dn: cn=Donna Keil,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Donna Keil +givenName: Donna +sn: Keil +uid: user075 + +dn: cn=Donna Littchen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Donna Littchen +givenName: Donna +sn: Littchen +uid: user076 + +dn: cn=Donna Wetter,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Donna Wetter +givenName: Donna +sn: Wetter +uid: user077 + +dn: cn=Ed Was,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ed Was +givenName: Ed +sn: Was +uid: user078 + +dn: cn=Ede Khar,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ede Khar +givenName: Ede +sn: Khar +uid: user079 + +dn: cn=Ella Nut,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ella Nut +givenName: Ella +sn: Nut +uid: user080 + +dn: cn=Ella Stisch,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ella Stisch +givenName: Ella +sn: Stisch +uid: user081 + +dn: cn=Emma Diel,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Emma Diel +givenName: Emma +sn: Diel +uid: user082 + +dn: cn=Emma Herdamit,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Emma Herdamit +givenName: Emma +sn: Herdamit +uid: user083 + +dn: cn=Emma Mitter-Uhe,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Emma Mitter-Uhe +givenName: Emma +sn: Mitter-Uhe +uid: user084 + +dn: cn=Erich Tatt,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Erich Tatt +givenName: Erich +sn: Tatt +uid: user085 + +dn: cn=Ernie Drigend,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ernie Drigend +givenName: Ernie +sn: Drigend +uid: user086 + +dn: cn=Esther Poly,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Esther Poly +givenName: Esther +sn: Poly +uid: user087 + +dn: cn=Eugen Trautz,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Eugen Trautz +givenName: Eugen +sn: Trautz +uid: user088 + +dn: cn=Eva Quiert,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Eva Quiert +givenName: Eva +sn: Quiert +uid: user089 + +dn: cn=Fatma Inurlaub,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Fatma Inurlaub +givenName: Fatma +sn: Inurlaub +uid: user090 + +dn: cn=Finn Land,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Finn Land +givenName: Finn +sn: Land +uid: user091 + +dn: cn=Finn Sternis,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Finn Sternis +givenName: Finn +sn: Sternis +uid: user092 + +dn: cn=Frank Furt,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Frank Furt +givenName: Frank +sn: Furt +uid: user093 + +dn: cn=Frank Reich,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Frank Reich +givenName: Frank +sn: Reich +uid: user094 + +dn: cn=Franz Iskaner,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Franz Iskaner +givenName: Franz +sn: Iskaner +uid: user095 + +dn: cn=Franziska Nerr,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Franziska Nerr +givenName: Franziska +sn: Nerr +uid: user096 + +dn: cn=Friedrich Zafen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Friedrich Zafen +givenName: Friedrich +sn: Zafen +uid: user097 + +dn: cn=Fritz Pomm,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Fritz Pomm +givenName: Fritz +sn: Pomm +uid: user098 + +dn: cn=Gera deWegs,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Gera deWegs +givenName: Gera +sn: deWegs +uid: user099 + +dn: cn=Gitta Staebe,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Gitta Staebe +givenName: Gitta +sn: Staebe +uid: user100 + +dn: cn=Glenn Zend,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Glenn Zend +givenName: Glenn +sn: Zend +uid: user101 + +dn: cn=Grete Fisch,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Grete Fisch +givenName: Grete +sn: Fisch +uid: user102 + +dn: cn=Gus Zucker,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Gus Zucker +givenName: Gus +sn: Zucker +uid: user103 + +dn: cn=Hanni Muhn,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Hanni Muhn +givenName: Hanni +sn: Muhn +uid: user104 + +dn: cn=Hanno Fermesse,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Hanno Fermesse +givenName: Hanno +sn: Fermesse +uid: user105 + +dn: cn=Hans Aplast,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Hans Aplast +givenName: Hans +sn: Aplast +uid: user106 + +dn: cn=Hans Eart,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Hans Eart +givenName: Hans +sn: Eart +uid: user107 + +dn: cn=Hardy Back,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Hardy Back +givenName: Hardy +sn: Back +uid: user108 + +dn: cn=Harry Beau,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Harry Beau +givenName: Harry +sn: Beau +uid: user110 + +dn: cn=Heide Kraut,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Heide Kraut +givenName: Heide +sn: Kraut +uid: user111 + +dn: cn=Heide Witzka,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Heide Witzka +givenName: Heide +sn: Witzka +uid: user112 + +dn: cn=Hein Buchen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Hein Buchen +givenName: Hein +sn: Buchen +uid: user113 + +dn: cn=Hein Lichkeit,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Hein Lichkeit +givenName: Hein +sn: Lichkeit +uid: user114 + +dn: cn=Hein Suchung,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Hein Suchung +givenName: Hein +sn: Suchung +uid: user115 + +dn: cn=Heinz Ellmann,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Heinz Ellmann +givenName: Heinz +sn: Ellmann +uid: user116 + +dn: cn=Heinz Ketchup,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Heinz Ketchup +givenName: Heinz +sn: Ketchup +uid: user117 + +dn: cn=Hilde Zeim,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Hilde Zeim +givenName: Hilde +sn: Zeim +uid: user118 + +dn: cn=Immo Bilien,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Immo Bilien +givenName: Immo +sn: Bilien +uid: user119 + +dn: cn=Inge Her,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Inge Her +givenName: Inge +sn: Her +uid: user120 + +dn: cn=Inge Wahrsam,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Inge Wahrsam +givenName: Inge +sn: Wahrsam +uid: user121 + +dn: cn=Ingo Flamm,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ingo Flamm +givenName: Ingo +sn: Flamm +uid: user122 + +dn: cn=Ingrid Enzien,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ingrid Enzien +givenName: Ingrid +sn: Enzien +uid: user123 + +dn: cn=Inken Rohsch,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Inken Rohsch +givenName: Inken +sn: Rohsch +uid: user124 + +dn: cn=Insa Ihr,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Insa Ihr +givenName: Insa +sn: Ihr +uid: user125 + +dn: cn=Iska Nerda,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Iska Nerda +givenName: Iska +sn: Nerda +uid: user126 + +dn: cn=Jens Eitz,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Jens Eitz +givenName: Jens +sn: Eitz +uid: user127 + +dn: cn=Jim Nastik,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Jim Nastik +givenName: Jim +sn: Nastik +uid: user128 + +dn: cn=Jo Gurt,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Jo Gurt +givenName: Jo +sn: Gurt +uid: user129 + +dn: cn=Jo Kurrth,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Jo Kurrth +givenName: Jo +sn: Kurrth +uid: user130 + +dn: cn=Joe Kolade,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Joe Kolade +givenName: Joe +sn: Kolade +uid: user131 + +dn: cn=Johann Iter,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Johann Iter +givenName: Johann +sn: Iter +uid: user132 + +dn: cn=Joyce Tick,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Joyce Tick +givenName: Joyce +sn: Tick +uid: user133 + +dn: cn=Justin Case,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Justin Case +givenName: Justin +sn: Case +uid: user134 + +dn: cn=Justin Time,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Justin Time +givenName: Justin +sn: Time +uid: user135 + +dn: cn=Jutta Komp,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Jutta Komp +givenName: Jutta +sn: Komp +uid: user136 + +dn: cn=Kai Mauer,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Kai Mauer +givenName: Kai +sn: Mauer +uid: user137 + +dn: cn=Kai Pirinja,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Kai Pirinja +givenName: Kai +sn: Pirinja +uid: user138 + +dn: cn=Kai Serpfalz,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Kai Serpfalz +givenName: Kai +sn: Serpfalz +uid: user139 + +dn: cn=Karl Auer,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Karl Auer +givenName: Karl +sn: Auer +uid: user140 + +dn: cn=Karl Ielauge,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Karl Ielauge +givenName: Karl +sn: Ielauge +uid: user141 + +dn: cn=Karl Ifornjen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Karl Ifornjen +givenName: Karl +sn: Ifornjen +uid: user142 + +dn: cn=Karl Radi,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Karl Radi +givenName: Karl +sn: Radi +uid: user143 + +dn: cn=Karl Verti,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Karl Verti +givenName: Karl +sn: Verti +uid: user144 + +dn: cn=Karo Sery,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Karo Sery +givenName: Karo +sn: Sery +uid: user145 + +dn: cn=Katha Lisator,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Katha Lisator +givenName: Katha +sn: Lisator +uid: user146 + +dn: cn=Kati Flo,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Kati Flo +givenName: Kati +sn: Flo +uid: user147 + +dn: cn=Knut Schenn,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Knut Schenn +givenName: Knut +sn: Schenn +uid: user148 + +dn: cn=Kurt Achse,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Kurt Achse +givenName: Kurt +sn: Achse +uid: user149 + +dn: cn=Kurt Zepause,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Kurt Zepause +givenName: Kurt +sn: Zepause +uid: user150 + +dn: cn=Kurt Zerr,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Kurt Zerr +givenName: Kurt +sn: Zerr +uid: user151 + +dn: cn=Lasse Reden,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Lasse Reden +givenName: Lasse +sn: Reden +uid: user152 + +dn: cn=Lee Metten,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Lee Metten +givenName: Lee +sn: Metten +uid: user153 + +dn: cn=Lene Arm,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Lene Arm +givenName: Lene +sn: Arm +uid: user154 + +dn: cn=Linnea Thur,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Linnea Thur +givenName: Linnea +sn: Thur +uid: user155 + +dn: cn=Lisa Bonn,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Lisa Bonn +givenName: Lisa +sn: Bonn +uid: user156 + +dn: cn=Luc Sembourg,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Luc Sembourg +givenName: Luc +sn: Sembourg +uid: user157 + +dn: cn=Lucky Rung,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Lucky Rung +givenName: Lucky +sn: Rung +uid: user158 + +dn: cn=Ludwig Zafen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ludwig Zafen +givenName: Ludwig +sn: Zafen +uid: user159 + +dn: cn=Lukas Hauden,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Lukas Hauden +givenName: Lukas +sn: Hauden +uid: user160 + +dn: cn=Lutz Hose,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Lutz Hose +givenName: Lutz +sn: Hose +uid: user161 + +dn: cn=Lutz Tablette,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Lutz Tablette +givenName: Lutz +sn: Tablette +uid: user162 + +dn: cn=Luzie Fehr,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Luzie Fehr +givenName: Luzie +sn: Fehr +uid: user163 + +dn: cn=Magda Nalyse,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Magda Nalyse +givenName: Magda +sn: Nalyse +uid: user164 + +dn: cn=Maik Ehfer,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Maik Ehfer +givenName: Maik +sn: Ehfer +uid: user165 + +dn: cn=Malte Sehr,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Malte Sehr +givenName: Malte +sn: Sehr +uid: user166 + +dn: cn=Mara Thon,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mara Thon +givenName: Mara +sn: Thon +uid: user167 + +dn: cn=Marga Quark,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Marga Quark +givenName: Marga +sn: Quark +uid: user168 + +dn: cn=Marie Nade,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Marie Nade +givenName: Marie +sn: Nade +uid: user169 + +dn: cn=Marie Niert,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Marie Niert +givenName: Marie +sn: Niert +uid: user170 + +dn: cn=Mario Neese,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mario Neese +givenName: Mario +sn: Neese +uid: user171 + +dn: cn=Marion Nette,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Marion Nette +givenName: Marion +sn: Nette +uid: user172 + +dn: cn=Mark Nesium,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mark Nesium +givenName: Mark +sn: Nesium +uid: user173 + +dn: cn=Mark Thalle,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mark Thalle +givenName: Mark +sn: Thalle +uid: user174 + +dn: cn=Marle Diven,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Marle Diven +givenName: Marle +sn: Diven +uid: user175 + +dn: cn=Marle Fitz,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Marle Fitz +givenName: Marle +sn: Fitz +uid: user176 + +dn: cn=Marta Pfahl,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Marta Pfahl +givenName: Marta +sn: Pfahl +uid: user177 + +dn: cn=Martin Zorn,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Martin Zorn +givenName: Martin +sn: Zorn +uid: user178 + +dn: cn=Mary Krissmes,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mary Krissmes +givenName: Mary +sn: Krissmes +uid: user179 + +dn: cn=Matt Jess,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Matt Jess +givenName: Matt +sn: Jess +uid: user180 + +dn: cn=Max Strammer,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Max Strammer +givenName: Max +sn: Strammer +uid: user181 + +dn: cn=Maxi Mumm,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Maxi Mumm +givenName: Maxi +sn: Mumm +uid: user182 + +dn: cn=Meta Morphose,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Meta Morphose +givenName: Meta +sn: Morphose +uid: user183 + +dn: cn=Mia Uh,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mia Uh +givenName: Mia +sn: Uh +uid: user184 + +dn: cn=Mike Rofon,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mike Rofon +givenName: Mike +sn: Rofon +uid: user185 + +dn: cn=Mike Rosoft,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mike Rosoft +givenName: Mike +sn: Rosoft +uid: user186 + +dn: cn=Milli Liter,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Milli Liter +givenName: Milli +sn: Liter +uid: user187 + +dn: cn=Mirko Welle,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mirko Welle +givenName: Mirko +sn: Welle +uid: user189 + +dn: cn=Mo Thorat,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Mo Thorat +givenName: Mo +sn: Thorat +uid: user190 + +dn: cn=Moni Thor,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Moni Thor +givenName: Moni +sn: Thor +uid: user191 + +dn: cn=Monika Kinolta,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Monika Kinolta +givenName: Monika +sn: Kinolta +uid: user192 + +dn: cn=Monika Mundhaar,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Monika Mundhaar +givenName: Monika +sn: Mundhaar +uid: user193 + +dn: cn=Monika Munter,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Monika Munter +givenName: Monika +sn: Munter +uid: user194 + +dn: cn=Nat Zwerg,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Nat Zwerg +givenName: Nat +sn: Zwerg +uid: user195 + +dn: cn=Nick Elmine,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Nick Elmine +givenName: Nick +sn: Elmine +uid: user196 + +dn: cn=Niko Thien,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Niko Thien +givenName: Niko +sn: Thien +uid: user197 + +dn: cn=Nils Pferd,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Nils Pferd +givenName: Nils +sn: Pferd +uid: user198 + +dn: cn=Norma Lerweise,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Norma Lerweise +givenName: Norma +sn: Lerweise +uid: user199 + +dn: cn=Otto Motor,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Otto Motor +givenName: Otto +sn: Motor +uid: user200 + +dn: cn=Otto Totol,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Otto Totol +givenName: Otto +sn: Totol +uid: user202 + +dn: cn=Paul Ahner,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Paul Ahner +givenName: Paul +sn: Ahner +uid: user203 + +dn: cn=Paula Nerr,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Paula Nerr +givenName: Paula +sn: Nerr +uid: user204 + +dn: cn=Pedro Leum,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Pedro Leum +givenName: Pedro +sn: Leum +uid: user205 + +dn: cn=Peer Imeter,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Peer Imeter +givenName: Peer +sn: Imeter +uid: user206 + +dn: cn=Peer Manent,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Peer Manent +givenName: Peer +sn: Manent +uid: user207 + +dn: cn=Peer Serkatze,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Peer Serkatze +givenName: Peer +sn: Serkatze +uid: user208 + +dn: cn=Peer Spektive,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Peer Spektive +givenName: Peer +sn: Spektive +uid: user209 + +dn: cn=Peter Gogisch,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Peter Gogisch +givenName: Peter +sn: Gogisch +uid: user210 + +dn: cn=Peter Hacke,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Peter Hacke +givenName: Peter +sn: Hacke +uid: user211 + +dn: cn=Peter Silje,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Peter Silje +givenName: Peter +sn: Silje +uid: user212 + +dn: cn=Peter Wagen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Peter Wagen +givenName: Peter +sn: Wagen +uid: user213 + +dn: cn=Phil Harmonie,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Phil Harmonie +givenName: Phil +sn: Harmonie +uid: user214 + +dn: cn=Phil Ologie,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Phil Ologie +givenName: Phil +sn: Ologie +uid: user215 + +dn: cn=Philip Ihnen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Philip Ihnen +givenName: Philip +sn: Ihnen +uid: user216 + +dn: cn=Pia Nist,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Pia Nist +givenName: Pia +sn: Nist +uid: user217 + +dn: cn=Pia Uto,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Pia Uto +givenName: Pia +sn: Uto +uid: user218 + +dn: cn=Pina Colada,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Pina Colada +givenName: Pina +sn: Colada +uid: user219 + +dn: cn=Pina Kothek,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Pina Kothek +givenName: Pina +sn: Kothek +uid: user220 + +dn: cn=Pit Toresk,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Pit Toresk +givenName: Pit +sn: Toresk +uid: user221 + +dn: cn=Pit Zar,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Pit Zar +givenName: Pit +sn: Zar +uid: user222 + +dn: cn=Polly Carbonat,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Polly Carbonat +givenName: Polly +sn: Carbonat +uid: user223 + +dn: cn=Polly Zeih,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Polly Zeih +givenName: Polly +sn: Zeih +uid: user224 + +dn: cn=Prima Vera,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Prima Vera +givenName: Prima +sn: Vera +uid: user225 + +dn: cn=Puh Tswan,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Puh Tswan +givenName: Puh +sn: Tswan +uid: user226 + +dn: cn=Qu Chen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Qu Chen +givenName: Qu +sn: Chen +uid: user227 + +dn: cn=Rainer Zufall,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Rainer Zufall +givenName: Rainer +sn: Zufall +uid: user228 + +dn: cn=Reni Tenz,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Reni Tenz +givenName: Reni +sn: Tenz +uid: user229 + +dn: cn=Rita Lien,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Rita Lien +givenName: Rita +sn: Lien +uid: user230 + +dn: cn=Rita Sport,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Rita Sport +givenName: Rita +sn: Sport +uid: user231 + +dn: cn=Roman Held,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Roman Held +givenName: Roman +sn: Held +uid: user232 + +dn: cn=Rosi Nenbrot,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Rosi Nenbrot +givenName: Rosi +sn: Nenbrot +uid: user233 + +dn: cn=Ross Haar,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ross Haar +givenName: Ross +sn: Haar +uid: user234 + +dn: cn=Roy Baer,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Roy Baer +givenName: Roy +sn: Baer +uid: user235 + +dn: cn=Roy Dick,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Roy Dick +givenName: Roy +sn: Dick +uid: user236 + +dn: cn=Rudi Mente,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Rudi Mente +givenName: Rudi +sn: Mente +uid: user238 + +dn: cn=Ruth Enplaner,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ruth Enplaner +givenName: Ruth +sn: Enplaner +uid: user239 + +dn: cn=Ruth Print,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ruth Print +givenName: Ruth +sn: Print +uid: user240 + +dn: cn=Ryan Kommen,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ryan Kommen +givenName: Ryan +sn: Kommen +uid: user241 + +dn: cn=Sam Pler,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Sam Pler +givenName: Sam +sn: Pler +uid: user242 + +dn: cn=Sophie Philo,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Sophie Philo +givenName: Sophie +sn: Philo +uid: user243 + +dn: cn=Steve Mutter,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Steve Mutter +givenName: Steve +sn: Mutter +uid: user244 + +dn: cn=Stig Matisier,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Stig Matisier +givenName: Stig +sn: Matisier +uid: user245 + +dn: cn=Svea Transpor,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Svea Transpor +givenName: Svea +sn: Transpor +uid: user246 + +dn: cn=Tessa Loniki,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Tessa Loniki +givenName: Tessa +sn: Loniki +uid: user247 + +dn: cn=Thea Tralisch,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Thea Tralisch +givenName: Thea +sn: Tralisch +uid: user248 + +dn: cn=Theo Logie,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Theo Logie +givenName: Theo +sn: Logie +uid: user249 + +dn: cn=Theo Retisch,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Theo Retisch +givenName: Theo +sn: Retisch +uid: user250 + +dn: cn=Thorn Ister,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Thorn Ister +givenName: Thorn +sn: Ister +uid: user251 + +dn: cn=Till Sitter,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Till Sitter +givenName: Till +sn: Sitter +uid: user252 + +dn: cn=Tim Buktu,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Tim Buktu +givenName: Tim +sn: Buktu +uid: user253 + +dn: cn=Timo Beil,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Timo Beil +givenName: Timo +sn: Beil +uid: user254 + +dn: cn=Tom Ate,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Tom Ate +givenName: Tom +sn: Ate +uid: user255 + +dn: cn=Toni Riga,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Toni Riga +givenName: Toni +sn: Riga +uid: user256 + +dn: cn=Udo Pie,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Udo Pie +givenName: Udo +sn: Pie +uid: user257 + +dn: cn=Ute Russ,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Ute Russ +givenName: Ute +sn: Russ +uid: user258 + +dn: cn=Vera Aloe,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Vera Aloe +givenName: Vera +sn: Aloe +uid: user261 + +dn: cn=Vera Breden,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Vera Breden +givenName: Vera +sn: Breden +uid: user262 + +dn: cn=Walter Hausver,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Walter Hausver +givenName: Walter +sn: Hausver +uid: user263 + +dn: cn=Wanda Lismus,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Wanda Lismus +givenName: Wanda +sn: Lismus +uid: user264 + +dn: cn=Wanda Schuh,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Wanda Schuh +givenName: Wanda +sn: Schuh +uid: user265 + +dn: cn=Wim Pell,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Wim Pell +givenName: Wim +sn: Pell +uid: user266 + +dn: cn=Wolf Rahm,ou=people,o=TaskanaTest +objectclass: inetOrgPerson +objectclass: organizationalPerson +objectclass: person +objectclass: top +cn: Wolf Rahm +givenName: Wolf +sn: Rahm +uid: user267 + +######################### grops ########################## +dn: ou=groups,o=TaskanaTest +objectclass: organizationalUnit +objectclass: top +ou: groups + +dn: cn=DevelopersGroup,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: DevelopersGroup +ou: group_1 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=UsersGroup,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: UsersGroup +ou: group_2 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=Sachbearbeiter,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: Sachbearbeiter +ou: group01 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=leben,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: leben +ou: group02 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=chirurgie,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: chirurgie +ou: group03 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=zahn,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: zahn +ou: group04 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=knie,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: knie +ou: group05 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=schaden,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: schaden +ou: group06 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=kapital,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: kapital +ou: group07 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=ausland,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: ausland +ou: group08 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=teamlead,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: teamlead +ou: group09 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=gesundheit,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: gesundheit +ou: group10 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=vip,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: vip +ou: group11 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=manager,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: manager +ou: group12 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=kfz,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: kfz +ou: group13 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=haftpflicht,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: haftpflicht +ou: group14 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + +dn: cn=bauspar,ou=groups,o=TaskanaTest +objectClass: groupOfUniqueNames +objectClass: top +cn: bauspar +ou: group15 +uniqueMember: cn=Kurt Achse,ou=people,o=TaskanaTest + 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 79b9d9cd7..e5938cfbf 100644 --- a/rest/taskana-rest-spring-example/src/main/resources/application.properties +++ b/rest/taskana-rest-spring-example/src/main/resources/application.properties @@ -1,7 +1,25 @@ logging.level.pro.taskana=DEBUG +l###logging.level.org.springframework=DEBUG ######## Taskana DB ####### datasource.url=jdbc:h2:mem:taskana;IGNORECASE=TRUE;LOCK_MODE=0;INIT=CREATE SCHEMA IF NOT EXISTS TASKANA datasource.driverClassName=org.h2.Driver datasource.username=sa datasource.password=sa -devMode=false \ No newline at end of file +devMode=false +####### control LDAP usage +taskana.ldap.useLdap=false +####### properties to connect to LDAP +taskana.ldap.serverUrl=ldap://localhost:10389 +taskana.ldap.bindDn=uid=admin,ou=system +taskana.ldap.bindPassword=secret +taskana.ldap.baseDn=o=TaskanaTest +####### properties that control search for users and groups +taskana.ldap.userSearchBase=ou=people +taskana.ldap.userSearchFilterName=objectclass +taskana.ldap.userSearchFilterValue=person +taskana.ldap.userFirstnameAttribute=givenName +taskana.ldap.userLastnameAttribute=sn +taskana.ldap.groupSearchBase=ou=groups +taskana.ldap.groupSearchFilterName=objectclass +taskana.ldap.groupSearchFilterValue=groupOfUniqueNames +taskana.ldap.groupNameAttribute=cn diff --git a/rest/taskana-rest-spring-example/src/main/resources/sql/sample-data/clear-db.sql b/rest/taskana-rest-spring-example/src/main/resources/sql/sample-data/clear-db.sql new file mode 100644 index 000000000..d850b6746 --- /dev/null +++ b/rest/taskana-rest-spring-example/src/main/resources/sql/sample-data/clear-db.sql @@ -0,0 +1,10 @@ +-- the order is important! +DELETE FROM TASKANA.ATTACHMENT; +DELETE FROM TASKANA.TASK; +DELETE FROM TASKANA.WORKBASKET_ACCESS_LIST; +DELETE FROM TASKANA.WORKBASKET; +DELETE FROM TASKANA.DISTRIBUTION_TARGETS; +DELETE FROM TASKANA.CLASSIFICATION; +DELETE FROM TASKANA.OBJECT_REFERENCE; +DELETE FROM TASKANA.JOB; +COMMIT; 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 new file mode 100644 index 000000000..e50da27d2 --- /dev/null +++ b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/ldap/LdapTest.java @@ -0,0 +1,33 @@ +package pro.taskana.ldap; + +import static org.junit.Assert.assertEquals; + +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import pro.taskana.rest.RestConfiguration; +import pro.taskana.rest.resource.AccessIdResource; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = {"devMode=true"}) +@ContextConfiguration(classes = {RestConfiguration.class}) +public class LdapTest { + + @Autowired + private LdapClient ldapClient; + + @Test + public void testFindUsers() { + if (ldapClient.useLdap()) { + List usersAndGroups = ldapClient.searchUsersAndGroups("ie"); + assertEquals(31, usersAndGroups.size()); + } + } +} diff --git a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/AccessIdValidationControllerTest.java b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/AccessIdValidationControllerTest.java index 82e338e12..55e3b296e 100644 --- a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/AccessIdValidationControllerTest.java +++ b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/AccessIdValidationControllerTest.java @@ -29,7 +29,8 @@ import org.springframework.web.client.RestTemplate; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import pro.taskana.rest.resource.AccessIdValidationResource; +import pro.taskana.ldap.LdapCacheTestImpl; +import pro.taskana.rest.resource.AccessIdResource; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, properties = {"devMode=true"}) @@ -41,19 +42,21 @@ public class AccessIdValidationControllerTest { @Test public void testGetMatches() { + AccessIdController.setLdapCache(new LdapCacheTestImpl()); RestTemplate template = getRestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "Basic dGVhbWxlYWRfMTp0ZWFtbGVhZF8x"); HttpEntity request = new HttpEntity(headers); - ResponseEntity> response = template.exchange( - "http://127.0.0.1:" + port + "/v1/validate-access-id?search=ali", HttpMethod.GET, request, - new ParameterizedTypeReference>() { + ResponseEntity> response = template.exchange( + "http://127.0.0.1:" + port + "/v1/access-ids?searchFor=ali", HttpMethod.GET, request, + new ParameterizedTypeReference>() { }); - List body = response.getBody(); + List body = response.getBody(); assertNotNull(body); - List expectedIds = new ArrayList<>(Arrays.asList("user008", "user009", "user248")); - for (AccessIdValidationResource accessId : body) { - assertTrue(expectedIds.contains(accessId.getAccessId())); + assertTrue(3 == body.size()); + List expectedIds = new ArrayList<>(Arrays.asList("Tralisch, Thea", "Bert, Ali", "Mente, Ali")); + for (AccessIdResource accessId : body) { + assertTrue(expectedIds.contains(accessId.getName())); } } diff --git a/rest/taskana-rest-spring/pom.xml b/rest/taskana-rest-spring/pom.xml index 080ae7f40..f51762b08 100644 --- a/rest/taskana-rest-spring/pom.xml +++ b/rest/taskana-rest-spring/pom.xml @@ -1,262 +1,281 @@ - 4.0.0 + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - pro.taskana - taskana-rest-spring - 0.1.5-SNAPSHOT + pro.taskana + taskana-rest-spring + 0.1.5-SNAPSHOT - ${project.groupId}:${project.artifactId} - The taskana rest logic. - http://taskana.pro + ${project.groupId}:${project.artifactId} + The taskana rest logic. + http://taskana.pro - - - The Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - + + + The Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + - - - Holger Hagen - holger.hagen@novatec-gmbh.de - NovaTec Consulting GmbH - https://www.novatec-gmbh.de - - + + + Holger Hagen + holger.hagen@novatec-gmbh.de + NovaTec Consulting GmbH + https://www.novatec-gmbh.de + + - - scm:git:git://github.com/taskana/taskana.git - scm:git:ssh://github.com:taskana/taskana.git - http://github.com/taskana/taskana/tree/master - + + scm:git:git://github.com/taskana/taskana.git + scm:git:ssh://github.com:taskana/taskana.git + http://github.com/taskana/taskana/tree/master + - - UTF-8 - UTF-8 - 1.8 - 1.8 - 1.8 - 5.0.5.RELEASE - + + UTF-8 + UTF-8 + 1.8 + 1.8 + 1.8 + 5.0.5.RELEASE + 2.3.2.RELEASE + - - - snapshot - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.8 - true - - ossrh - https://oss.sonatype.org/ - false - - - - - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - - - release - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.8 - true - - ossrh - https://oss.sonatype.org/ - false - - - - - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - - - + + + snapshot + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + ossrh + https://oss.sonatype.org/ + false + + + + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + + + release + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + ossrh + https://oss.sonatype.org/ + false + + + + + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + - - - org.springframework - spring-web - ${spring.version} - - - org.springframework - spring-beans - ${spring.version} - - - org.springframework - spring-jdbc - ${spring.version} - - - org.springframework.hateoas - spring-hateoas - 0.24.0.RELEASE - - - javax.servlet - javax.servlet-api - 4.0.1 - provided - - - javax.validation - validation-api - 2.0.1.Final - - - com.fasterxml.jackson.core - jackson-databind - 2.9.5 - + + + org.springframework + spring-web + ${spring.version} + + + org.springframework + spring-beans + ${spring.version} + + + org.springframework + spring-jdbc + ${spring.version} + + + org.springframework.hateoas + spring-hateoas + 0.24.0.RELEASE + + + org.springframework.ldap + spring-ldap-core + ${spring.ldap.version} + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + javax.validation + validation-api + 2.0.1.Final + + + com.fasterxml.jackson.core + jackson-databind + 2.9.5 + - - pro.taskana - taskana-spring - ${project.version} - + + pro.taskana + taskana-spring + ${project.version} + - - - org.springframework - spring-test - 5.0.5.RELEASE - test - - - org.springframework.plugin - spring-plugin-core - 1.2.0.RELEASE - test - - - junit - junit - 4.12 - test - - - org.slf4j - slf4j-simple - 1.6.1 - test - - - com.h2database - h2 - 1.4.197 - test - - + + + org.springframework + spring-test + 5.0.5.RELEASE + test + + + org.springframework.plugin + spring-plugin-core + 1.2.0.RELEASE + test + + + junit + junit + 4.12 + test + + + org.slf4j + slf4j-simple + 1.6.1 + test + + + com.h2database + h2 + 1.4.197 + test + + + + org.springframework.ldap + spring-ldap-test + ${spring.ldap.version} + test + + + commons-logging + commons-logging + + + + - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.17 - - - validate - validate - - ../../qa/checkstyle/checkstyle.xml - UTF-8 - true - true - true - true - - - check - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - true - - -Xlint:all - - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - - attach-javadocs - - jar - - - - - - + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.17 + + + validate + validate + + ../../qa/checkstyle/checkstyle.xml + UTF-8 + true + true + true + true + + + check + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + true + + -Xlint:all + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/AccessId.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/AccessId.java new file mode 100644 index 000000000..c7f81fd00 --- /dev/null +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/AccessId.java @@ -0,0 +1,40 @@ +package pro.taskana.ldap; + +/** + * Utility class to hold access ids. + * + * @author bbr + */ +public class AccessId { + + private String accessId; + private String name; + + public String getAccessId() { + return accessId; + } + + public void setAccessId(String accessId) { + this.accessId = accessId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("AccessId [accessId="); + builder.append(accessId); + builder.append(", name="); + builder.append(name); + builder.append("]"); + return builder.toString(); + } + +} 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 new file mode 100644 index 000000000..d0192ea28 --- /dev/null +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapCache.java @@ -0,0 +1,22 @@ +package pro.taskana.ldap; + +import java.util.List; + +import pro.taskana.rest.resource.AccessIdResource; + +/** + * This interface is used for caching Ldap data. + * + * @author bbr + */ +public interface LdapCache { + + /** + * find access ids for users and groups that match specified search criteria. + * + * @param searchFor + * the search string. The search is performed over names and ids of users and groups. + * @return a List of access ids for users and group where the name or id contains the search string. + */ + List findMatchingAccessId(String searchFor); +} 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 new file mode 100644 index 000000000..2ed678584 --- /dev/null +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/ldap/LdapClient.java @@ -0,0 +1,258 @@ +package pro.taskana.ldap; + +import java.util.List; + +import javax.annotation.PostConstruct; +import javax.naming.directory.SearchControls; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.ldap.core.DirContextOperations; +import org.springframework.ldap.core.LdapTemplate; +import org.springframework.ldap.core.support.AbstractContextMapper; +import org.springframework.ldap.filter.AndFilter; +import org.springframework.ldap.filter.EqualsFilter; +import org.springframework.ldap.filter.OrFilter; +import org.springframework.ldap.filter.WhitespaceWildcardsFilter; +import org.springframework.stereotype.Component; + +import pro.taskana.exceptions.SystemException; +import pro.taskana.impl.util.LoggerUtils; +import pro.taskana.rest.resource.AccessIdResource; + +/** + * Class for Ldap access. + * + * @author bbr + */ +@Component +public class LdapClient { + + private static final Logger LOGGER = LoggerFactory.getLogger(LdapClient.class); + private boolean active = false; + + @Autowired + private Environment env; + + @Autowired + private LdapTemplate ldapTemplate; + + private String userSearchBase; + private String userSearchFilterName; + private String userSearchFilterValue; + private String userFirstnameAttribute; + private String userLastnameAttribute; + private String groupSearchBase; + private String groupSearchFilterName; + private String groupSearchFilterValue; + private String groupNameAttribute; + + private static final String CN = "cn"; + private String message; + + @PostConstruct + private void init() { + + if (useLdap()) { + userSearchBase = getUserSearchBase(); + userSearchFilterName = getUserSearchFilterName(); + userSearchFilterValue = getUserSearchFilterValue(); + userFirstnameAttribute = getUserFirstnameAttribute(); + userLastnameAttribute = getUserLastnameAttribute(); + groupSearchBase = getGroupSearchBase(); + groupSearchFilterName = getGroupSearchFilterName(); + groupSearchFilterValue = getGroupSearchFilterValue(); + groupNameAttribute = getGroupNameAttribute(); + + message = "taskana.ldap.useLdap is set to true, but"; + if (userSearchBase == null) { + message += " taskana.ldap.userSearchBase is not configured."; + } + if (userSearchFilterName == null) { + message += " taskana.ldap.userSearchFilterName is not configured."; + } + if (userSearchFilterValue == null) { + message += " taskana.ldap.userSearchFilterValue is not configured."; + } + if (userFirstnameAttribute == null) { + message += " taskana.ldap.userFirstnameAttribute is not configured."; + } + if (userLastnameAttribute == null) { + message += " taskana.ldap.userLastnameAttribute is not configured."; + } + if (groupSearchBase == null) { + message += " taskana.ldap.groupSearchBase is not configured."; + } + if (groupSearchFilterName == null) { + message += " taskana.ldap.groupSearchFilterName is not configured."; + } + if (groupSearchFilterValue == null) { + message += " taskana.ldap.groupSearchFilterValue is not configured."; + } + if (groupNameAttribute == null) { + message += " taskana.ldap.groupNameAttribute is not configured."; + } + if (!message.equals("taskana.ldap.useLdap is set to true, but")) { + LOGGER.error("Ldap configuration error detected: {}", message); + throw new SystemException(message); + } + active = true; + } + } + + public List searchUsersAndGroups(final String name) { + 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); + } + List users = searchUsersByName(name); + users.addAll(searchGroupsByName(name)); + LOGGER.debug("exit from searchUsersAndGroups(name = {}). Found {} users and groups.", name, users.size()); + return users; + } + + public List searchUsersByName(final String name) { + 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); + } + 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)); + andFilter.and(orFilter); + + String[] userAttributesToReturn = {getUserFirstnameAttribute(), getUserLastnameAttribute(), CN}; + + try { + final List accessIds = ldapTemplate.search(getUserSearchBase(), andFilter.encode(), + SearchControls.SUBTREE_SCOPE, userAttributesToReturn, new UserContextMapper()); + LOGGER.debug("exit from searchUsersByName. Retrieved the following users: {}.", + LoggerUtils.listToString(accessIds)); + return accessIds; + } catch (Exception e) { + LOGGER.error("caught Exception {} ", e.getMessage()); + throw e; + } + } + + public List searchGroupsByName(final String name) { + 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); + } + final AndFilter andFilter = new AndFilter(); + andFilter.and(new EqualsFilter(getGroupSearchFilterName(), getGroupSearchFilterValue())); + final OrFilter orFilter = new OrFilter(); + orFilter.or(new WhitespaceWildcardsFilter(getGroupNameAttribute(), name)); + if (!CN.equals(groupNameAttribute)) { + orFilter.or(new WhitespaceWildcardsFilter(CN, name)); + } + andFilter.and(orFilter); + + String[] groupAttributesToReturn; + if (CN.equals(groupNameAttribute)) { + groupAttributesToReturn = new String[] {CN}; + } else { + groupAttributesToReturn = new String[] {getGroupNameAttribute(), CN}; + } + + try { + final List accessIds = ldapTemplate.search(getGroupSearchBase(), andFilter.encode(), + SearchControls.SUBTREE_SCOPE, groupAttributesToReturn, new GroupContextMapper()); + LOGGER.debug("Exit from searchGroupsByName. Retrieved the following groups: {}", + LoggerUtils.listToString(accessIds)); + return accessIds; + } catch (Exception e) { + LOGGER.error("caught Exception {} ", e.getMessage()); + throw e; + } + + } + + public boolean useLdap() { + String useLdap = env.getProperty("taskana.ldap.useLdap"); + if (useLdap == null || useLdap.isEmpty()) { + return false; + } else { + return Boolean.parseBoolean(useLdap); + } + } + + public String getUserSearchBase() { + return env.getProperty("taskana.ldap.userSearchBase"); + } + + public String getUserSearchFilterName() { + return env.getProperty("taskana.ldap.userSearchFilterName"); + } + + public String getUserSearchFilterValue() { + return env.getProperty("taskana.ldap.userSearchFilterValue"); + } + + public String getUserFirstnameAttribute() { + return env.getProperty("taskana.ldap.userFirstnameAttribute"); + } + + public String getUserLastnameAttribute() { + return env.getProperty("taskana.ldap.userLastnameAttribute"); + } + + public String getGroupSearchBase() { + return env.getProperty("taskana.ldap.groupSearchBase"); + } + + public String getGroupSearchFilterName() { + return env.getProperty("taskana.ldap.groupSearchFilterName"); + } + + public String getGroupSearchFilterValue() { + return env.getProperty("taskana.ldap.groupSearchFilterValue"); + } + + public String getGroupNameAttribute() { + return env.getProperty("taskana.ldap.groupNameAttribute"); + } + + /** + * Context Mapper for user entries. + */ + private class UserContextMapper extends AbstractContextMapper { + + @Override + public AccessIdResource doMapFromContext(final DirContextOperations context) { + final AccessIdResource accessId = new AccessIdResource(); + accessId.setAccessId(context.getNameInNamespace()); // fully qualified dn + String firstName = context.getStringAttribute(getUserFirstnameAttribute()); + String lastName = context.getStringAttribute(getUserLastnameAttribute()); + accessId.setName(lastName + ", " + firstName); + return accessId; + } + } + + /** + * Context Mapper for user entries. + */ + private class GroupContextMapper extends AbstractContextMapper { + + @Override + public AccessIdResource doMapFromContext(final DirContextOperations context) { + final AccessIdResource accessId = new AccessIdResource(); + accessId.setAccessId(context.getNameInNamespace()); // fully qualified dn + accessId.setName(context.getStringAttribute(getGroupNameAttribute())); + return accessId; + } + } +} 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 new file mode 100644 index 000000000..8b2cfca42 --- /dev/null +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/AccessIdController.java @@ -0,0 +1,51 @@ +package pro.taskana.rest; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.hateoas.config.EnableHypermediaSupport; +import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import pro.taskana.ldap.LdapCache; +import pro.taskana.ldap.LdapClient; +import pro.taskana.rest.resource.AccessIdResource; + +/** + * Controller for access id validation. + * + * @author bbr + */ +@RestController +@EnableHypermediaSupport(type = HypermediaType.HAL) +@RequestMapping(path = "/v1/access-ids", produces = "application/hal+json") +public class AccessIdController { + + @Autowired + LdapClient ldapClient; + + private static LdapCache ldapCache; + + @GetMapping + public ResponseEntity> validateAccessIds( + @RequestParam(required = false) String searchFor) { + if (ldapClient.useLdap()) { + return new ResponseEntity<>(ldapClient.searchUsersAndGroups(searchFor), HttpStatus.OK); + } else if (ldapCache != null) { + return new ResponseEntity<>(ldapCache.findMatchingAccessId(searchFor), HttpStatus.OK); + } else { + return new ResponseEntity<>(new ArrayList<>(), HttpStatus.NOT_FOUND); + } + } + + public static void setLdapCache(LdapCache cache) { + ldapCache = cache; + } + +} diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/AccessIdValidationController.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/AccessIdValidationController.java deleted file mode 100644 index de90352b8..000000000 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/AccessIdValidationController.java +++ /dev/null @@ -1,317 +0,0 @@ -package pro.taskana.rest; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.springframework.hateoas.config.EnableHypermediaSupport; -import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import pro.taskana.rest.resource.AccessIdValidationResource; - -/** - * Controller for access id validation. - * - * @author bbr - */ -@RestController -@EnableHypermediaSupport(type = HypermediaType.HAL) -@RequestMapping(path = "/v1/validate-access-id", produces = "application/hal+json") -public class AccessIdValidationController { - - @GetMapping - public ResponseEntity> validateAccessIds( - @RequestParam(required = false) String search) { - - return new ResponseEntity<>(findMatchingAccessIdValidationResources(search), HttpStatus.OK); - } - - private List findMatchingAccessIdValidationResources(String searchFor) { - List result = accessIds.stream() - .filter(t -> (t.getName().toLowerCase().contains(searchFor.toLowerCase()) - || t.getAccessId().toLowerCase().contains(searchFor.toLowerCase()))) - .collect(Collectors.toList()); - return result; - } - - private static List accessIds = new ArrayList<>(Arrays.asList( - new AccessIdValidationResource("Sirup, Aaron", "user001"), - new AccessIdValidationResource("Kahn, Ada", "user002"), - new AccessIdValidationResource("Lass, Ada", "user003"), - new AccessIdValidationResource("Tion, Addi", "user004"), - new AccessIdValidationResource("Lette, Adi", "user005"), - new AccessIdValidationResource("Native, Alter", "user006"), - new AccessIdValidationResource("Herum, Albert", "user007"), - new AccessIdValidationResource("Bert, Ali", "user008"), - new AccessIdValidationResource("Mente, Ali", "user009"), - new AccessIdValidationResource("Mater, Alma", "user010"), - new AccessIdValidationResource("Nach, Alma", "user011"), - new AccessIdValidationResource("Gehzauch, Anders", "user012"), - new AccessIdValidationResource("Theke, Andi", "user013"), - new AccessIdValidationResource("Kreuz, Andreas", "user014"), - new AccessIdValidationResource("Kette, Anka", "user015"), - new AccessIdValidationResource("Tiefsee, Anka", "user016"), - new AccessIdValidationResource("Fielmalz, Anke", "user017"), - new AccessIdValidationResource("Fassen, Ann", "user018"), - new AccessIdValidationResource("Probe, Ann", "user019"), - new AccessIdValidationResource("Bolika, Anna", "user020"), - new AccessIdValidationResource("Ecke, Anna", "user021"), - new AccessIdValidationResource("Hosi, Anna", "user022"), - new AccessIdValidationResource("Kronis-Tisch, Anna", "user023"), - new AccessIdValidationResource("Logie, Anna", "user024"), - new AccessIdValidationResource("Luehse, Anna", "user025"), - new AccessIdValidationResource("Nass, Anna", "user026"), - new AccessIdValidationResource("Thalb, Anna", "user027"), - new AccessIdValidationResource("Tomie, Anna", "user028"), - new AccessIdValidationResource("Donnich, Anne", "user029"), - new AccessIdValidationResource("Kaffek, Anne", "user030"), - new AccessIdValidationResource("Thek, Anne", "user031"), - new AccessIdValidationResource("Matoer, Anni", "user032"), - new AccessIdValidationResource("Ragentor, Ansgar", "user033"), - new AccessIdValidationResource("Stoteles, Ari", "user034"), - new AccessIdValidationResource("Thmetik, Ari", "user035"), - new AccessIdValidationResource("Nuehm, Arno", "user036"), - new AccessIdValidationResource("Schocke, Artie", "user037"), - new AccessIdValidationResource("Stoppel, Bart", "user038"), - new AccessIdValidationResource("Beitung, Bea", "user039"), - new AccessIdValidationResource("Ildich, Bea", "user040"), - new AccessIdValidationResource("Vista, Bella", "user041"), - new AccessIdValidationResource("Utzer, Ben", "user042"), - new AccessIdValidationResource("Zien, Ben", "user043"), - new AccessIdValidationResource("Stein, Bernd", "user044"), - new AccessIdValidationResource("Deramen, Bill", "user045"), - new AccessIdValidationResource("Honig, Bine", "user046"), - new AccessIdValidationResource("Densatz, Bo", "user047"), - new AccessIdValidationResource("Densee, Bo", "user048"), - new AccessIdValidationResource("Lerwagen, Bo", "user049"), - new AccessIdValidationResource("Tail, Bob", "user050"), - new AccessIdValidationResource("Ketta, Bruce", "user051"), - new AccessIdValidationResource("Terrie, Bud", "user052"), - new AccessIdValidationResource("Biener-Haken, Cara", "user053"), - new AccessIdValidationResource("Ass, Caro", "user054"), - new AccessIdValidationResource("Kaffee, Caro", "user055"), - new AccessIdValidationResource("Linger, Caro", "user056"), - new AccessIdValidationResource("tenSaft, Caro", "user057"), - new AccessIdValidationResource("Antheme, Chris", "user058"), - new AccessIdValidationResource("Baum, Chris", "user059"), - new AccessIdValidationResource("Tall, Chris", "user060"), - new AccessIdValidationResource("Reiniger, Claas", "user061"), - new AccessIdValidationResource("Grube, Claire", "user062"), - new AccessIdValidationResource("Fall, Clara", "user063"), - new AccessIdValidationResource("Korn, Clara", "user064"), - new AccessIdValidationResource("Lenriff, Cora", "user065"), - new AccessIdValidationResource("Schiert, Cora", "user066"), - new AccessIdValidationResource("Hose, Cord", "user067"), - new AccessIdValidationResource("Onbleu, Cord", "user068"), - new AccessIdValidationResource("Umkleide, Damon", "user069"), - new AccessIdValidationResource("Affier, Dean", "user070"), - new AccessIdValidationResource("Orm, Dean", "user071"), - new AccessIdValidationResource("Platz, Dennis", "user072"), - new AccessIdValidationResource("Milch, Dick", "user073"), - new AccessIdValidationResource("Mow, Dina", "user074"), - new AccessIdValidationResource("Keil, Donna", "user075"), - new AccessIdValidationResource("Littchen, Donna", "user076"), - new AccessIdValidationResource("Wetter, Donna", "user077"), - new AccessIdValidationResource("Was, Ed", "user078"), - new AccessIdValidationResource("Khar, Ede", "user079"), - new AccessIdValidationResource("Nut, Ella", "user080"), - new AccessIdValidationResource("Stisch, Ella", "user081"), - new AccessIdValidationResource("Diel, Emma", "user082"), - new AccessIdValidationResource("Herdamit, Emma", "user083"), - new AccessIdValidationResource("Mitter-Uhe, Emma", "user084"), - new AccessIdValidationResource("Tatt, Erich", "user085"), - new AccessIdValidationResource("Drigend, Ernie", "user086"), - new AccessIdValidationResource("Poly, Esther", "user087"), - new AccessIdValidationResource("Trautz, Eugen", "user088"), - new AccessIdValidationResource("Quiert, Eva", "user089"), - new AccessIdValidationResource("Inurlaub, Fatma", "user090"), - new AccessIdValidationResource("Land, Finn", "user091"), - new AccessIdValidationResource("Sternis, Finn", "user092"), - new AccessIdValidationResource("Furt, Frank", "user093"), - new AccessIdValidationResource("Reich, Frank", "user094"), - new AccessIdValidationResource("Iskaner, Franz", "user095"), - new AccessIdValidationResource("Nerr, Franziska", "user096"), - new AccessIdValidationResource("Zafen, Friedrich", "user097"), - new AccessIdValidationResource("Pomm, Fritz", "user098"), - new AccessIdValidationResource("deWegs, Gera", "user099"), - new AccessIdValidationResource("Staebe, Gitta", "user100"), - new AccessIdValidationResource("Zend, Glenn", "user101"), - new AccessIdValidationResource("Fisch, Grete", "user102"), - new AccessIdValidationResource("Zucker, Gus", "user103"), - new AccessIdValidationResource("Muhn, Hanni", "user104"), - new AccessIdValidationResource("Fermesse, Hanno", "user105"), - new AccessIdValidationResource("Aplast, Hans", "user106"), - new AccessIdValidationResource("Eart, Hans", "user107"), - new AccessIdValidationResource("Back, Hardy", "user108"), - new AccessIdValidationResource("Beau, Harry", "user110"), - new AccessIdValidationResource("Kraut, Heide", "user111"), - new AccessIdValidationResource("Witzka, Heide", "user112"), - new AccessIdValidationResource("Buchen, Hein", "user113"), - new AccessIdValidationResource("Lichkeit, Hein", "user114"), - new AccessIdValidationResource("Suchung, Hein", "user115"), - new AccessIdValidationResource("Ellmann, Heinz", "user116"), - new AccessIdValidationResource("Ketchup, Heinz", "user117"), - new AccessIdValidationResource("Zeim, Hilde", "user118"), - new AccessIdValidationResource("Bilien, Immo", "user119"), - new AccessIdValidationResource("Her, Inge", "user120"), - new AccessIdValidationResource("Wahrsam, Inge", "user121"), - new AccessIdValidationResource("Flamm, Ingo", "user122"), - new AccessIdValidationResource("Enzien, Ingrid", "user123"), - new AccessIdValidationResource("Rohsch, Inken", "user124"), - new AccessIdValidationResource("Ihr, Insa", "user125"), - new AccessIdValidationResource("Nerda, Iska", "user126"), - new AccessIdValidationResource("Eitz, Jens", "user127"), - new AccessIdValidationResource("Nastik, Jim", "user128"), - new AccessIdValidationResource("Gurt, Jo", "user129"), - new AccessIdValidationResource("Kurrth, Jo", "user130"), - new AccessIdValidationResource("Kolade, Joe", "user131"), - new AccessIdValidationResource("Iter, Johann", "user132"), - new AccessIdValidationResource("Tick, Joyce", "user133"), - new AccessIdValidationResource("Case, Justin", "user134"), - new AccessIdValidationResource("Time, Justin", "user135"), - new AccessIdValidationResource("Komp, Jutta", "user136"), - new AccessIdValidationResource("Mauer, Kai", "user137"), - new AccessIdValidationResource("Pirinja, Kai", "user138"), - new AccessIdValidationResource("Serpfalz, Kai", "user139"), - new AccessIdValidationResource("Auer, Karl", "user140"), - new AccessIdValidationResource("Ielauge, Karl", "user141"), - new AccessIdValidationResource("Ifornjen, Karl", "user142"), - new AccessIdValidationResource("Radi, Karl", "user143"), - new AccessIdValidationResource("Verti, Karl", "user144"), - new AccessIdValidationResource("Sery, Karo", "user145"), - new AccessIdValidationResource("Lisator, Katha", "user146"), - new AccessIdValidationResource("Flo, Kati", "user147"), - new AccessIdValidationResource("Schenn, Knut", "user148"), - new AccessIdValidationResource("Achse, Kurt", "user149"), - new AccessIdValidationResource("Zepause, Kurt", "user150"), - new AccessIdValidationResource("Zerr, Kurt", "user151"), - new AccessIdValidationResource("Reden, Lasse", "user152"), - new AccessIdValidationResource("Metten, Lee", "user153"), - new AccessIdValidationResource("Arm, Lene", "user154"), - new AccessIdValidationResource("Thur, Linnea", "user155"), - new AccessIdValidationResource("Bonn, Lisa", "user156"), - new AccessIdValidationResource("Sembourg, Luc", "user157"), - new AccessIdValidationResource("Rung, Lucky", "user158"), - new AccessIdValidationResource("Zafen, Ludwig", "user159"), - new AccessIdValidationResource("Hauden, Lukas", "user160"), - new AccessIdValidationResource("Hose, Lutz", "user161"), - new AccessIdValidationResource("Tablette, Lutz", "user162"), - new AccessIdValidationResource("Fehr, Luzie", "user163"), - new AccessIdValidationResource("Nalyse, Magda", "user164"), - new AccessIdValidationResource("Ehfer, Maik", "user165"), - new AccessIdValidationResource("Sehr, Malte", "user166"), - new AccessIdValidationResource("Thon, Mara", "user167"), - new AccessIdValidationResource("Quark, Marga", "user168"), - new AccessIdValidationResource("Nade, Marie", "user169"), - new AccessIdValidationResource("Niert, Marie", "user170"), - new AccessIdValidationResource("Neese, Mario", "user171"), - new AccessIdValidationResource("Nette, Marion", "user172"), - new AccessIdValidationResource("Nesium, Mark", "user173"), - new AccessIdValidationResource("Thalle, Mark", "user174"), - new AccessIdValidationResource("Diven, Marle", "user175"), - new AccessIdValidationResource("Fitz, Marle", "user176"), - new AccessIdValidationResource("Pfahl, Marta", "user177"), - new AccessIdValidationResource("Zorn, Martin", "user178"), - new AccessIdValidationResource("Krissmes, Mary", "user179"), - new AccessIdValidationResource("Jess, Matt", "user180"), - new AccessIdValidationResource("Strammer, Max", "user181"), - new AccessIdValidationResource("Mumm, Maxi", "user182"), - new AccessIdValidationResource("Morphose, Meta", "user183"), - new AccessIdValidationResource("Uh, Mia", "user184"), - new AccessIdValidationResource("Rofon, Mike", "user185"), - new AccessIdValidationResource("Rosoft, Mike", "user186"), - new AccessIdValidationResource("Liter, Milli", "user187"), - new AccessIdValidationResource("Thär, Milli", "user188"), - new AccessIdValidationResource("Welle, Mirko", "user189"), - new AccessIdValidationResource("Thorat, Mo", "user190"), - new AccessIdValidationResource("Thor, Moni", "user191"), - new AccessIdValidationResource("Kinolta, Monika", "user192"), - new AccessIdValidationResource("Mundhaar, Monika", "user193"), - new AccessIdValidationResource("Munter, Monika", "user194"), - new AccessIdValidationResource("Zwerg, Nat", "user195"), - new AccessIdValidationResource("Elmine, Nick", "user196"), - new AccessIdValidationResource("Thien, Niko", "user197"), - new AccessIdValidationResource("Pferd, Nils", "user198"), - new AccessIdValidationResource("Lerweise, Norma", "user199"), - new AccessIdValidationResource("Motor, Otto", "user200"), - new AccessIdValidationResource("Päde, Otto", "user201"), - new AccessIdValidationResource("Totol, Otto", "user202"), - new AccessIdValidationResource("Ahner, Paul", "user203"), - new AccessIdValidationResource("Nerr, Paula", "user204"), - new AccessIdValidationResource("Leum, Pedro", "user205"), - new AccessIdValidationResource("Imeter, Peer", "user206"), - new AccessIdValidationResource("Manent, Peer", "user207"), - new AccessIdValidationResource("Serkatze, Peer", "user208"), - new AccessIdValidationResource("Spektive, Peer", "user209"), - new AccessIdValidationResource("Gogisch, Peter", "user210"), - new AccessIdValidationResource("Hacke, Peter", "user211"), - new AccessIdValidationResource("Silje, Peter", "user212"), - new AccessIdValidationResource("Wagen, Peter", "user213"), - new AccessIdValidationResource("Harmonie, Phil", "user214"), - new AccessIdValidationResource("Ologie, Phil", "user215"), - new AccessIdValidationResource("Ihnen, Philip", "user216"), - new AccessIdValidationResource("Nist, Pia", "user217"), - new AccessIdValidationResource("Uto, Pia", "user218"), - new AccessIdValidationResource("Colada, Pina", "user219"), - new AccessIdValidationResource("Kothek, Pina", "user220"), - new AccessIdValidationResource("Toresk, Pit", "user221"), - new AccessIdValidationResource("Zar, Pit", "user222"), - new AccessIdValidationResource("Carbonat, Polly", "user223"), - new AccessIdValidationResource("Zeih, Polly", "user224"), - new AccessIdValidationResource("Vera, Prima", "user225"), - new AccessIdValidationResource("Tswan, Puh", "user226"), - new AccessIdValidationResource("Chen, Qu", "user227"), - new AccessIdValidationResource("Zufall, Rainer", "user228"), - new AccessIdValidationResource("Tenz, Reni", "user229"), - new AccessIdValidationResource("Lien, Rita", "user230"), - new AccessIdValidationResource("Sport, Rita", "user231"), - new AccessIdValidationResource("Held, Roman", "user232"), - new AccessIdValidationResource("Nenbrot, Rosi", "user233"), - new AccessIdValidationResource("Haar, Ross", "user234"), - new AccessIdValidationResource("Baer, Roy", "user235"), - new AccessIdValidationResource("Dick, Roy", "user236"), - new AccessIdValidationResource("Mente, Rudi", "user238"), - new AccessIdValidationResource("Enplaner, Ruth", "user239"), - new AccessIdValidationResource("Print, Ruth", "user240"), - new AccessIdValidationResource("Kommen, Ryan", "user241"), - new AccessIdValidationResource("Pler, Sam", "user242"), - new AccessIdValidationResource("Philo, Sophie", "user243"), - new AccessIdValidationResource("Mutter, Steve", "user244"), - new AccessIdValidationResource("Matisier, Stig", "user245"), - new AccessIdValidationResource("Transpor, Svea", "user246"), - new AccessIdValidationResource("Loniki, Tessa", "user247"), - new AccessIdValidationResource("Tralisch, Thea", "user248"), - new AccessIdValidationResource("Logie, Theo", "user249"), - new AccessIdValidationResource("Retisch, Theo", "user250"), - new AccessIdValidationResource("Ister, Thorn", "user251"), - new AccessIdValidationResource("Sitter, Till", "user252"), - new AccessIdValidationResource("Buktu, Tim", "user253"), - new AccessIdValidationResource("Beil, Timo", "user254"), - new AccessIdValidationResource("Ate, Tom", "user255"), - new AccessIdValidationResource("Riga, Toni", "user256"), - new AccessIdValidationResource("Pie, Udo", "user257"), - new AccessIdValidationResource("Russ, Ute", "user258"), - new AccessIdValidationResource("Aloe, Vera", "user261"), - new AccessIdValidationResource("Breden, Vera", "user262"), - new AccessIdValidationResource("Hausver, Walter", "user263"), - new AccessIdValidationResource("Lismus, Wanda", "user264"), - new AccessIdValidationResource("Schuh, Wanda", "user265"), - new AccessIdValidationResource("Pell, Wim", "user266"), - new AccessIdValidationResource("Rahm, Wolf", "user267"), - new AccessIdValidationResource("sachbearbeiter", "group01"), new AccessIdValidationResource("leben", "group02"), - new AccessIdValidationResource("chirurgie", "group03"), new AccessIdValidationResource("zahn", "group04"), - new AccessIdValidationResource("knie", "group05"), new AccessIdValidationResource("schaden", "group06"), - new AccessIdValidationResource("kapital", "group07"), new AccessIdValidationResource("ausland", "group08"), - new AccessIdValidationResource("teamlead", "group09"), new AccessIdValidationResource("gesundheit", "group10"), - new AccessIdValidationResource("vip", "group11"), new AccessIdValidationResource("manager", "group12"), - new AccessIdValidationResource("kfz", "group13"), new AccessIdValidationResource("haftpflicht", "group14"), - new AccessIdValidationResource("bauspar", "group15"))); - -} 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 ccdc49c1a..ec4e2fc0f 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 @@ -4,14 +4,18 @@ import java.sql.SQLException; import javax.sql.DataSource; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; +import org.springframework.core.env.Environment; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.converter.json.SpringHandlerInstantiator; +import org.springframework.ldap.core.LdapTemplate; +import org.springframework.ldap.core.support.LdapContextSource; import org.springframework.transaction.annotation.EnableTransactionManagement; import com.fasterxml.jackson.databind.cfg.HandlerInstantiator; @@ -23,6 +27,7 @@ import pro.taskana.TaskanaEngine; import pro.taskana.WorkbasketService; import pro.taskana.configuration.SpringTaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration; +import pro.taskana.ldap.LdapClient; /** * Configuration for REST service. @@ -32,6 +37,44 @@ import pro.taskana.configuration.TaskanaEngineConfiguration; @EnableTransactionManagement public class RestConfiguration { + @Autowired + private Environment env; + + @Bean + public LdapContextSource contextSource() { + + LdapContextSource contextSource = new LdapContextSource(); + boolean useLdap; + String useLdapConfigValue = env.getProperty("taskana.ldap.useLdap"); + if (useLdapConfigValue == null || useLdapConfigValue.isEmpty()) { + useLdap = false; + } else { + useLdap = Boolean.parseBoolean(useLdapConfigValue); + } + if (useLdap) { + contextSource.setUrl(env.getRequiredProperty("taskana.ldap.serverUrl")); + contextSource.setBase(env.getRequiredProperty("taskana.ldap.baseDn")); + contextSource.setUserDn(env.getRequiredProperty("taskana.ldap.bindDn")); + contextSource.setPassword(env.getRequiredProperty("taskana.ldap.bindPassword")); + } else { + contextSource.setUrl("ldap://com.dummy:9999"); + contextSource.setBase("o=taskana"); + contextSource.setUserDn("user"); + contextSource.setPassword("secret"); + } + return contextSource; + } + + @Bean + public LdapClient ldapClient() { + return new LdapClient(); + } + + @Bean + public LdapTemplate ldapTemplate() { + return new LdapTemplate(contextSource()); + } + @Bean public ClassificationService getClassificationService(TaskanaEngine taskanaEngine) { return taskanaEngine.getClassificationService(); @@ -73,7 +116,7 @@ public class RestConfiguration { return b; } - //Needed for injection into jackson deserializer. + // Needed for injection into jackson deserializer. @Bean public HandlerInstantiator handlerInstantiator(ApplicationContext context) { return new SpringHandlerInstantiator(context.getAutowireCapableBeanFactory()); diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/AccessIdValidationResource.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/AccessIdResource.java similarity index 53% rename from rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/AccessIdValidationResource.java rename to rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/AccessIdResource.java index 55df8b3a9..e06a9865f 100644 --- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/AccessIdValidationResource.java +++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/AccessIdResource.java @@ -5,16 +5,16 @@ package pro.taskana.rest.resource; * * @author bbr */ -public class AccessIdValidationResource { +public class AccessIdResource { public String name; public String accessId; - public AccessIdValidationResource() { + public AccessIdResource() { } - public AccessIdValidationResource(String name, String accessId) { + public AccessIdResource(String name, String accessId) { this.accessId = accessId; this.name = name; } @@ -35,4 +35,15 @@ public class AccessIdValidationResource { this.name = name; } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("AccessIdResource [name="); + builder.append(name); + builder.append(", accessId="); + builder.append(accessId); + builder.append("]"); + return builder.toString(); + } + }