Skip to content

Commit

Permalink
5411-app - Reset auth token for Json Reports user on app-server-start
Browse files Browse the repository at this point in the history
- keep I_AD_User_AuthToken records out of the "repository"
- refactor/deduplicate code
#5411
  • Loading branch information
metas-ts committed Aug 1, 2019
1 parent 093e966 commit 9de30f6
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 45 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package de.metas.security;

import static org.adempiere.model.InterfaceWrapperHelper.saveRecord;

import java.util.List;
import java.util.UUID;

import org.adempiere.ad.dao.IQueryBL;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.model.InterfaceWrapperHelper;
import org.adempiere.service.ClientId;
import org.compiere.model.I_AD_User_AuthToken;
import org.springframework.stereotype.Repository;
Expand Down Expand Up @@ -49,7 +50,7 @@ public UserAuthToken getByToken(@NonNull final String token)
return authTokensByToken.getOrLoad(token, () -> retrieveByToken(token));
}

private UserAuthToken retrieveByToken(final String token)
private UserAuthToken retrieveByToken(@NonNull final String token)
{
final List<I_AD_User_AuthToken> userAuthTokens = Services.get(IQueryBL.class)
.createQueryBuilder(I_AD_User_AuthToken.class)
Expand All @@ -58,38 +59,38 @@ private UserAuthToken retrieveByToken(final String token)
.setLimit(2)
.create()
.list(I_AD_User_AuthToken.class);
if (userAuthTokens.isEmpty())
{
throw new AdempiereException("Invalid token (1)");
}
else if (userAuthTokens.size() > 1)
{
throw new AdempiereException("Invalid token (2)");
}

return toUserAuthToken(userAuthTokens.get(0));
}

private static UserAuthToken toUserAuthToken(final I_AD_User_AuthToken userAuthTokenPO)
{
return UserAuthToken.builder()
.userId(UserId.ofRepoId(userAuthTokenPO.getAD_User_ID()))
.authToken(userAuthTokenPO.getAuthToken())
.description(userAuthTokenPO.getDescription())
.clientId(ClientId.ofRepoId(userAuthTokenPO.getAD_Client_ID()))
.orgId(OrgId.ofRepoId(userAuthTokenPO.getAD_Org_ID()))
.roleId(RoleId.ofRepoId(userAuthTokenPO.getAD_Role_ID()))
.build();
return extractSingleToken(userAuthTokens);
}

/** Supposed to be called from model interceptor. */
public void beforeSave(final I_AD_User_AuthToken userAuthTokenPO)
{
if (Check.isEmpty(userAuthTokenPO.getAuthToken(), true))
{
userAuthTokenPO.setAuthToken(generateAuthTokenString());
}
fromRecord(userAuthTokenPO); // make sure it's valid
}



public void resetAuthTokensAndSave(@NonNull final UserId userId, @NonNull final RoleId roleId)
{
final IQueryBL queryBL = Services.get(IQueryBL.class);

final List<I_AD_User_AuthToken> userAuthTokenRecords = queryBL
.createQueryBuilder(I_AD_User_AuthToken.class)
.addEqualsFilter(I_AD_User_AuthToken.COLUMN_AD_User_ID, userId)
.addEqualsFilter(I_AD_User_AuthToken.COLUMN_AD_Role_ID, roleId)
.create()
.list(I_AD_User_AuthToken.class);

toUserAuthToken(userAuthTokenPO); // make sure it's valid
for (final I_AD_User_AuthToken userAuthTokenRecord : userAuthTokenRecords)
{
userAuthTokenRecord.setAuthToken(generateAuthTokenString());
saveRecord(userAuthTokenRecord);
}
}

private static String generateAuthTokenString()
Expand All @@ -98,12 +99,6 @@ private static String generateAuthTokenString()
}

public UserAuthToken retrieveByUserId(@NonNull final UserId userId, @NonNull final RoleId roleId)
{

return toUserAuthToken(retrieveUserAuthTokenPOByUserId(userId, roleId));
}

public I_AD_User_AuthToken retrieveUserAuthTokenPOByUserId(@NonNull final UserId userId, @NonNull final RoleId roleId)
{
final List<I_AD_User_AuthToken> userAuthTokens = Services.get(IQueryBL.class)
.createQueryBuilder(I_AD_User_AuthToken.class)
Expand All @@ -114,6 +109,11 @@ public I_AD_User_AuthToken retrieveUserAuthTokenPOByUserId(@NonNull final UserId
.create()
.list(I_AD_User_AuthToken.class);

return extractSingleToken(userAuthTokens);
}

private UserAuthToken extractSingleToken(@NonNull final List<I_AD_User_AuthToken> userAuthTokens)
{
if (userAuthTokens.isEmpty())
{
throw new AdempiereException("Invalid token (1)");
Expand All @@ -123,12 +123,18 @@ else if (userAuthTokens.size() > 1)
throw new AdempiereException("Invalid token (2)");
}

return userAuthTokens.get(0);
return fromRecord(userAuthTokens.get(0));
}

public void resetAuthTokenAndSave(final I_AD_User_AuthToken userAuthTokenPO)
private static UserAuthToken fromRecord(final I_AD_User_AuthToken userAuthTokenPO)
{
userAuthTokenPO.setAuthToken(generateAuthTokenString());
InterfaceWrapperHelper.save(userAuthTokenPO);
return UserAuthToken.builder()
.userId(UserId.ofRepoId(userAuthTokenPO.getAD_User_ID()))
.authToken(userAuthTokenPO.getAuthToken())
.description(userAuthTokenPO.getDescription())
.clientId(ClientId.ofRepoId(userAuthTokenPO.getAD_Client_ID()))
.orgId(OrgId.ofRepoId(userAuthTokenPO.getAD_Org_ID()))
.roleId(RoleId.ofRepoId(userAuthTokenPO.getAD_Role_ID()))
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import org.adempiere.ad.housekeeping.spi.IStartupHouseKeepingTask;
import org.compiere.SpringContextHolder;
import org.compiere.model.I_AD_User_AuthToken;
import org.springframework.stereotype.Component;

import de.metas.security.RoleId;
Expand Down Expand Up @@ -40,15 +39,6 @@ public class ResetJsonReportsAuthTokenHouseKeepingTask implements IStartupHouseK
@Override
public void executeTask()
{
final I_AD_User_AuthToken authToeknPO = getUserAuhTokenPO();
userAuthTokenRepo.resetAuthTokenAndSave(authToeknPO);
userAuthTokenRepo.resetAuthTokensAndSave(UserId.JSON_REPORTS, RoleId.JSON_REPORTS);
}


private I_AD_User_AuthToken getUserAuhTokenPO()
{
return userAuthTokenRepo.retrieveUserAuthTokenPOByUserId(UserId.JSON_REPORTS, RoleId.JSON_REPORTS);
}


}

0 comments on commit 9de30f6

Please sign in to comment.