| /* |
| ******************************************************************************* |
| * 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.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.stereotype.Service; |
| |
| import javax.naming.Name; |
| 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) { |
| 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); |
| |
| 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; |
| }*/ |
| |
| |
| } |