package org.pac4j.oidc.profile;
import com.nimbusds.jwt.JWT;
import com.nimbusds.jwt.JWTParser;
import com.nimbusds.oauth2.sdk.token.AccessToken;
import com.nimbusds.oauth2.sdk.token.RefreshToken;
import org.pac4j.core.exception.TechnicalException;
import org.pac4j.core.profile.jwt.AbstractJwtProfile;
import org.pac4j.oidc.client.OidcClient;
import java.net.URI;
import java.text.ParseException;
import java.util.*;
/**
* <p>This class is the user profile for sites using OpenID Connect protocol.</p>
* <p>It is returned by the {@link OidcClient}.</p>
*
* @author Michael Remond
* @version 1.7.0
*/
public class OidcProfile extends AbstractJwtProfile {
private static final long serialVersionUID = -52855988661742374L;
public OidcProfile() { }
@Override
public String getFirstName() {
return (String) getAttribute(OidcProfileDefinition.GIVEN_NAME);
}
public String getMiddleName() {
return (String) getAttribute(OidcProfileDefinition.MIDDLE_NAME);
}
@Override
public String getDisplayName() {
return (String) getAttribute(OidcProfileDefinition.NAME);
}
public String getNickname() {
return (String) getAttribute(OidcProfileDefinition.NICKNAME);
}
@Override
public String getUsername() {
return (String) getAttribute(OidcProfileDefinition.PREFERRED_USERNAME);
}
@Override
public URI getPictureUrl() {
return (URI) getAttribute(OidcProfileDefinition.PICTURE);
}
@Override
public URI getProfileUrl() {
return (URI) getAttribute(OidcProfileDefinition.PROFILE);
}
@Override
public String getLocation() {
return (String) getAttribute(OidcProfileDefinition.ZONEINFO);
}
public Boolean getEmailVerified() {
return (Boolean) getAttribute(OidcProfileDefinition.EMAIL_VERIFIED);
}
public String getPhoneNumber() {
return (String) getAttribute(OidcProfileDefinition.PHONE_NUMBER);
}
public Boolean getPhoneNumberVerified() {
return (Boolean) getAttribute(OidcProfileDefinition.PHONE_NUMBER_VERIFIED);
}
public Date getUpdatedAt() {
return (Date) getAttribute(OidcProfileDefinition.UPDATED_AT);
}
public Date getAuthTime() {
return (Date) getAttribute(OidcProfileDefinition.AUTH_TIME);
}
public String getNonce() {
return (String) getAttribute(OidcProfileDefinition.NONCE);
}
public String getAcr() {
return (String) getAttribute(OidcProfileDefinition.ACR);
}
public Object getAmr() {
return getAttribute(OidcProfileDefinition.AMR);
}
public String getAzp() {
return (String) getAttribute(OidcProfileDefinition.AZP);
}
public void setAccessToken(final AccessToken accessToken) {
addAttribute(OidcProfileDefinition.ACCESS_TOKEN, accessToken);
}
public AccessToken getAccessToken() {
return (AccessToken) getAttribute(OidcProfileDefinition.ACCESS_TOKEN);
}
public String getIdTokenString() {
return (String) getAttribute(OidcProfileDefinition.ID_TOKEN);
}
public void setIdTokenString(final String idToken) {
addAttribute(OidcProfileDefinition.ID_TOKEN, idToken);
}
public JWT getIdToken() {
try {
return JWTParser.parse(getIdTokenString());
} catch (final ParseException e) {
throw new TechnicalException(e);
}
}
public RefreshToken getRefreshToken() {
return (RefreshToken) getAttribute(OidcProfileDefinition.REFRESH_TOKEN);
}
public void setRefreshToken(final RefreshToken refreshToken) {
addAttribute(OidcProfileDefinition.REFRESH_TOKEN, refreshToken);
}
@Override
public void clearSensitiveData() {
removeAttribute(OidcProfileDefinition.ACCESS_TOKEN);
removeAttribute(OidcProfileDefinition.ID_TOKEN);
removeAttribute(OidcProfileDefinition.REFRESH_TOKEN);
}
}