package com.moral.security.model.token; import com.moral.security.model.Scopes; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import org.springframework.security.authentication.BadCredentialsException; import java.util.List; import java.util.Optional; /** * RefreshToken * * @author vladimir.stankovic * * Aug 19, 2016 */ @SuppressWarnings("unchecked") public class RefreshToken implements JwtToken { private Jws claims; private RefreshToken(Jws claims) { this.claims = claims; } /** * Creates and validates Refresh token * * @param token * @param signingKey * * @throws BadCredentialsException * * @return */ public static Optional create(RawAccessJwtToken token, String signingKey) { Jws claims = token.parseClaims(signingKey); List scopes = claims.getBody().get("scopes", List.class); if (scopes == null || scopes.isEmpty() || !scopes.stream().filter(scope -> Scopes.REFRESH_TOKEN.authority().equals(scope)).findFirst().isPresent()) { return Optional.empty(); } return Optional.of(new RefreshToken(claims)); } @Override public String getToken() { return null; } public Jws getClaims() { return claims; } public String getJti() { return claims.getBody().getId(); } public String getSubject() { return claims.getBody().getSubject(); } }