use of org.apache.knox.gateway.services.security.token.TokenMetadata in project knox by apache.
the class JDBCTokenStateServiceTest method testAddMetadata.
@Test(expected = UnknownTokenException.class)
public void testAddMetadata() throws Exception {
final String tokenId = UUID.randomUUID().toString();
final String passcode = UUID.randomUUID().toString();
final String passcodeMac = tokenMAC.hash(tokenId, 1, "sampleUser", passcode);
final TokenMetadata tokenMetadata = new TokenMetadata("sampleUser", "my test comment", false);
tokenMetadata.setPasscode(passcodeMac);
jdbcTokenStateService.addToken(tokenId, 1, 1, 1);
jdbcTokenStateService.addMetadata(tokenId, tokenMetadata);
assertEquals("sampleUser", jdbcTokenStateService.getTokenMetadata(tokenId).getUserName());
assertEquals("my test comment", jdbcTokenStateService.getTokenMetadata(tokenId).getComment());
assertFalse(jdbcTokenStateService.getTokenMetadata(tokenId).isEnabled());
final String storedPasscode = jdbcTokenStateService.getTokenMetadata(tokenId).getPasscode();
assertEquals(passcodeMac, storedPasscode);
assertEquals("sampleUser", getStringTokenAttributeFromDatabase(tokenId, getSelectMetadataSql(TokenMetadata.USER_NAME)));
assertEquals("my test comment", getStringTokenAttributeFromDatabase(tokenId, getSelectMetadataSql(TokenMetadata.COMMENT)));
assertEquals("false", getStringTokenAttributeFromDatabase(tokenId, getSelectMetadataSql(TokenMetadata.ENABLED)));
final String storedPasscodeInDb = new String(Base64.decodeBase64(getStringTokenAttributeFromDatabase(tokenId, getSelectMetadataSql(TokenMetadata.PASSCODE))), UTF_8);
assertEquals(passcodeMac, storedPasscodeInDb);
// enable the token (it was disabled)
tokenMetadata.setEnabled(true);
jdbcTokenStateService.addMetadata(tokenId, tokenMetadata);
// set token metadata back to original in the in-memory cache with disabled=false
// we still expect an enabled token because in-memory lookup should be skipped while fetching token metadata
final Map<String, TokenMetadata> metadataMap = new ConcurrentHashMap<>();
metadataMap.put(tokenId, tokenMetadata);
FieldUtils.writeField(jdbcTokenStateService, "metadataMap", metadataMap, true);
assertTrue(jdbcTokenStateService.getTokenMetadata(tokenId).isEnabled());
assertEquals("true", getStringTokenAttributeFromDatabase(tokenId, getSelectMetadataSql(TokenMetadata.ENABLED)));
// remove and get -> expect UnknownTokenException
jdbcTokenStateService.removeToken(tokenId);
jdbcTokenStateService.getTokenMetadata(tokenId);
}
use of org.apache.knox.gateway.services.security.token.TokenMetadata in project knox by apache.
the class JDBCTokenStateServiceTest method saveToken.
private void saveToken(String user, String tokenId, long issueTime, long expiration, String comment) {
jdbcTokenStateService.addToken(tokenId, issueTime, expiration);
jdbcTokenStateService.addMetadata(tokenId, new TokenMetadata(user, comment));
}
use of org.apache.knox.gateway.services.security.token.TokenMetadata in project knox by apache.
the class TokenResource method triesToRevokeOwnToken.
private boolean triesToRevokeOwnToken(String tokenId, String revoker) throws UnknownTokenException {
final TokenMetadata metadata = tokenStateService.getTokenMetadata(tokenId);
final String tokenUserName = metadata == null ? "" : metadata.getUserName();
return StringUtils.isNotBlank(revoker) && revoker.equals(tokenUserName);
}
use of org.apache.knox.gateway.services.security.token.TokenMetadata in project knox by apache.
the class TokenResource method setTokenEnabledFlag.
private Response setTokenEnabledFlag(String tokenId, boolean enabled) {
String error = "";
ErrorCode errorCode = ErrorCode.UNKNOWN;
if (tokenStateService == null) {
error = "Unable to " + (enabled ? "enable" : "disable") + " tokens because token management is not configured";
errorCode = ErrorCode.CONFIGURATION_ERROR;
} else {
try {
final TokenMetadata tokenMetadata = tokenStateService.getTokenMetadata(tokenId);
if (enabled && tokenMetadata.isEnabled()) {
error = "Token is already enabled";
errorCode = ErrorCode.ALREADY_ENABLED;
} else if (!enabled && !tokenMetadata.isEnabled()) {
error = "Token is already disabled";
errorCode = ErrorCode.ALREADY_DISABLED;
} else {
tokenMetadata.setEnabled(enabled);
tokenStateService.addMetadata(tokenId, tokenMetadata);
}
} catch (UnknownTokenException e) {
error = safeGetMessage(e);
errorCode = ErrorCode.UNKNOWN_TOKEN;
}
}
if (error.isEmpty()) {
return Response.status(Response.Status.OK).entity("{\n \"setEnabledFlag\": \"true\",\n \"isEnabled\": \"" + enabled + "\"\n}\n").build();
} else {
log.badSetEnabledFlagRequest(getTopologyName(), Tokens.getTokenIDDisplayText(tokenId), error);
return Response.status(Response.Status.BAD_REQUEST).entity("{\n \"setEnabledFlag\": \"false\",\n \"error\": \"" + error + "\",\n \"code\": " + errorCode.toInt() + "\n}\n").build();
}
}
use of org.apache.knox.gateway.services.security.token.TokenMetadata in project knox by apache.
the class TokenIDAsHTTPBasicCredsFederationFilterTest method addTokenState.
private void addTokenState(final SignedJWT jwt, long issueTime, String subject, String passcode) {
try {
JWTToken token = new JWTToken(jwt.serialize());
tss.addToken(token, issueTime);
final TokenMetadata metadata = new TokenMetadata(subject);
metadata.setPasscode(tokenMAC.hash(TokenUtils.getTokenId(token), issueTime, subject, passcode));
tss.addMetadata(TokenUtils.getTokenId(token), metadata);
} catch (ParseException e) {
Assert.fail(e.getMessage());
}
}
Aggregations