package org.airsonic.player.service; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.springframework.web.util.UriComponentsBuilder; import java.util.Arrays; import java.util.Collection; import static org.junit.Assert.assertEquals; @RunWith(Parameterized.class) public class JWTSecurityServiceTest { private final String key = "someKey"; private final JWTSecurityService service = new JWTSecurityService(settingsWithKey(key)); private final String uriString; private final Algorithm algorithm = JWTSecurityService.getAlgorithm(key); private final JWTVerifier verifier = JWT.require(algorithm).build(); private final String expectedClaimString; @Parameterized.Parameters public static Collection data() { return Arrays.asList(new Object[][] { { "http://localhost:8080/airsonic/stream?id=4", "/airsonic/stream?id=4" }, { "/airsonic/stream?id=4", "/airsonic/stream?id=4" }, }); } public JWTSecurityServiceTest(String uriString, String expectedClaimString) { this.uriString = uriString; this.expectedClaimString = expectedClaimString; } @Test public void addJWTToken() { UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(uriString); String actualUri = service.addJWTToken(builder).build().toUriString(); String jwtToken = UriComponentsBuilder.fromUriString(actualUri).build().getQueryParams().getFirst( JWTSecurityService.JWT_PARAM_NAME); DecodedJWT verify = verifier.verify(jwtToken); Claim claim = verify.getClaim(JWTSecurityService.CLAIM_PATH); assertEquals(expectedClaimString, claim.asString()); } private SettingsService settingsWithKey(String jwtKey) { return new SettingsService() { @Override public String getJWTKey() { return jwtKey; } }; } }