TSK-497 implement Ldap access

This commit is contained in:
BerndBreier 2018-05-21 06:08:47 +02:00 committed by Holger Hagen
parent ce490f17ce
commit c92542e362
18 changed files with 3937 additions and 580 deletions

View File

@ -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,

View File

@ -23,6 +23,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring.ldap.version>2.3.2.RELEASE</spring.ldap.version>
</properties>
<dependencies>
@ -47,6 +48,11 @@
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-core</artifactId>
<version>${spring.ldap.version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
@ -68,6 +74,18 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-test</artifactId>
<version>${spring.ldap.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>

View File

@ -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<AccessIdResource> findMatchingAccessId(String searchFor) {
List<AccessIdResource> 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<AccessIdResource> 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")));
}

View File

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

View File

@ -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);

File diff suppressed because it is too large Load Diff

View File

@ -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
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

View File

@ -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;

View File

@ -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<AccessIdResource> usersAndGroups = ldapClient.searchUsersAndGroups("ie");
assertEquals(31, usersAndGroups.size());
}
}
}

View File

@ -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<String> request = new HttpEntity<String>(headers);
ResponseEntity<List<AccessIdValidationResource>> response = template.exchange(
"http://127.0.0.1:" + port + "/v1/validate-access-id?search=ali", HttpMethod.GET, request,
new ParameterizedTypeReference<List<AccessIdValidationResource>>() {
ResponseEntity<List<AccessIdResource>> response = template.exchange(
"http://127.0.0.1:" + port + "/v1/access-ids?searchFor=ali", HttpMethod.GET, request,
new ParameterizedTypeReference<List<AccessIdResource>>() {
});
List<AccessIdValidationResource> body = response.getBody();
List<AccessIdResource> body = response.getBody();
assertNotNull(body);
List<String> expectedIds = new ArrayList<>(Arrays.asList("user008", "user009", "user248"));
for (AccessIdValidationResource accessId : body) {
assertTrue(expectedIds.contains(accessId.getAccessId()));
assertTrue(3 == body.size());
List<String> expectedIds = new ArrayList<>(Arrays.asList("Tralisch, Thea", "Bert, Ali", "Mente, Ali"));
for (AccessIdResource accessId : body) {
assertTrue(expectedIds.contains(accessId.getName()));
}
}

View File

@ -1,262 +1,281 @@
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<modelVersion>4.0.0</modelVersion>
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">
<modelVersion>4.0.0</modelVersion>
<groupId>pro.taskana</groupId>
<artifactId>taskana-rest-spring</artifactId>
<version>0.1.5-SNAPSHOT</version>
<groupId>pro.taskana</groupId>
<artifactId>taskana-rest-spring</artifactId>
<version>0.1.5-SNAPSHOT</version>
<name>${project.groupId}:${project.artifactId}</name>
<description>The taskana rest logic.</description>
<url>http://taskana.pro</url>
<name>${project.groupId}:${project.artifactId}</name>
<description>The taskana rest logic.</description>
<url>http://taskana.pro</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Holger Hagen</name>
<email>holger.hagen@novatec-gmbh.de</email>
<organization>NovaTec Consulting GmbH</organization>
<organizationUrl>https://www.novatec-gmbh.de</organizationUrl>
</developer>
</developers>
<developers>
<developer>
<name>Holger Hagen</name>
<email>holger.hagen@novatec-gmbh.de</email>
<organization>NovaTec Consulting GmbH</organization>
<organizationUrl>https://www.novatec-gmbh.de</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:git://github.com/taskana/taskana.git</connection>
<developerConnection>scm:git:ssh://github.com:taskana/taskana.git</developerConnection>
<url>http://github.com/taskana/taskana/tree/master</url>
</scm>
<scm>
<connection>scm:git:git://github.com/taskana/taskana.git</connection>
<developerConnection>scm:git:ssh://github.com:taskana/taskana.git</developerConnection>
<url>http://github.com/taskana/taskana/tree/master</url>
</scm>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
<spring.version>5.0.5.RELEASE</spring.version>
</properties>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
<spring.version>5.0.5.RELEASE</spring.version>
<spring.ldap.version>2.3.2.RELEASE</spring.ldap.version>
</properties>
<profiles>
<profile>
<id>snapshot</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>false</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</profile>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>false</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
<profiles>
<profile>
<id>snapshot</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>false</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</profile>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>false</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
<version>0.24.0.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
<version>0.24.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-core</artifactId>
<version>${spring.ldap.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-spring</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>pro.taskana</groupId>
<artifactId>taskana-spring</artifactId>
<version>${project.version}</version>
</dependency>
<!-- TEST -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
<version>1.2.0.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- TEST -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
<version>1.2.0.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
<scope>test</scope>
</dependency>
<!-- spring ldap test -->
<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-test</artifactId>
<version>${spring.ldap.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<configuration>
<configLocation>../../qa/checkstyle/checkstyle.xml</configLocation>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<failOnViolation>true</failOnViolation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>-Xlint:all</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<configuration>
<configLocation>../../qa/checkstyle/checkstyle.xml</configLocation>
<encoding>UTF-8</encoding>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<failOnViolation>true</failOnViolation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
</configuration>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>-Xlint:all</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

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

View File

@ -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<AccessIdResource> findMatchingAccessId(String searchFor);
}

View File

@ -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<AccessIdResource> 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<AccessIdResource> users = searchUsersByName(name);
users.addAll(searchGroupsByName(name));
LOGGER.debug("exit from searchUsersAndGroups(name = {}). Found {} users and groups.", name, users.size());
return users;
}
public List<AccessIdResource> 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<AccessIdResource> 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<AccessIdResource> 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<AccessIdResource> 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<AccessIdResource> {
@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<AccessIdResource> {
@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;
}
}
}

View File

@ -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<List<AccessIdResource>> 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;
}
}

View File

@ -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<List<AccessIdValidationResource>> validateAccessIds(
@RequestParam(required = false) String search) {
return new ResponseEntity<>(findMatchingAccessIdValidationResources(search), HttpStatus.OK);
}
private List<AccessIdValidationResource> findMatchingAccessIdValidationResources(String searchFor) {
List<AccessIdValidationResource> 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<AccessIdValidationResource> 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")));
}

View File

@ -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());

View File

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