2016-07-04 19:20:20 +02:00
package org.gcube.portal.usersaccount ;
2020-01-30 12:58:46 +01:00
import java.util.ArrayList ;
import java.util.List ;
import org.gcube.common.portal.PortalContext ;
2016-07-05 14:09:31 +02:00
import org.gcube.portal.notifications.thread.NewUserAccountNotificationThread ;
2020-01-17 17:07:32 +01:00
import org.gcube.portal.removeaccount.thread.RemoveUserTokenFromInfraThread ;
2020-01-17 16:58:07 +01:00
import org.gcube.portal.removeaccount.thread.RemovedUserAccountThread ;
import org.gcube.portal.removeaccount.thread.RemovedUserFromLDAPThread ;
2020-01-30 12:58:46 +01:00
import org.gcube.vomanagement.usermanagement.GroupManager ;
import org.gcube.vomanagement.usermanagement.RoleManager ;
import org.gcube.vomanagement.usermanagement.UserManager ;
import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager ;
import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager ;
import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager ;
2020-02-05 16:09:38 +01:00
import org.gcube.vomanagement.usermanagement.model.GCubeRole ;
import org.gcube.vomanagement.usermanagement.model.GatewayRolesNames ;
2016-07-04 19:20:20 +02:00
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import com.liferay.portal.ModelListenerException ;
import com.liferay.portal.model.BaseModelListener ;
import com.liferay.portal.model.User ;
/ * *
*
* @author Massimiliano Assante , CNR - ISTI
*
* Model Listeners are used to listen for events on models and do something in response .
* They ’ re similar in concept to custom action hooks , which perform actions in response to portal events ( user login , for example ) .
* Model listeners implement the ModelListener interface .
*
* @see https : //dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/creating-model-listeners
* /
public class MyCreateUserAccountListener extends BaseModelListener < User > {
private static final Logger _log = LoggerFactory . getLogger ( MyCreateUserAccountListener . class ) ;
final String SUBJECT = " New user account notification " ;
2020-01-30 12:58:46 +01:00
private GroupManager gm ;
private UserManager uMan ;
private RoleManager rm ;
2020-01-17 16:58:07 +01:00
2016-07-04 19:20:20 +02:00
@Override
2020-01-17 16:58:07 +01:00
public void onAfterCreate ( User user ) throws ModelListenerException {
2016-07-05 14:09:31 +02:00
_log . info ( " onAfterCreate NewUserAccount listener for: " + user . getScreenName ( ) + " / " + user . getFullName ( ) ) ;
2020-01-17 16:58:07 +01:00
Thread WorkspaceAccountCreationThread = new Thread ( new WorkspaceCreateAccountThread ( user . getScreenName ( ) , user . getFullName ( ) , user . getEmailAddress ( ) ) ) ;
WorkspaceAccountCreationThread . start ( ) ;
2020-02-03 16:22:43 +01:00
Thread emailManagersThread = new Thread ( new NewUserAccountNotificationThread ( user . getScreenName ( ) , user . getFullName ( ) , user . getEmailAddress ( ) ) ) ;
emailManagersThread . start ( ) ;
2020-01-17 16:58:07 +01:00
}
@Override
public void onBeforeRemove ( User user ) throws ModelListenerException {
2020-01-30 12:58:46 +01:00
gm = new LiferayGroupManager ( ) ;
uMan = new LiferayUserManager ( ) ;
rm = new LiferayRoleManager ( ) ;
2020-01-17 16:58:07 +01:00
_log . info ( " onBeforeRemove userAccount listener for: " + user . getScreenName ( ) + " / " + user . getFullName ( ) ) ;
String username2Delete = user . getScreenName ( ) ;
_log . info ( " Trying to remove user from JCR and not notify infra-managers ... " ) ;
2020-01-30 12:58:46 +01:00
try {
2020-02-05 16:09:38 +01:00
_log . debug ( " Getting super user with role {} " , GatewayRolesNames . INFRASTRUCTURE_MANAGER . getRoleName ( ) ) ;
2020-01-30 12:58:46 +01:00
//get the super user
String infraContext = " / " + PortalContext . getConfiguration ( ) . getInfrastructureName ( ) ;
2020-02-05 16:09:38 +01:00
long rootgroupId = gm . getGroupIdFromInfrastructureScope ( infraContext ) ;
User theAdmin = LiferayUserManager . getRandomUserWithRole ( rootgroupId , GatewayRolesNames . INFRASTRUCTURE_MANAGER ) ;
if ( theAdmin = = null ) {
System . out . println ( " Cannot add the user as VRE Folder admin: there is no user having role {} on context: " + GatewayRolesNames . INFRASTRUCTURE_MANAGER . getRoleName ( ) ) ;
}
String adminUsername = theAdmin . getScreenName ( ) ;
2020-02-03 16:22:43 +01:00
_log . info ( " Got the super user: {} " , adminUsername ) ;
String theAdminToken = PortalContext . getConfiguration ( ) . getCurrentUserToken ( infraContext , adminUsername ) ;
List < String > rolesString = new ArrayList < String > ( ) ;
2020-02-05 16:09:38 +01:00
List < GCubeRole > theAdminRoles = rm . listRolesByUserAndGroup ( theAdmin . getUserId ( ) , rootgroupId ) ;
for ( GCubeRole gCubeRole : theAdminRoles ) {
rolesString . add ( gCubeRole . getRoleName ( ) ) ;
}
rolesString . add ( GatewayRolesNames . INFRASTRUCTURE_MANAGER . getRoleName ( ) ) ;
2020-02-03 16:22:43 +01:00
Thread dropUserWorkspaceThread = new Thread ( new RemovedUserAccountThread ( username2Delete , theAdminToken , rolesString ) ) ;
dropUserWorkspaceThread . start ( ) ;
2020-01-17 16:58:07 +01:00
_log . info ( " Trying to remove user from LDAP ... " ) ;
Thread removeFromLDAPThread = new Thread ( new RemovedUserFromLDAPThread ( username2Delete ) ) ;
removeFromLDAPThread . start ( ) ;
2020-01-30 12:58:46 +01:00
2020-01-17 17:07:32 +01:00
_log . info ( " Trying to remove user from Auth ... " ) ;
Thread deleteAllUserAuthThread = new Thread ( new RemoveUserTokenFromInfraThread ( username2Delete ) ) ;
deleteAllUserAuthThread . start ( ) ;
2020-01-17 16:58:07 +01:00
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
}
// @Override
// public void onAfterRemove(User user)
2016-07-04 19:20:20 +02:00
}