Hi!
I hope someone can help me, I am trying to add users (LDAP directory read only with local groups ) to a local group but I am getting errors because it tries to sync them in the LDAP I guess.
Any help will be very wellcomed!
import com.atlassian.crowd.manager.directory.DirectoryManager
import com.atlassian.jira.bc.JiraServiceContextImpl
import com.atlassian.jira.bc.user.UserService
import com.atlassian.jira.bc.user.search.UserSearchParams
import com.atlassian.jira.bc.user.search.UserSearchService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.security.login.LoginManager
import com.atlassian.jira.user.ApplicationUser
import groovy.xml.MarkupBuilder
final directoryToCheck = 'Servidor LDAP'
def loginManager = ComponentAccessor.getComponent(LoginManager)
def directoryManager = ComponentAccessor.getComponent(DirectoryManager)
UserSearchParams.Builder paramBuilder = UserSearchParams.builder()
.allowEmptyQuery(true)
.includeActive(true)
.includeInactive(false)
def jiraServiceContext = new JiraServiceContextImpl(ComponentAccessor.jiraAuthenticationContext.loggedInUser)
def allActiveUsers = ComponentAccessor.getComponent(UserSearchService).findUsers(jiraServiceContext, '', paramBuilder.build())
def internalDirectoryId = directoryManager.findAllDirectories()?.find { it.name.toLowerCase() == directoryToCheck.toLowerCase() }?.id
def allUsers = allActiveUsers.findAll { user ->
user.directoryId == internalDirectoryId
}
if (!allUsers) {
return 'No users found'
}
def stringWriter = new StringWriter()
def content = new MarkupBuilder(stringWriter)
content.html {
p('Follow users added ') {
ul {
allUsers.each {
user -> addtoGroup(user)
}*.username?.each { added ->
li(added)
}
}
}
}
stringWriter.toString()
def addtoGroup(ApplicationUser user) {
def groupManager = ComponentAccessor.getGroupManager()
def systems = groupManager.getGroup("jira-customers")
groupManager.addUserToGroup(user,systems) // intenta hacer el cambi en el LDAP pero lo que queremos es añadirlo a un grupo local
def userService = ComponentAccessor.getComponent(UserService)
def updateUser = userService.newUserBuilder(user).active(false).build()
def updateUserValidationResult = userService.validateUpdateUser(updateUser)
if (!updateUserValidationResult.valid) {
log.error "Update of ${user.name} failed. ${updateUserValidationResult.errorCollection}"
return
}
userService.updateUser(updateUserValidationResult)
log.info "${updateUser.name} added"
}
om.atlassian.crowd.exception.runtime.OperationFailedException: org.springframework.transaction.CannotCreateTransactionException: Could not create DirContext instance for transaction; nested exception is org.springframework.ldap.CommunicationException: ldap.gfi.es:2121; nested exception is javax.naming.CommunicationException: ldap.xxx.xx:2121 [Root exception is java.lang.ClassNotFoundException: com.atlassian.crowd.directory.ssl.LdapHostnameVerificationSSLSocketFactory]
at com.atlassian.crowd.embedded.core.CrowdServiceImpl.addUserToGroup(CrowdServiceImpl.java:557)
at com.atlassian.jira.security.groups.DefaultGroupManager.addUserToGroup(DefaultGroupManager.java:415)
at com.atlassian.jira.security.groups.RequestCachingGroupManager.addUserToGroup(RequestCachingGroupManager.java:199)
at com.atlassian.jira.security.groups.GroupManager$addUserToGroup$1.call(Unknown Source)
at Script152.addtoGroup(Script152.groovy:56)
at Script152$_run_closure3$_closure4$_closure5$_closure6.doCall(Script152.groovy:43)
at Script152$_run_closure3$_closure4$_closure5.doCall(Script152.groovy:42)
at Script152$_run_closure3$_closure4$_closure5.doCall(Script152.groovy)
at Script152$_run_closure3$_closure4.doCall(Script152.groovy:41)
at Script152$_run_closure3$_closure4.doCall(Script152.groovy)
at Script152$_run_closure3.doCall(Script152.groovy:40)
at Script152$_run_closure3.doCall(Script152.groovy)
at Script152.run(Script152.groovy:39)
Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not create DirContext instance for transaction; nested exception is org.springframework.ldap.CommunicationException: ldap.xxx.xx:2121; nested exception is javax.naming.CommunicationException: ldap.xxx.xx:2121 [Root exception is java.lang.ClassNotFoundException: com.atlassian.crowd.directory.ssl.LdapHostnameVerificationSSLSocketFactory]
at org.springframework.transaction.compensating.support.AbstractCompensatingTransactionManagerDelegate.doBegin(AbstractCompensatingTransactionManagerDelegate.java:90)
at org.springframework.ldap.transaction.compensating.manager.ContextSourceTransactionManager.doBegin(ContextSourceTransactionManager.java:123)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:378)
at com.atlassian.crowd.directory.SpringLDAPConnector.pageSearchResults(SpringLDAPConnector.java:345)
at com.atlassian.crowd.directory.SpringLDAPConnector.searchEntitiesWithRequestControls(SpringLDAPConnector.java:431)
at com.atlassian.crowd.directory.SpringLDAPConnector.searchEntities(SpringLDAPConnector.java:415)
at com.atlassian.crowd.directory.SpringLDAPConnector.searchGroupObjectsOfSpecifiedGroupType(SpringLDAPConnector.java:1071)
at com.atlassian.crowd.directory.SpringLDAPConnector.searchGroupObjects(SpringLDAPConnector.java:1100)
at com.atlassian.crowd.directory.SpringLDAPConnector.findGroupWithAttributesByName(SpringLDAPConnector.java:1019)
at com.atlassian.crowd.directory.SpringLDAPConnector.findGroupByName(SpringLDAPConnector.java:1006)
at com.atlassian.crowd.directory.SpringLDAPConnector.findGroupByName(SpringLDAPConnector.java:115)
at com.atlassian.crowd.directory.DbCachingRemoteDirectory.isRemoteGroup(DbCachingRemoteDirectory.java:714)
at com.atlassian.crowd.directory.DbCachingRemoteDirectory.addUserToGroup(DbCachingRemoteDirectory.java:726)
at com.atlassian.crowd.manager.directory.DirectoryManagerGeneric.addUserToGroup(DirectoryManagerGeneric.java:633)
at com.atlassian.crowd.manager.application.ApplicationServiceGeneric.addUserToGroup(ApplicationServiceGeneric.java:1026)
at com.atlassian.crowd.embedded.core.CrowdServiceImpl.addUserToGroup(CrowdServiceImpl.java:543)
... 12 more
Caused by: org.springframework.ldap.CommunicationException: ldap.gfi.es:2121; nested exception is javax.naming.CommunicationException: ldap.gfi.es:2121 [Root exception is java.lang.ClassNotFoundException: com.atlassian.crowd.directory.ssl.LdapHostnameVerificationSSLSocketFactory]
at org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:108)
at org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.java:355)
at org.springframework.ldap.core.support.AbstractContextSource.doGetContext(AbstractContextSource.java:139)
at org.springframework.ldap.core.support.AbstractContextSource.getReadWriteContext(AbstractContextSource.java:174)
at org.springframework.ldap.transaction.compensating.manager.ContextSourceTransactionManagerDelegate.getNewHolder(ContextSourceTransactionManagerDelegate.java:96)
at org.springframework.transaction.compensating.support.AbstractCompensatingTransactionManagerDelegate.doBegin(AbstractCompensatingTransactionManagerDelegate.java:83)
... 27 more
Caused by: javax.naming.CommunicationException: ldap.gfi.es:2121 [Root exception is java.lang.ClassNotFoundException: com.atlassian.crowd.directory.ssl.LdapHostnameVerificationSSLSocketFactory]
at com.sun.jndi.ldap.Connection.<init>(Connection.java:238)
at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:137)
at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1615)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2749)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:319)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)
at org.springframework.ldap.core.support.LdapContextSource.getDirContextInstance(LdapContextSource.java:42)
at org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.java:343)
... 31 more
Caused by: java.lang.ClassNotFoundException: com.atlassian.crowd.directory.ssl.LdapHostnameVerificationSSLSocketFactory
at com.atlassian.plugins.rest.module.ChainingClassLoader.loadClass(ChainingClassLoader.java:58)
at com.sun.jndi.ldap.VersionHelper12.loadClass(VersionHelper12.java:72)
at com.sun.jndi.ldap.Connection.createSocket(Connection.java:293)
at com.sun.jndi.ldap.Connection.<init>(Connection.java:215)
... 41 more