Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.contactBaseData.backend into KON-43-Synchronisation-Interne-Personen-mit-LDAP
diff --git a/pom.xml b/pom.xml
index ea368ff..ed6c3d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,6 +69,10 @@
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-ldap</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/api/AuthNAuthApi.java b/src/main/java/org/eclipse/openk/contactbasedata/api/AuthNAuthApi.java
index 76e7799..ca7355c 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/api/AuthNAuthApi.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/api/AuthNAuthApi.java
@@ -14,6 +14,7 @@
*/
package org.eclipse.openk.contactbasedata.api;
+import org.eclipse.openk.contactbasedata.model.KeyCloakUser;
import org.eclipse.openk.contactbasedata.viewmodel.UserModule;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@@ -32,4 +33,7 @@
@GetMapping(value= "/portal/rest/beservice/userModulesForUser")
List<UserModule> getUserModulesForUser(@RequestHeader("Authorization") String token );
+
+ @GetMapping(value= "/portal/rest/beservice/users")
+ List<KeyCloakUser> getKeycloakUsers(@RequestHeader("Authorization") String token );
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java
new file mode 100644
index 0000000..a0f91e2
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java
@@ -0,0 +1,58 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+package org.eclipse.openk.contactbasedata.controller;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.contactbasedata.service.LdapUserService;
+import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+
+@Log4j2
+@RestController
+@RequestMapping("/ldap")
+public class LdapController {
+
+ @Autowired
+ private LdapUserService ldapUserService;
+
+ @ApiOperation(value = "Ermitteln der UserModules vom Auth'n'Auth-Service")
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
+ @ResponseStatus(HttpStatus.OK)
+ @GetMapping( "/users")
+ public List<LdapUser> getLdapUser() {
+ return ldapUserService.getAllLdapUsers();
+ }
+
+ @ApiOperation(value = "Ermitteln der UserModules vom Auth'n'Auth-Service")
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
+ @ResponseStatus(HttpStatus.OK)
+ @GetMapping( "/sync")
+ public String syncLdapUser() {
+ ldapUserService.synchronize();
+ return "";
+ }
+
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/UserModuleController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java
similarity index 69%
rename from src/main/java/org/eclipse/openk/contactbasedata/controller/UserModuleController.java
rename to src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java
index eced874..0ba1a58 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/controller/UserModuleController.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java
@@ -18,7 +18,8 @@
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.log4j.Log4j2;
-import org.eclipse.openk.contactbasedata.service.UserModuleService;
+import org.eclipse.openk.contactbasedata.model.KeyCloakUser;
+import org.eclipse.openk.contactbasedata.service.UserService;
import org.eclipse.openk.contactbasedata.viewmodel.UserModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -29,19 +30,25 @@
@Log4j2
@RestController
-@RequestMapping("/user-modules")
-public class UserModuleController {
+@RequestMapping("/user")
+public class UserController {
@Autowired
- private UserModuleService userModuleService;
+ private UserService userService;
@ApiOperation(value = "Ermitteln der UserModules vom Auth'n'Auth-Service")
@ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
- @GetMapping
+ @GetMapping("/modules")
public List<UserModule> getUserModules() {
- return userModuleService.getUserModules();
+ return userService.getUserModules();
}
+ @ApiOperation(value = "Ermitteln der der KeycloakUsers vom Auth'n'Auth-Service")
+ @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
+ @GetMapping("/keycloak-users")
+ public List<KeyCloakUser> getKeycloakUsers() {
+ return userService.getKeycloakUsers();
+ }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/model/KeyCloakUser.java b/src/main/java/org/eclipse/openk/contactbasedata/model/KeyCloakUser.java
new file mode 100644
index 0000000..d1277c1
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/model/KeyCloakUser.java
@@ -0,0 +1,97 @@
+/**
+******************************************************************************
+* Copyright © 2017-2018 PTA GmbH.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+*
+* http://www.eclipse.org/legal/epl-v10.html
+*
+******************************************************************************
+*/
+package org.eclipse.openk.contactbasedata.model;
+
+import java.util.List;
+import java.util.Map;
+
+public class KeyCloakUser {
+ private String id;
+ private long createdTimestamp;
+ private String username;
+ private boolean enabled;
+ private boolean totp;
+ private boolean emailVerified;
+ private String firstName;
+ private String lastName;
+ private String name;
+ private List<String> realmRoles;
+ private Map<String, List<String>> clientRoles;
+
+ private List<String> disableableCredentialTypes;
+ private List<String> requiredActions;
+
+ public String getId() { return id; }
+ public void setId(String id) { this.id = id; }
+
+ public long getCreatedTimestamp() { return createdTimestamp; }
+ public void setCreatedTimestamp(long createdTimestamp) { this.createdTimestamp = createdTimestamp; }
+
+ public String getUsername() { return username; }
+ public void setUsername(String username) { this.username = username; }
+
+ public void setTotp(boolean totp) { this.totp = totp; }
+
+ public void setEmailVerified(boolean emailVerified) { this.emailVerified = emailVerified; }
+
+ public String getFirstName() { return firstName; }
+ public void setFirstName(String firstName) { this.firstName = firstName; }
+
+ public String getLastName() { return lastName; }
+ public void setLastName(String lastName) { this.lastName = lastName; }
+
+ public List<String> getDisableableCredentialTypes() {
+ return disableableCredentialTypes;
+ }
+ public void setDisableableCredentialTypes(List<String> disableableCredentialTypes) { this.disableableCredentialTypes = disableableCredentialTypes; }
+
+ public List<String> getRequiredActions() {
+ return requiredActions;
+ }
+ public void setRequiredActions(List<String> requiredActions) { this.requiredActions = requiredActions; }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public boolean isTotp() {
+ return totp;
+ }
+
+ public boolean isEmailVerified() {
+ return emailVerified;
+ }
+
+ public List<String> getRealmRoles() {
+ return realmRoles;
+ }
+
+ public void setRealmRoles(List<String> realmRoles) {
+ this.realmRoles = realmRoles;
+ }
+
+ public Map<String, List<String>> getClientRoles() {
+ return clientRoles;
+ }
+
+ public void setClientRoles(Map<String, List<String>> clientRoles) {
+ this.clientRoles = clientRoles;
+ }
+
+ public void setName() {
+ if (lastName!= null && !lastName.isEmpty()){
+ this.name = firstName+ " " + lastName;
+ } else {
+ this.name = firstName;
+ }
+ }
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java b/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java
index 22348d0..1ea4525 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java
@@ -21,6 +21,7 @@
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
+import java.util.List;
import java.util.Optional;
import java.util.UUID;
@@ -37,4 +38,5 @@
Page<TblInternalPerson> findByContact_anonymizedFalseOrContact_anonymizedIsNull(Pageable pageable); // NOSONAR fd 07.02.2020: Method name cannot be changed
+ List<TblInternalPerson> findByUidNotNull();
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
new file mode 100644
index 0000000..d52408d
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
@@ -0,0 +1,110 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+package org.eclipse.openk.contactbasedata.service;
+
+import org.eclipse.openk.contactbasedata.api.AuthNAuthApi;
+import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.ldap.core.*;
+import org.springframework.ldap.support.LdapNameBuilder;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Service;
+
+import javax.naming.Name;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Base64;
+import java.util.List;
+
+@Service
+public class LdapService {
+
+ @Autowired
+ InternalPersonService internalPersonService;
+
+ @Autowired
+ private AuthNAuthApi authNAuthApi;
+
+ @Autowired
+ private Environment env;
+
+ @Autowired
+ private ContextSource contextSource;
+
+ @Autowired
+ private LdapTemplate ldapTemplate;
+
+ public void authenticate(final String username, final String password) {
+ contextSource.getContext("cn=" + username + ",ou=users," + env.getRequiredProperty("ldap.partitionSuffix"), password);
+ }
+
+ public List<String> search(final String username) {
+ return ldapTemplate.search(
+ "ou=users",
+ "cn=" + username,
+ (AttributesMapper<String>) attrs -> (String) attrs
+ .get("cn")
+ .get());
+ }
+
+ public void create(final String username, final String password) {
+ Name dn = LdapNameBuilder
+ .newInstance()
+ .add("ou", "users")
+ .add("cn", username)
+ .build();
+ DirContextAdapter context = new DirContextAdapter(dn);
+
+ context.setAttributeValues("objectclass", new String[] { "top", "person", "organizationalPerson", "inetOrgPerson" });
+ context.setAttributeValue("cn", username);
+ context.setAttributeValue("sn", username);
+ context.setAttributeValue("userPassword", digestSHA(password));
+
+ ldapTemplate.bind(context);
+ }
+
+ public void modify(final String username, final String password) {
+ Name dn = LdapNameBuilder
+ .newInstance()
+ .add("ou", "users")
+ .add("cn", username)
+ .build();
+ DirContextOperations context = ldapTemplate.lookupContext(dn);
+
+ context.setAttributeValues("objectclass", new String[] { "top", "person", "organizationalPerson", "inetOrgPerson" });
+ context.setAttributeValue("cn", username);
+ context.setAttributeValue("sn", username);
+ context.setAttributeValue("userPassword", digestSHA(password));
+
+ ldapTemplate.modifyAttributes(context);
+ }
+
+ private String digestSHA(final String password) {
+ String base64;
+ try {
+ MessageDigest digest = MessageDigest.getInstance("SHA");
+ digest.update(password.getBytes());
+ base64 = Base64
+ .getEncoder()
+ .encodeToString(digest.digest());
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ }
+ return "{SHA}" + base64;
+ }
+
+
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java
new file mode 100644
index 0000000..424c28a
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java
@@ -0,0 +1,82 @@
+package org.eclipse.openk.contactbasedata.service;
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.contactbasedata.model.TblInternalPerson;
+import org.eclipse.openk.contactbasedata.repository.InternalPersonRepository;
+import org.eclipse.openk.contactbasedata.service.util.LdapUserAttributesMapper;
+import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ldap.core.LdapTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import static org.springframework.ldap.query.LdapQueryBuilder.query;
+
+@Log4j2
+@Service
+public class LdapUserService {
+
+ @Autowired
+ LdapUserAttributesMapper ldapUserAttributesMapper;
+
+ @Autowired
+ private InternalPersonRepository internalPersonRepository;
+
+ @Autowired
+ private InternalPersonService internalPersonService;
+
+ @Autowired
+ private LdapTemplate ldapTemplate;
+
+ /**
+ * Retrieves all the persons in the ldap server, using {@link LdapUserAttributesMapper}
+ * @return list of persons
+ */
+ public List<LdapUser> getAllLdapUsers() {
+ return ldapTemplate.search(query()
+ .where("objectclass").is("person"), ldapUserAttributesMapper);
+ }
+
+ public void synchronize() {
+ List<TblInternalPerson> internalPersonList = internalPersonRepository.findByUidNotNull();
+
+ Map<String, TblInternalPerson> uidToInternalPersonMap = internalPersonList.stream().collect(
+ Collectors.toMap(TblInternalPerson::getUid, Function.identity()));
+
+ List<LdapUser> allLdapUsers = getAllLdapUsers();
+
+ List<TblInternalPerson> internalPersonListSynchronized = new ArrayList<>();
+ for (LdapUser ldapUser : allLdapUsers) {
+ TblInternalPerson tblInternalPerson = uidToInternalPersonMap.get(ldapUser.getUid());
+ if (tblInternalPerson == null) continue;
+ boolean attributesChanged = mapLdapUserToInternaPerson(tblInternalPerson, ldapUser);
+ if (attributesChanged) {
+ internalPersonListSynchronized.add(tblInternalPerson);
+ }
+ }
+
+ internalPersonRepository.saveAll(internalPersonListSynchronized);
+ }
+
+ private boolean mapLdapUserToInternaPerson(TblInternalPerson tblInternalPerson, LdapUser ldapUser) {
+ boolean attributesChanged = false;
+ if (!Objects.equals(tblInternalPerson.getFirstName(), ldapUser.getFirstName())
+ || !Objects.equals(tblInternalPerson.getLastName(), ldapUser.getLastName() )
+ || !Objects.equals(tblInternalPerson.getTitle(), ldapUser.getTitle() )
+ || !Objects.equals(tblInternalPerson.getDepartment(), ldapUser.getDepartment())) {
+ attributesChanged = true;
+ tblInternalPerson.setFirstName(ldapUser.getFirstName());
+ tblInternalPerson.setLastName(ldapUser.getLastName());
+ tblInternalPerson.setTitle(ldapUser.getTitle());
+ tblInternalPerson.setDepartment(ldapUser.getDepartment());
+ }
+ return attributesChanged;
+ }
+
+
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/UserModuleService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java
similarity index 68%
rename from src/main/java/org/eclipse/openk/contactbasedata/service/UserModuleService.java
rename to src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java
index b0c9dc4..c0d96cb 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/UserModuleService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java
@@ -15,20 +15,32 @@
package org.eclipse.openk.contactbasedata.service;
import org.eclipse.openk.contactbasedata.api.AuthNAuthApi;
+import org.eclipse.openk.contactbasedata.model.KeyCloakUser;
import org.eclipse.openk.contactbasedata.viewmodel.UserModule;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
-public class UserModuleService {
+public class UserService {
@Autowired
private AuthNAuthApi authNAuthApi;
+ @Value("${jwt.staticJwt}")
+ private String staticJwt;
+
public List<UserModule> getUserModules() {
String bearerToken = (String)SecurityContextHolder.getContext().getAuthentication().getDetails();
return authNAuthApi.getUserModulesForUser(bearerToken);
}
+
+ public List<KeyCloakUser> getKeycloakUsers() {
+ //String bearerToken = (String)SecurityContextHolder.getContext().getAuthentication().getDetails();
+ Object details = SecurityContextHolder.getContext().getAuthentication().getDetails();
+ String bearerToken = staticJwt;
+ return authNAuthApi.getKeycloakUsers(bearerToken);
+ }
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/util/LdapUserAttributesMapper.java b/src/main/java/org/eclipse/openk/contactbasedata/service/util/LdapUserAttributesMapper.java
new file mode 100644
index 0000000..2738cc2
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/util/LdapUserAttributesMapper.java
@@ -0,0 +1,89 @@
+package org.eclipse.openk.contactbasedata.service.util;
+
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.ldap.core.AttributesMapper;
+import org.springframework.stereotype.Component;
+
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+
+/**
+ * Custom person attributes mapper, maps the attributes to the person POJO
+ */
+@Log4j2
+@Component
+public class LdapUserAttributesMapper implements AttributesMapper {
+
+ /*
+ Config in yaml example (variable : attributeName in LDAP):
+ ----------------------
+ uid: uid
+ fullname: cn
+ lastname: sn
+ firstname: givename
+ title: title
+ mail: mail
+ ----------------------
+ */
+
+ @Value("${ldap.uid}")
+ private String uid;
+
+ @Value("${ldap.fullname}")
+ private String fullname;
+
+ @Value("${ldap.lastname}")
+ private String lastname;
+
+ @Value("${ldap.firstname}")
+ private String firstname;
+
+ @Value("${ldap.title}")
+ private String title;
+
+ @Value("${ldap.mail}")
+ private String mail;
+
+ @Value("${ldap.password}")
+ private String password;
+
+
+ @Override
+ public LdapUser mapFromAttributes(Attributes attributes) throws NamingException {
+ LdapUser ldapUser = new LdapUser();
+
+ Attribute attribute = attributes.get(uid);
+ if (attribute != null) {
+ ldapUser.setUid((String) attribute.get());
+ }
+ attribute = attributes.get(fullname);
+ if (attribute != null) {
+ ldapUser.setFullName((String) attribute.get());
+ }
+ attribute = attributes.get(lastname);
+ if (attribute != null) {
+ ldapUser.setLastName((String) attribute.get());
+ }
+ attribute = attributes.get(firstname);
+ if (attribute != null) {
+ ldapUser.setFirstName((String) attribute.get());
+ }
+ attribute = attributes.get(title);
+ if (attribute != null) {
+ ldapUser.setTitle((String) attribute.get());
+ }
+ attribute = attributes.get(mail);
+ if (attribute != null) {
+ ldapUser.setMail((String) attribute.get());
+ }
+ attribute = attributes.get(password);
+ if (attribute != null) {
+ ldapUser.setPassword((byte[]) attribute.get());
+ }
+
+ return ldapUser;
+ }
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java
new file mode 100644
index 0000000..6b1601b
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java
@@ -0,0 +1,110 @@
+package org.eclipse.openk.contactbasedata.viewmodel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import javax.naming.Name;
+import java.nio.charset.StandardCharsets;
+
+//@Entry(base = "ou=users", objectClasses = { "person", "inetOrgPerson", "top" })
+public class LdapUser {
+
+ @JsonIgnore
+ private Name dn;
+
+ private String uid;
+ private String fullName;
+ private String firstName;
+ private String lastName;
+ private String title;
+ private String department;
+ private String mail;
+ private byte[] password;
+
+ public LdapUser() {
+ }
+
+ public LdapUser(String uid, String password) {
+ }
+
+ public Name getDn() {
+ return dn;
+ }
+
+ public void setDn(Name dn) {
+ this.dn = dn;
+ }
+
+ public String getUid() {
+ return uid;
+ }
+
+ public void setUid(String uid) {
+ this.uid = uid;
+ }
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public void setFullName(String fullName) {
+ this.fullName = fullName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getDepartment() {
+ return department;
+ }
+
+ public void setDepartment(String department) {
+ this.department = department;
+ }
+
+ public byte[] getPassword() {
+ return password;
+ }
+
+ public void setPassword(byte[] password) {
+ this.password = password;
+ }
+
+ public void setPassword2(String password) {
+ this.password = password.getBytes(StandardCharsets.UTF_8);
+ }
+
+ public String getMail() {
+ return mail;
+ }
+
+ public void setMail(String mail) {
+ this.mail = mail;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @Override
+ public String toString() {
+ return uid;
+ }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index b1a50e9..774100c 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -17,6 +17,21 @@
password: cbd_service
flyway:
enabled: false
+ ldap:
+ base: o=sevenSeas
+ username: uid=admin,ou=system
+ password: secret
+ port: 10389
+ urls: ldap://entopkon:10389
+
+ldap:
+ uid: uid
+ fullname: cn
+ lastname: sn
+ firstname: givenname
+ title: title
+ mail: mail
+ password: userpassword
server:
max-http-header-size: 262144