6363import org .labkey .api .security .permissions .SiteAdminPermission ;
6464import org .labkey .api .security .roles .ApplicationAdminRole ;
6565import org .labkey .api .security .roles .SiteAdminRole ;
66+ import org .labkey .api .thumbnail .ThumbnailProvider ;
67+ import org .labkey .api .thumbnail .ThumbnailService ;
68+ import org .labkey .api .thumbnail .ThumbnailService .ImageType ;
6669import org .labkey .api .util .HeartBeat ;
6770import org .labkey .api .util .HtmlString ;
6871import org .labkey .api .util .LinkBuilder ;
@@ -455,7 +458,7 @@ public static Date getMostRecentLogin()
455458 Aggregate maxLoginValue = new Aggregate (createdFk , Aggregate .BaseType .MAX , null , true );
456459
457460 TableSelector logins = getRecentLoginOrOuts (LoggedInOrOut .in , null , uat , Collections .singleton (createdCol ));
458- Aggregate .Result result = logins .getAggregates (Collections .singletonList (maxLoginValue )).get (createdCol .getName ()).get ( 0 );
461+ Aggregate .Result result = logins .getAggregates (Collections .singletonList (maxLoginValue )).get (createdCol .getName ()).getFirst ( );
459462 return (Date ) result .getValue ();
460463 }
461464
@@ -472,7 +475,7 @@ public static int getActiveDaysCount(Date since)
472475 Aggregate countDistinctDates = new Aggregate (datePartCol .getFieldKey (), Aggregate .BaseType .COUNT , null , true );
473476
474477 TableSelector logins = getRecentLoginOrOuts (LoggedInOrOut .in , since , uat , Collections .singleton (datePartCol ));
475- Aggregate .Result result = logins .getAggregates (Collections .singletonList (countDistinctDates )).get (datePartCol .getName ()).get ( 0 );
478+ Aggregate .Result result = logins .getAggregates (Collections .singletonList (countDistinctDates )).get (datePartCol .getName ()).getFirst ( );
476479 return Math .toIntExact ((long ) result .getValue ());
477480 }
478481
@@ -502,7 +505,6 @@ public static int getAuthCount(@Nullable Date since, boolean excludeSystemUsers,
502505 sql .append (" AND uat.Comment LIKE " );
503506 sql .appendStringLiteral ("%" + UserAuditEvent .LOGGED_IN + "%" , uat .getSqlDialect ());
504507
505-
506508 if (apiKeyOnly )
507509 {
508510 sql .append (" AND uat.Comment LIKE " );
@@ -908,17 +910,17 @@ public static void auditBadVerificationToken(int userId, String oldEmail, String
908910
909911 public static void deleteUser (int userId ) throws UserManagementException
910912 {
911- User deletUser = getUser (userId );
912- if (null == deletUser )
913+ User deleteUser = getUser (userId );
914+ if (null == deleteUser )
913915 return ;
914916
915- removeRecentUser (deletUser );
917+ removeRecentUser (deleteUser );
916918
917- List <Throwable > errors = fireDeleteUser (deletUser );
919+ List <Throwable > errors = fireDeleteUser (deleteUser );
918920
919921 if (!errors .isEmpty ())
920922 {
921- Throwable first = errors .get ( 0 );
923+ Throwable first = errors .getFirst ( );
922924 if (first instanceof RuntimeException )
923925 throw (RuntimeException )first ;
924926 else
@@ -927,19 +929,25 @@ public static void deleteUser(int userId) throws UserManagementException
927929
928930 try (Transaction transaction = CORE .getScope ().ensureTransaction ())
929931 {
930- boolean needToEnsureRootAdmins = SecurityManager .isRootAdmin (deletUser );
932+ boolean needToEnsureRootAdmins = SecurityManager .isRootAdmin (deleteUser );
931933
932934 SqlExecutor executor = new SqlExecutor (CORE .getSchema ());
933935 executor .execute ("DELETE FROM " + CORE .getTableInfoRoleAssignments () + " WHERE UserId=?" , userId );
934936 executor .execute ("DELETE FROM " + CORE .getTableInfoMembers () + " WHERE UserId=?" , userId );
935- addToUserHistory (deletUser , deletUser .getEmail () + " was deleted from the system" );
937+ addToUserHistory (deleteUser , deleteUser .getEmail () + " was deleted from the system" );
936938
937939 executor .execute ("DELETE FROM " + CORE .getTableInfoUsersData () + " WHERE UserId=?" , userId );
938- LoginManager .deleteLoginsRow (deletUser , null );
940+ LoginManager .deleteLoginsRow (deleteUser , null );
939941 executor .execute ("DELETE FROM " + CORE .getTableInfoPrincipals () + " WHERE UserId=?" , userId );
940942 ApiKeyManager .get ().deleteKeys (new SimpleFilter (FieldKey .fromParts ("CreatedBy" ), userId ));
941943
942- OntologyManager .deleteOntologyObject (deletUser .getEntityId (), ContainerManager .getSharedContainer (), true );
944+ OntologyManager .deleteOntologyObject (deleteUser .getEntityId (), ContainerManager .getSharedContainer (), true );
945+
946+ // GitHub Issue #714: Delete the user's avatar. Avatars use ImageType.Large, but delete all types just in case that changes.
947+ ThumbnailService svc = ThumbnailService .get ();
948+ ThumbnailProvider provider = new AvatarThumbnailProvider (deleteUser );
949+ Arrays .stream (ImageType .values ())
950+ .forEach (imageType -> svc .deleteThumbnail (provider , imageType ));
943951
944952 // Clear user list immediately (before the last root admin check) and again after commit/rollback
945953 transaction .addCommitTask (UserManager ::clearUserList , CommitTaskOption .IMMEDIATE , CommitTaskOption .POSTCOMMIT , CommitTaskOption .POSTROLLBACK );
@@ -952,7 +960,7 @@ public static void deleteUser(int userId) throws UserManagementException
952960 catch (Exception e )
953961 {
954962 LOG .error ("deleteUser" , e );
955- throw new UserManagementException (deletUser .getEmail (), e );
963+ throw new UserManagementException (deleteUser .getEmail (), e );
956964 }
957965
958966 //TODO: Delete User files
@@ -986,7 +994,7 @@ public static void setUserActive(User currentUser, User userToAdjust, boolean ac
986994
987995 if (!errors .isEmpty ())
988996 {
989- Throwable first = errors .get ( 0 );
997+ Throwable first = errors .getFirst ( );
990998 if (first instanceof RuntimeException )
991999 throw (RuntimeException )first ;
9921000 else
@@ -1027,7 +1035,7 @@ public static void setUserActive(User currentUser, User userToAdjust, boolean ac
10271035 }
10281036 catch (RuntimeSQLException e )
10291037 {
1030- LOG .error ("setUserActive: " + e );
1038+ LOG .error ("setUserActive" , e );
10311039 throw new UserManagementException (userToAdjust .getEmail (), e );
10321040 }
10331041 }
0 commit comments