// Path: services/ldap/api/src/main/java/eu/hlavki/identity/services/ldap/model/LdapAccount.java
// @Getter
// @Setter
// @NoArgsConstructor
// public class LdapAccount {
// 
//     public enum Role {
//         EXTERNAL, INTERNAL
//     }
// 
//     private String dn;
//     private String name;
//     private String givenName;
//     private String familyName;
//     private String username;
//     private String subject;
//     private Set<String> emails;
//     private String password;
//     private Role role;
// 
// 
//     public LdapAccount(String dn) {
//         this.dn = dn;
//     }
// 
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder("[");
//         sb.append("givenName=").append(givenName).
//                 append(", familyName=").append(familyName).
//                 append(", name=").append(name).
//                 append(", username=").append(username).
//                 append(", subject=").append(subject).
//                 append(", emails=").append(emails).
//                 append(", role=").append(role).append("]");
//         return sb.toString();
//     }
// 
//     public String getValueByAttr(String attr) {
//         switch (attr) {
//             case "cn": return getName();
//             case "uid": return getUsername();
//             default: return null;
//         }
//     }
// }
// 
// Path: services/ldap/api/src/main/java/eu/hlavki/identity/services/ldap/model/LdapAccount.java
// public enum Role {
//     EXTERNAL, INTERNAL
// }
// 
// Path: services/ldap/api/src/main/java/eu/hlavki/identity/services/ldap/model/LdapGroup.java
// public class LdapGroup {
// 
//     private String name;
//     private String dn;
//     private String description;
//     private Set<String> membersDn;
// 
// 
//     public LdapGroup() {
//     }
// 
// 
//     public LdapGroup(String name, String dn, String description, Set<String> members) {
//         this.name = name;
//         this.dn = dn;
//         this.membersDn = members;
//     }
// 
// 
//     public String getName() {
//         return name;
//     }
// 
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
// 
//     public String getDn() {
//         return dn;
//     }
// 
// 
//     public void setDn(String dn) {
//         this.dn = dn;
//     }
// 
// 
//     /**
//      * Return set of membersDn DN.
//      *
//      * @return set of membersDn DN.
//      */
//     public Set<String> getMembersDn() {
//         return membersDn;
//     }
// 
// 
//     public void setMembersDn(Set<String> membersDn) {
//         this.membersDn = membersDn;
//     }
// 
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder("[");
//         sb.append("name=").append(name).append(", dn=").append(dn).
//             append(", membersDN=").append(membersDn).append(", desc=").append(description).append("]");
//         return sb.toString();
//     }
// 
// 
//     public String getDescription() {
//         return description;
//     }
// 
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// }


import eu.hlavki.identity.services.ldap.model.LdapAccount;
import eu.hlavki.identity.services.ldap.model.LdapAccount.Role;
import eu.hlavki.identity.services.ldap.model.LdapGroup;
import java.util.List;
import java.util.Optional;
import java.util.Set;
package eu.hlavki.identity.services.ldap;


public interface LdapAccountService {

    boolean accountExists(String subject);


    Optional<LdapAccount> getAccountBySubject(String subject);


    Optional<LdapAccount> getAccountByEmail(String email);


// Path: services/ldap/api/src/main/java/eu/hlavki/identity/services/ldap/model/LdapAccount.java
// @Getter
// @Setter
// @NoArgsConstructor
// public class LdapAccount {
// 
//     public enum Role {
//         EXTERNAL, INTERNAL
//     }
// 
//     private String dn;
//     private String name;
//     private String givenName;
//     private String familyName;
//     private String username;
//     private String subject;
//     private Set<String> emails;
//     private String password;
//     private Role role;
// 
// 
//     public LdapAccount(String dn) {
//         this.dn = dn;
//     }
// 
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder("[");
//         sb.append("givenName=").append(givenName).
//                 append(", familyName=").append(familyName).
//                 append(", name=").append(name).
//                 append(", username=").append(username).
//                 append(", subject=").append(subject).
//                 append(", emails=").append(emails).
//                 append(", role=").append(role).append("]");
//         return sb.toString();
//     }
// 
//     public String getValueByAttr(String attr) {
//         switch (attr) {
//             case "cn": return getName();
//             case "uid": return getUsername();
//             default: return null;
//         }
//     }
// }
// 
// Path: services/ldap/api/src/main/java/eu/hlavki/identity/services/ldap/model/LdapAccount.java
// public enum Role {
//     EXTERNAL, INTERNAL
// }
// 
// Path: services/ldap/api/src/main/java/eu/hlavki/identity/services/ldap/model/LdapGroup.java
// public class LdapGroup {
// 
//     private String name;
//     private String dn;
//     private String description;
//     private Set<String> membersDn;
// 
// 
//     public LdapGroup() {
//     }
// 
// 
//     public LdapGroup(String name, String dn, String description, Set<String> members) {
//         this.name = name;
//         this.dn = dn;
//         this.membersDn = members;
//     }
// 
// 
//     public String getName() {
//         return name;
//     }
// 
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
// 
//     public String getDn() {
//         return dn;
//     }
// 
// 
//     public void setDn(String dn) {
//         this.dn = dn;
//     }
// 
// 
//     /**
//      * Return set of membersDn DN.
//      *
//      * @return set of membersDn DN.
//      */
//     public Set<String> getMembersDn() {
//         return membersDn;
//     }
// 
// 
//     public void setMembersDn(Set<String> membersDn) {
//         this.membersDn = membersDn;
//     }
// 
// 
//     @Override
//     public String toString() {
//         StringBuilder sb = new StringBuilder("[");
//         sb.append("name=").append(name).append(", dn=").append(dn).
//             append(", membersDN=").append(membersDn).append(", desc=").append(description).append("]");
//         return sb.toString();
//     }
// 
// 
//     public String getDescription() {
//         return description;
//     }
// 
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// }


// Path: services/ldap/api/src/main/java/eu/hlavki/identity/services/ldap/LdapAccountService.java
import eu.hlavki.identity.services.ldap.model.LdapAccount;
import eu.hlavki.identity.services.ldap.model.LdapAccount.Role;
import eu.hlavki.identity.services.ldap.model.LdapGroup;
import java.util.List;
import java.util.Optional;
import java.util.Set;

package eu.hlavki.identity.services.ldap;


public interface LdapAccountService {

    boolean accountExists(String subject);


    Optional<LdapAccount> getAccountBySubject(String subject);


    Optional<LdapAccount> getAccountByEmail(String email);


    List<LdapAccount> searchAccounts(Role role);