KON-43 Synchronisation Interne Personen mit LDAP
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/config/CorsConfig.java b/src/main/java/org/eclipse/openk/contactbasedata/config/CorsConfig.java
index 7988c90..486dd73 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/config/CorsConfig.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/config/CorsConfig.java
@@ -11,9 +11,6 @@
@Configuration
public class CorsConfig {
- @Value("${cors.allowedOrigins}")
- private String allowedOrigins;
-
@Value("${cors.corsEnabled}")
private boolean corsEnabled;
@@ -24,10 +21,8 @@
public void addCorsMappings(CorsRegistry registry) {
if (corsEnabled) {
log.info("Cors enabled");
- log.info("AllowedOrigins: " + allowedOrigins);
registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE").allowedOrigins("*")
.allowedHeaders("*");
- //.allowedOrigins(allowedOrigins).maxAge(1800);
} else {
log.info("Cors disabled");
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/config/SchedulingConfig.java b/src/main/java/org/eclipse/openk/contactbasedata/config/SchedulingConfig.java
new file mode 100644
index 0000000..170f780
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/config/SchedulingConfig.java
@@ -0,0 +1,24 @@
+package org.eclipse.openk.contactbasedata.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@Log4j2
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "ldap.scheduling", name="enabled", havingValue="true", matchIfMissing = false)
+public class SchedulingConfig {
+
+ @Value("${ldap.scheduling.cron-expression}")
+ private String cronExpression;
+
+ @Bean
+ public void logConfig(){
+ log.info("Scheduler is enabled with cron expression: " + cronExpression);
+ }
+
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java
index a0f91e2..e5746aa 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java
@@ -22,12 +22,12 @@
import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
import org.springframework.beans.factory.annotation.Autowired;
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.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
-import java.lang.reflect.InvocationTargetException;
import java.util.List;
@Log4j2
@@ -46,13 +46,13 @@
return ldapUserService.getAllLdapUsers();
}
- @ApiOperation(value = "Ermitteln der UserModules vom Auth'n'Auth-Service")
+ @ApiOperation(value = "Synchronisierung der User anhand des LDAPs")
@ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
@ResponseStatus(HttpStatus.OK)
@GetMapping( "/sync")
- public String syncLdapUser() {
- ldapUserService.synchronize();
- return "";
+ public ResponseEntity<Object> syncLdapUser() {
+ ldapUserService.synchronizeLDAP();
+ return ResponseEntity.ok().build();
}
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java
index 0ba1a58..cb581ce 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java
@@ -43,7 +43,7 @@
return userService.getUserModules();
}
- @ApiOperation(value = "Ermitteln der der KeycloakUsers vom Auth'n'Auth-Service")
+ @ApiOperation(value = "Ermitteln der KeycloakUsers vom Auth'n'Auth-Service")
@ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
@GetMapping("/keycloak-users")
public List<KeyCloakUser> 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
index d1277c1..ad5a48e 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/model/KeyCloakUser.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/model/KeyCloakUser.java
@@ -15,83 +15,35 @@
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 KeyCloakUser() {
}
- public boolean isTotp() {
- return totp;
+ public String getUsername() {
+ return username;
}
- public boolean isEmailVerified() {
- return emailVerified;
+ public void setUsername(String username) {
+ this.username = username;
}
- public List<String> getRealmRoles() {
- return realmRoles;
+ public String getFirstName() {
+ return firstName;
}
- public void setRealmRoles(List<String> realmRoles) {
- this.realmRoles = realmRoles;
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
}
- public Map<String, List<String>> getClientRoles() {
- return clientRoles;
+ public String getLastName() {
+ return lastName;
}
- 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;
- }
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
}
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/InitPropertyLogger.java b/src/main/java/org/eclipse/openk/contactbasedata/service/InitPropertyLogger.java
new file mode 100644
index 0000000..92552b2
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/InitPropertyLogger.java
@@ -0,0 +1,37 @@
+package org.eclipse.openk.contactbasedata.service;
+
+import lombok.extern.log4j.Log4j2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.env.OriginTrackedMapPropertySource;
+import org.springframework.context.event.ContextRefreshedEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.core.env.AbstractEnvironment;
+import org.springframework.core.env.EnumerablePropertySource;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.MutablePropertySources;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.stream.StreamSupport;
+
+@Log4j2
+@Component
+public class InitPropertyLogger {
+
+ @EventListener
+ public void handleContextRefresh(ContextRefreshedEvent event) {
+ final Environment environment = event.getApplicationContext().getEnvironment();
+ log.info("\n");
+ log.info("============== Configuration ==============");
+ log.info("Active profile: {}", Arrays.toString(environment.getActiveProfiles()));
+ final MutablePropertySources sources = ((AbstractEnvironment) environment).getPropertySources();
+ StreamSupport.stream(sources.spliterator(), false)
+ .filter(ps -> ps instanceof OriginTrackedMapPropertySource)
+ .map(ps -> ((OriginTrackedMapPropertySource) ps).getPropertyNames())
+ .flatMap(Arrays::stream)
+ .distinct()
+ .forEach(prop -> log.info("{}: {}", prop, environment.getProperty(prop)));
+ log.info("===========================================\n");
+ }
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java
index 424c28a..d661238 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java
@@ -1,17 +1,22 @@
package org.eclipse.openk.contactbasedata.service;
import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.openk.contactbasedata.exceptions.NotFoundException;
+import org.eclipse.openk.contactbasedata.model.RefCommunicationType;
+import org.eclipse.openk.contactbasedata.model.TblCommunication;
import org.eclipse.openk.contactbasedata.model.TblInternalPerson;
+import org.eclipse.openk.contactbasedata.repository.CommunicationRepository;
+import org.eclipse.openk.contactbasedata.repository.CommunicationTypeRepository;
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.beans.factory.annotation.Value;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -21,6 +26,15 @@
@Service
public class LdapUserService {
+ @Value("${ldap.attribute-mapping.uid}")
+ private String uid;
+
+ @Value("${ldap.db-id-mapping.telephone-number-id}")
+ private Long telephoneNumberId;
+
+ @Value("${ldap.db-id-mapping.mail-id}")
+ private Long mailId;
+
@Autowired
LdapUserAttributesMapper ldapUserAttributesMapper;
@@ -28,46 +42,113 @@
private InternalPersonRepository internalPersonRepository;
@Autowired
- private InternalPersonService internalPersonService;
-
- @Autowired
private LdapTemplate ldapTemplate;
+ @Autowired
+ private CommunicationTypeRepository communicationTypeRepository;
+
+ @Autowired
+ CommunicationRepository communicationRepository;
+
/**
- * Retrieves all the persons in the ldap server, using {@link LdapUserAttributesMapper}
- * @return list of persons
+ * Retrieves all the LdapUsers in the ldap server, using {@link LdapUserAttributesMapper}
+ * @return list of LdapUsers
*/
public List<LdapUser> getAllLdapUsers() {
return ldapTemplate.search(query()
.where("objectclass").is("person"), ldapUserAttributesMapper);
}
- public void synchronize() {
+ /**
+ * Retrieves the distinct the LdapUsers from the ldap server, using {@link LdapUserAttributesMapper}
+ * @return ldapUsers
+ */
+ public List<LdapUser> getLdapUserByUID(String uid) {
+ return ldapTemplate.search(query()
+ .where("objectclass").is("person").and(this.uid).is(uid), ldapUserAttributesMapper);
+ }
+
+ @Transactional
+ public void synchronizeLDAP() {
List<TblInternalPerson> internalPersonList = internalPersonRepository.findByUidNotNull();
Map<String, TblInternalPerson> uidToInternalPersonMap = internalPersonList.stream().collect(
Collectors.toMap(TblInternalPerson::getUid, Function.identity()));
- List<LdapUser> allLdapUsers = getAllLdapUsers();
+ List<LdapUser> allFoundLdapUsers = new ArrayList<>();
+ List<TblInternalPerson> allNotExistingLdapUsers = new ArrayList<>();
+ findExistingAndNotExistingLdapUsers(internalPersonList, allFoundLdapUsers, allNotExistingLdapUsers);
List<TblInternalPerson> internalPersonListSynchronized = new ArrayList<>();
- for (LdapUser ldapUser : allLdapUsers) {
+
+ RefCommunicationType refCommunicationTypeMail = getRefCommunicationType(mailId);
+ RefCommunicationType refCommunicationTypePhone = getRefCommunicationType(telephoneNumberId);
+
+ for (LdapUser ldapUser : allFoundLdapUsers) {
TblInternalPerson tblInternalPerson = uidToInternalPersonMap.get(ldapUser.getUid());
if (tblInternalPerson == null) continue;
- boolean attributesChanged = mapLdapUserToInternaPerson(tblInternalPerson, ldapUser);
+ boolean attributesChanged = mapLdapUserToInternaPerson(tblInternalPerson, ldapUser, refCommunicationTypeMail, refCommunicationTypePhone);
if (attributesChanged) {
internalPersonListSynchronized.add(tblInternalPerson);
}
}
+ //Update all not found users notes with the sync error message
+ internalPersonRepository.saveAll(allNotExistingLdapUsers);
+
+ //Update all found Users with the synchronized LDAP data
internalPersonRepository.saveAll(internalPersonListSynchronized);
}
- private boolean mapLdapUserToInternaPerson(TblInternalPerson tblInternalPerson, LdapUser ldapUser) {
+ private RefCommunicationType getRefCommunicationType(Long refCommunicationTypeId) {
+ return communicationTypeRepository.findAll().stream()
+ .filter(x -> x.getId().equals(refCommunicationTypeId))
+ .findFirst()
+ .orElseThrow(NotFoundException::new);
+ }
+
+ private void findExistingAndNotExistingLdapUsers(List<TblInternalPerson> internalPersonList, List<LdapUser> allFoundLdapUsers, List<TblInternalPerson> allNotExistingLdapUsers) {
+ for (TblInternalPerson tblInternalPerson : internalPersonList) {
+ String uidTblInternalPerson = tblInternalPerson.getUid();
+ List<LdapUser> ldapUserByUIDResult = getLdapUserByUID(uidTblInternalPerson);
+
+ if(ldapUserByUIDResult.size() == 0){
+ String errorMsg = String.format("[LDAP Sync Error] User with Uid: [ %s ] can not be found in LDAP", uidTblInternalPerson);
+ setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, errorMsg);
+ continue;
+ }
+
+ if(ldapUserByUIDResult.size() > 1){
+ String errorMsg = String.format("[LDAP Sync Error] More than one result for UID: [ %s ] in LDAP", uidTblInternalPerson);
+ setNoteAndLogSyncError(allNotExistingLdapUsers, tblInternalPerson, errorMsg);
+ continue;
+ }
+
+ LdapUser ldapUser = ldapUserByUIDResult.get(0);
+ allFoundLdapUsers.add(ldapUser);
+ }
+ }
+
+ private void setNoteAndLogSyncError(List<TblInternalPerson> allNotExistingLdapUsers, TblInternalPerson tblInternalPerson, String errorMsg) {
+ log.error(errorMsg);
+ String note = tblInternalPerson.getContact().getNote();
+ if (note == null) note = "";
+ if (!note.contains(errorMsg)) {
+ note = note + System.lineSeparator() + errorMsg;
+ tblInternalPerson.getContact().setNote(note);
+ allNotExistingLdapUsers.add(tblInternalPerson);
+ }
+ }
+
+ private boolean mapLdapUserToInternaPerson(TblInternalPerson tblInternalPerson, LdapUser ldapUser, RefCommunicationType refCommunicationTypeMail, RefCommunicationType refCommunicationTypePhone) {
boolean attributesChanged = false;
+
+ attributesChanged = isCommunicationDataChangedAndSync(tblInternalPerson, ldapUser.getMail(), refCommunicationTypeMail, attributesChanged, mailId);
+ attributesChanged = isCommunicationDataChangedAndSync(tblInternalPerson, ldapUser.getTelephoneNumber(), refCommunicationTypePhone, attributesChanged, telephoneNumberId);
+
if (!Objects.equals(tblInternalPerson.getFirstName(), ldapUser.getFirstName())
- || !Objects.equals(tblInternalPerson.getLastName(), ldapUser.getLastName() )
- || !Objects.equals(tblInternalPerson.getTitle(), ldapUser.getTitle() )
+ || !Objects.equals(tblInternalPerson.getLastName(), ldapUser.getLastName())
+ || !Objects.equals(tblInternalPerson.getTitle(), ldapUser.getTitle())
|| !Objects.equals(tblInternalPerson.getDepartment(), ldapUser.getDepartment())) {
attributesChanged = true;
tblInternalPerson.setFirstName(ldapUser.getFirstName());
@@ -78,5 +159,35 @@
return attributesChanged;
}
+ private boolean isCommunicationDataChangedAndSync(TblInternalPerson tblInternalPerson, String communicationdata, RefCommunicationType refCommunicationType, boolean attributesChanged, Long communicationTypeId) {
+ List<TblCommunication> tblCommunicationList = tblInternalPerson.getContact().getCommunications();
+
+ Optional<TblCommunication> optionalTblCommunication = tblCommunicationList.stream()
+ .filter(tblCommunication -> tblCommunication.getRefCommunicationType().getId().equals(communicationTypeId))
+ .findFirst();
+
+ if (optionalTblCommunication.isPresent()) {
+ if (!Objects.equals(optionalTblCommunication.get().getCommunicationData(), communicationdata)){
+ optionalTblCommunication.get().setCommunicationData(communicationdata);
+ attributesChanged = true;
+ }
+ } else {
+ attributesChanged = createAndSaveNewTblCommunication(tblInternalPerson, communicationdata, refCommunicationType, attributesChanged);
+ }
+ return attributesChanged;
+ }
+
+ private boolean createAndSaveNewTblCommunication(TblInternalPerson tblInternalPerson, String communicationData, RefCommunicationType refCommunicationType, boolean attributesChanged) {
+ if (StringUtils.isEmpty(communicationData)) return attributesChanged;
+ TblCommunication tblCommunication = new TblCommunication();
+ tblCommunication.setUuid(UUID.randomUUID());
+ tblCommunication.setTblContact(tblInternalPerson.getContact());
+ tblCommunication.setRefCommunicationType(refCommunicationType);
+ tblCommunication.setCommunicationData(communicationData);
+ communicationRepository.save(tblCommunication);
+ tblInternalPerson.getContact().getCommunications().add(tblCommunication);
+ return true;
+ }
+
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/SchedulingService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/SchedulingService.java
new file mode 100644
index 0000000..702e3ec
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/SchedulingService.java
@@ -0,0 +1,23 @@
+package org.eclipse.openk.contactbasedata.service;
+
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+
+@Log4j2
+@Service
+public class SchedulingService {
+
+ @Autowired
+ LdapUserService ldapUserService;
+
+ @Scheduled(cron = "${ldap.scheduling.cron-expression}")
+ public void scheduleTaskSynchronize() {
+ log.info("Executing scheduled task: Synchronizing Users");
+ ldapUserService.synchronizeLDAP();
+ log.info("Finished scheduled task: Synchronizing Users");
+ }
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java
index c0d96cb..1d946ca 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java
@@ -26,21 +26,17 @@
@Service
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;
+ String bearerToken = (String)SecurityContextHolder.getContext().getAuthentication().getDetails();
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
index 2738cc2..033f5bf 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/util/LdapUserAttributesMapper.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/util/LdapUserAttributesMapper.java
@@ -29,25 +29,31 @@
----------------------
*/
- @Value("${ldap.uid}")
+ @Value("${ldap.attribute-mapping.uid}")
private String uid;
- @Value("${ldap.fullname}")
+ @Value("${ldap.attribute-mapping.fullname}")
private String fullname;
- @Value("${ldap.lastname}")
+ @Value("${ldap.attribute-mapping.lastname}")
private String lastname;
- @Value("${ldap.firstname}")
+ @Value("${ldap.attribute-mapping.firstname}")
private String firstname;
- @Value("${ldap.title}")
+ @Value("${ldap.attribute-mapping.title}")
private String title;
- @Value("${ldap.mail}")
+ @Value("${ldap.attribute-mapping.department}")
+ private String department;
+
+ @Value("${ldap.attribute-mapping.mail}")
private String mail;
- @Value("${ldap.password}")
+ @Value("${ldap.attribute-mapping.telephone-number}")
+ private String telephoneNumber;
+
+ @Value("${ldap.attribute-mapping.password}")
private String password;
@@ -75,6 +81,14 @@
if (attribute != null) {
ldapUser.setTitle((String) attribute.get());
}
+ attribute = attributes.get(department);
+ if (attribute != null) {
+ ldapUser.setDepartment((String) attribute.get());
+ }
+ attribute = attributes.get(telephoneNumber);
+ if (attribute != null) {
+ ldapUser.setTelephoneNumber((String) attribute.get());
+ }
attribute = attributes.get(mail);
if (attribute != null) {
ldapUser.setMail((String) attribute.get());
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java
index 6b1601b..5d5db8f 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java
@@ -18,6 +18,8 @@
private String title;
private String department;
private String mail;
+ private String telephoneNumber;
+
private byte[] password;
public LdapUser() {
@@ -102,6 +104,14 @@
this.title = title;
}
+ public String getTelephoneNumber() {
+ return telephoneNumber;
+ }
+
+ public void setTelephoneNumber(String telephoneNumber) {
+ this.telephoneNumber = telephoneNumber;
+ }
+
@Override
public String toString() {
return uid;
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 774100c..83830a7 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -25,13 +25,22 @@
urls: ldap://entopkon:10389
ldap:
- uid: uid
- fullname: cn
- lastname: sn
- firstname: givenname
- title: title
- mail: mail
- password: userpassword
+ attribute-mapping:
+ uid: uid
+ fullname: cn
+ lastname: sn
+ firstname: givenname
+ title: title
+ mail: mail
+ department: department
+ telephone-number: phone
+ password: userpassword
+ db-id-mapping:
+ mail-id: 1
+ telephone-number-id: 2
+ scheduling:
+ enabled: false
+ cron-expression: '*/10 * * * * *'
server:
max-http-header-size: 262144
@@ -56,7 +65,6 @@
connectTimeout: 60000
readTimeout: 60000
cors:
- allowedOrigins: http://localhost:8080
corsEnabled: false
logging:
@@ -84,6 +92,26 @@
---
spring:
+ profiles: devserver-local
+
+jwt:
+ tokenHeader: Authorization
+ useStaticJwt: false
+ staticJwt: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJIYlI3Z2pobmE2eXJRZnZJTWhUSV9tY2g3ZmtTQWVFX3hLTjBhZVl0bjdjIn0.eyJqdGkiOiI5MGI0NGFkOC1iYjlmLTQ1MzktYTQwYy0yYjQyZTNkNjNiOGEiLCJleHAiOjE1Nzg2NTU3OTUsIm5iZiI6MCwiaWF0IjoxNTc4NjU1NDk1LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvRWxvZ2Jvb2siLCJhdWQiOiJlbG9nYm9vay1iYWNrZW5kIiwic3ViIjoiODYyNjY5NmYtZjFhMi00ZGI1LTkyZWYtZTlhMjQ2Njg1YTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiZWxvZ2Jvb2stYmFja2VuZCIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjJmMWIzODE5LWZjNjQtNDEzNC1iNWQxLWY3ZWY4NzU5NDBkNCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsia29uLWFkbWluIiwia29uLXdyaXRlciIsImtvbi1hY2Nlc3MiLCJrb24tcmVhZGVyIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnt9LCJuYW1lIjoiVGVzdGVyRmlyc3RuYW1lX3J3YSBUZXN0ZXJMYXN0bmFtZV9yd2EiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0ZXN0dXNlcl9yd2EiLCJnaXZlbl9uYW1lIjoiVGVzdGVyRmlyc3RuYW1lX3J3YSIsImZhbWlseV9uYW1lIjoiVGVzdGVyTGFzdG5hbWVfcndhIn0.DAYXuv4tKn8RXqO1jyttnD-tF4nShUBQyfe4bKbAiPAyY2x5YbAf3M4eXnLrGqo8-loGKldICC28bL0LaMA3KKkQEOfW5sfpGqoN6212vs89mOklt0TJYc5PMXwFgJ5WC_TKjdwq7-aaDafOEWehV0U1ut3s-94ovNYIEn29nzXm2W1ldoXJEq03F880jlysQ5zlRvGF7eXEEpFfI2URyyNQ2UWh0Ssfq-gOAt2pbF1u6prA5RfvUmZ3v1eu21YLGZtgqPqxb1l6odyH3ip15j_HdgnTeo52ymxuRUj65Mskme3V5ev2DitHI9vZgnpV8Idhb4TTWliBeGCOMfDFCg
+
+server:
+ port: 9155
+
+cors:
+ corsEnabled: true
+
+authNAuthService:
+ ribbon:
+ listOfServers: http://localhost:8080
+
+---
+
+spring:
profiles: devserver
jwt:
@@ -95,7 +123,6 @@
port: 9155
cors:
- allowedOrigins: http://localhost:8080
corsEnabled: true
@@ -113,7 +140,6 @@
port: 9156
cors:
- allowedOrigins: http://localhost:8080
corsEnabled: true
---
@@ -148,5 +174,4 @@
listOfServers: http://localhost:8080
cors:
- allowedOrigins: http://localhost:8080
corsEnabled: true
\ No newline at end of file