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();
+ }
+
}