/plugins/userdata-widget/src/main/java/pl/net/bluesoft/rnd/pt/ext/userdata/widget/LdapUserDataWidget.java

https://github.com/bluesoft-rnd/aperte-workflow-core · Java · 185 lines · 151 code · 31 blank · 3 comment · 6 complexity · bae9ffd7130ff3f19e9c6e035923dfa4 MD5 · raw file

  1. package pl.net.bluesoft.rnd.pt.ext.userdata.widget;
  2. import com.novell.ldap.*;
  3. import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AliasName;
  4. import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AperteDoc;
  5. import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AutoWiredProperty;
  6. import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.WidgetGroup;
  7. import java.util.Collection;
  8. import java.util.HashSet;
  9. /**
  10. * @author tlipski@bluesoft.net.pl
  11. */
  12. @AliasName(name="LdapUserData")
  13. @WidgetGroup("userdata-widget")
  14. public class LdapUserDataWidget extends UserDataWidget {
  15. @AutoWiredProperty(required = true)
  16. @AperteDoc(
  17. humanNameKey = "userdata.widget.ldap.ip",
  18. descriptionKey = "userdata.widget.ldap.ip.description"
  19. )
  20. public String ip;
  21. @AutoWiredProperty
  22. @AperteDoc(
  23. humanNameKey = "userdata.widget.ldap.port",
  24. descriptionKey = "userdata.widget.ldap.port.description"
  25. )
  26. public Integer port = 389;
  27. @AutoWiredProperty(required = true)
  28. @AperteDoc(
  29. humanNameKey = "userdata.widget.ldap.loginDN",
  30. descriptionKey = "userdata.widget.ldap.loginDN.description"
  31. )
  32. public String loginDN;
  33. @AutoWiredProperty(required = true)
  34. @AperteDoc(
  35. humanNameKey = "userdata.widget.ldap.password",
  36. descriptionKey = "userdata.widget.ldap.password.description"
  37. )
  38. public String password;
  39. @AutoWiredProperty
  40. @AperteDoc(
  41. humanNameKey = "userdata.widget.ldap.searchBase",
  42. descriptionKey = "userdata.widget.ldap.searchBase.description"
  43. )
  44. public String searchBase = "";
  45. @AutoWiredProperty
  46. @AperteDoc(
  47. humanNameKey = "userdata.widget.ldap.searchFilter",
  48. descriptionKey = "userdata.widget.ldap.searchFilter.description"
  49. )
  50. public String searchFilter = "(objectClass=inetOrgPerson)";
  51. @AutoWiredProperty
  52. @AperteDoc(
  53. humanNameKey = "userdata.widget.ldap.loginAttr",
  54. descriptionKey = "userdata.widget.ldap.loginAttr.description"
  55. )
  56. public String loginAttr = "uid";
  57. @AutoWiredProperty
  58. @AperteDoc(
  59. humanNameKey = "userdata.widget.ldap.descriptionAttr",
  60. descriptionKey = "userdata.widget.ldap.descriptionAttr.description"
  61. )
  62. public String descriptionAttr = "cn";
  63. private LDAPConnection getLdapConnection() {
  64. try {
  65. LDAPConnection lc = new LDAPConnection();
  66. lc.connect(ip, port);
  67. lc.bind(LDAPConnection.LDAP_V3, loginDN, password.getBytes("UTF8"));
  68. return lc;
  69. }
  70. catch (Exception e) {
  71. throw new RuntimeException(e);
  72. }
  73. }
  74. @Override
  75. protected Collection<UserData> getUsers() {
  76. Collection<UserData> users = new HashSet();
  77. LDAPConnection ldapConnection = getLdapConnection();
  78. try {
  79. try {
  80. LDAPSearchResults results = ldapConnection.search(searchBase, LDAPConnection.SCOPE_SUB,
  81. searchFilter, null, false);
  82. while (results.hasMore()) {
  83. LDAPEntry ldapEntry = results.next();
  84. LDAPAttributeSet attrs = ldapEntry.getAttributeSet();
  85. UserData ud = new UserData();
  86. if (attrs.getAttribute(loginAttr) == null) continue;
  87. String login = attrs.getAttribute(loginAttr).getStringValue();
  88. ud.setLogin(ldapEntry.getDN() + ", " + loginAttr + "=" + login);
  89. if (attrs.getAttribute(descriptionAttr) == null) {
  90. ud.setDescription(ud.getLogin());
  91. } else {
  92. ud.setDescription(attrs.getAttribute(descriptionAttr).getStringValue());
  93. }
  94. ud.setBpmLogin(login);
  95. users.add(ud);
  96. }
  97. }
  98. finally {
  99. ldapConnection.disconnect();
  100. }
  101. } catch (LDAPException e) {
  102. throw new RuntimeException(e);
  103. }
  104. return users;
  105. }
  106. public String getIp() {
  107. return ip;
  108. }
  109. public void setIp(String ip) {
  110. this.ip = ip;
  111. }
  112. public int getPort() {
  113. return port;
  114. }
  115. public void setPort(int port) {
  116. this.port = port;
  117. }
  118. public String getLoginDN() {
  119. return loginDN;
  120. }
  121. public void setLoginDN(String loginDN) {
  122. this.loginDN = loginDN;
  123. }
  124. public String getPassword() {
  125. return password;
  126. }
  127. public void setPassword(String password) {
  128. this.password = password;
  129. }
  130. public String getSearchBase() {
  131. return searchBase;
  132. }
  133. public void setSearchBase(String searchBase) {
  134. this.searchBase = searchBase;
  135. }
  136. public String getSearchFilter() {
  137. return searchFilter;
  138. }
  139. public void setSearchFilter(String searchFilter) {
  140. this.searchFilter = searchFilter;
  141. }
  142. public String getLoginAttr() {
  143. return loginAttr;
  144. }
  145. public void setLoginAttr(String loginAttr) {
  146. this.loginAttr = loginAttr;
  147. }
  148. public String getDescriptionAttr() {
  149. return descriptionAttr;
  150. }
  151. public void setDescriptionAttr(String descriptionAttr) {
  152. this.descriptionAttr = descriptionAttr;
  153. }
  154. }