/** * Returns the claim value as a {@code Boolean} or {@code null} if it does not exist. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist */ default Boolean getClaimAsBoolean(String claim) { return (this.containsClaim(claim) ? Boolean.valueOf(this.getClaimAsString(claim)) : null); }
/** * Returns the claim value as a {@code String} or {@code null} if it does not exist or is equal to {@code null}. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist or is equal to {@code null} */ default String getClaimAsString(String claim) { if (!this.containsClaim(claim)) { return null; } Object claimValue = this.getClaims().get(claim); return (claimValue != null ? claimValue.toString() : null); }
@Test public void getClaimAsStringWhenValueIsNullThenReturnNull() { String claimName = "claim-with-null-value"; this.claims.put(claimName, null); assertThat(this.claimAccessor.getClaimAsString(claimName)).isNull(); } }
/** * Returns {@code true} if the claim exists in {@link #getClaims()}, otherwise {@code false}. * * @param claim the name of the claim * @return {@code true} if the claim exists, otherwise {@code false} */ default Boolean containsClaim(String claim) { Assert.notNull(claim, "claim cannot be null"); return this.getClaims().containsKey(claim); }
@Test public void getClaimAsInstantWhenDoubleTypeSecondsThenReturnInstant() { Instant expectedClaimValue = Instant.now(); String claimName = "doubleSeconds"; this.claims.put(claimName, Long.valueOf(expectedClaimValue.getEpochSecond()).doubleValue()); assertThat(this.claimAccessor.getClaimAsInstant(claimName)).isBetween( expectedClaimValue.minusSeconds(1), expectedClaimValue.plusSeconds(1)); }
/** * Returns {@code true} if the claim exists in {@link #getClaims()}, otherwise {@code false}. * * @param claim the name of the claim * @return {@code true} if the claim exists, otherwise {@code false} */ default Boolean containsClaim(String claim) { Assert.notNull(claim, "claim cannot be null"); return this.getClaims().containsKey(claim); }
@Test public void getClaimAsInstantWhenIntegerTypeSecondsThenReturnInstant() { Instant expectedClaimValue = Instant.now(); String claimName = "integerSeconds"; this.claims.put(claimName, Long.valueOf(expectedClaimValue.getEpochSecond()).intValue()); assertThat(this.claimAccessor.getClaimAsInstant(claimName)).isBetween( expectedClaimValue.minusSeconds(1), expectedClaimValue.plusSeconds(1)); }
/** * Returns the claim value as a {@code List<String>} * or {@code null} if it does not exist or cannot be assigned to a {@code List}. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist or cannot be assigned to a {@code List} */ default List<String> getClaimAsStringList(String claim) { if (!this.containsClaim(claim) || !List.class.isAssignableFrom(this.getClaims().get(claim).getClass())) { return null; } List<String> claimValues = new ArrayList<>(); ((List<?>) this.getClaims().get(claim)).forEach(e -> claimValues.add(e.toString())); return claimValues; } }
/** * Returns the claim value as an {@code URL} or {@code null} if it does not exist. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist */ default URL getClaimAsURL(String claim) { if (!this.containsClaim(claim)) { return null; } try { return new URL(this.getClaimAsString(claim)); } catch (MalformedURLException ex) { throw new IllegalArgumentException("Unable to convert claim '" + claim + "' to URL: " + ex.getMessage(), ex); } }
/** * Returns {@code true} if the claim exists in {@link #getClaims()}, otherwise {@code false}. * * @param claim the name of the claim * @return {@code true} if the claim exists, otherwise {@code false} */ default Boolean containsClaim(String claim) { Assert.notNull(claim, "claim cannot be null"); return this.getClaims().containsKey(claim); }
@Test public void getClaimAsInstantWhenDateTypeThenReturnInstant() { Instant expectedClaimValue = Instant.now(); String claimName = "date"; this.claims.put(claimName, Date.from(expectedClaimValue)); assertThat(this.claimAccessor.getClaimAsInstant(claimName)).isBetween( expectedClaimValue.minusSeconds(1), expectedClaimValue.plusSeconds(1)); }
/** * Returns the claim value as a {@code Map<String, Object>} * or {@code null} if it does not exist or cannot be assigned to a {@code Map}. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist or cannot be assigned to a {@code Map} */ default Map<String, Object> getClaimAsMap(String claim) { if (!this.containsClaim(claim) || !Map.class.isAssignableFrom(this.getClaims().get(claim).getClass())) { return null; } Map<String, Object> claimValues = new HashMap<>(); ((Map<?, ?>) this.getClaims().get(claim)).forEach((k, v) -> claimValues.put(k.toString(), v)); return claimValues; }
/** * Returns the claim value as a {@code Boolean} or {@code null} if it does not exist. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist */ default Boolean getClaimAsBoolean(String claim) { return (this.containsClaim(claim) ? Boolean.valueOf(this.getClaimAsString(claim)) : null); }
@Test public void getClaimAsInstantWhenLongTypeSecondsThenReturnInstant() { Instant expectedClaimValue = Instant.now(); String claimName = "longSeconds"; this.claims.put(claimName, expectedClaimValue.getEpochSecond()); assertThat(this.claimAccessor.getClaimAsInstant(claimName)).isBetween( expectedClaimValue.minusSeconds(1), expectedClaimValue.plusSeconds(1)); }
/** * Returns the claim value as an {@code Instant} or {@code null} if it does not exist. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist */ default Instant getClaimAsInstant(String claim) { if (!this.containsClaim(claim)) { return null; } Object claimValue = this.getClaims().get(claim); if (Long.class.isAssignableFrom(claimValue.getClass()) || Integer.class.isAssignableFrom(claimValue.getClass()) || Double.class.isAssignableFrom(claimValue.getClass())) { return Instant.ofEpochSecond(((Number) claimValue).longValue()); } if (Date.class.isAssignableFrom(claimValue.getClass())) { return ((Date) claimValue).toInstant(); } if (Instant.class.isAssignableFrom(claimValue.getClass())) { return (Instant) claimValue; } throw new IllegalArgumentException("Unable to convert claim '" + claim + "' of type '" + claimValue.getClass() + "' to Instant."); }
/** * Returns the claim value as a {@code Boolean} or {@code null} if it does not exist. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist */ default Boolean getClaimAsBoolean(String claim) { return (this.containsClaim(claim) ? Boolean.valueOf(this.getClaimAsString(claim)) : null); }
@Test public void getClaimAsInstantWhenInstantTypeThenReturnInstant() { Instant expectedClaimValue = Instant.now(); String claimName = "instant"; this.claims.put(claimName, expectedClaimValue); assertThat(this.claimAccessor.getClaimAsInstant(claimName)).isBetween( expectedClaimValue.minusSeconds(1), expectedClaimValue.plusSeconds(1)); }
/** * Returns the claim value as a {@code String} or {@code null} if it does not exist or is equal to {@code null}. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist or is equal to {@code null} */ default String getClaimAsString(String claim) { if (!this.containsClaim(claim)) { return null; } Object claimValue = this.getClaims().get(claim); return (claimValue != null ? claimValue.toString() : null); }
/** * Returns the claim value as an {@code URL} or {@code null} if it does not exist. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist */ default URL getClaimAsURL(String claim) { if (!this.containsClaim(claim)) { return null; } try { return new URL(this.getClaimAsString(claim)); } catch (MalformedURLException ex) { throw new IllegalArgumentException("Unable to convert claim '" + claim + "' to URL: " + ex.getMessage(), ex); } }
/** * Returns the claim value as a {@code String} or {@code null} if it does not exist or is equal to {@code null}. * * @param claim the name of the claim * @return the claim value or {@code null} if it does not exist or is equal to {@code null} */ default String getClaimAsString(String claim) { if (!this.containsClaim(claim)) { return null; } Object claimValue = this.getClaims().get(claim); return (claimValue != null ? claimValue.toString() : null); }