package com.kryptnostic.directory.v1.principal;
import java.util.Set;
import java.util.UUID;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.common.base.Optional;
import com.kryptnostic.kodex.v1.constants.Names;
import com.kryptnostic.kodex.v1.models.KryptnosticUser;
import com.kryptnostic.kodex.v1.models.UserAttributes;
/**
* Interface for user principals
*
* @author Matthew Tamayo-Rios <matthew@kryptnostic.com>
*/
@JsonSerialize(
as = User.class )
@JsonDeserialize(
as = KryptnosticUser.class )
public interface User extends Principal {
@JsonProperty( Names.USERNAME_FIELD )
String getName();
@Deprecated
@JsonProperty( Names.REALM_FIELD )
String getRealm();
@JsonProperty( Names.DOMAIN_FIELD )
String getDomain();
@Nonnull
@JsonProperty( Names.EMAIL_FIELD )
String getEmail();
@Nonnull
@JsonProperty( Names.CERTIFICATE_FIELD )
byte[] getCertificate();
@Nonnull
@JsonProperty( Names.ROLES_FIELD )
Set<String> getRoles();
@Nonnull
@JsonProperty( Names.GROUPS_PROPERTY )
Set<UUID> getGroups();
@Nonnull
@JsonIgnore
int getUserVersion();
@JsonProperty( Names.ATTRIBUTES_FIELD )
UserAttributes getAttributes();
@Nullable
@JsonIgnore
Optional<String> getGivenName();
@Nullable
@JsonIgnore
Optional<String> getFamilyName();
Optional<Object> getAttribute( String key );
}