package io.cattle.platform.api.auth;
import io.github.ibuildthecloud.gdapi.annotation.Field;
import io.github.ibuildthecloud.gdapi.annotation.Type;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
@Type(name = "identity", pluralName = "identities")
public class Identity {
private String externalId = null;
private String profilePicture= null;
private String name = null;
private String externalIdType = null;
private String profileUrl = null;
private String login = null;
private String role = null;
private String projectId = null;
@Field(required = false, nullable = true)
public String getName() {
return name;
}
@Field(required = true, nullable = false)
public String getExternalId() {
return externalId;
}
@Field(required = true, nullable = false)
public String getExternalIdType() {
return externalIdType;
}
@Field(required = false, nullable = true)
public String getAll(){
return null;
}
@Field(required = false, nullable = true)
public String getId() {
return externalIdType + ':' + externalId;
}
@Field(required = false, nullable = true)
public String getProfilePicture() {
return profilePicture;
}
@Field(required = false, nullable = true)
public String getProfileUrl() {
return profileUrl;
}
@Field(required = false, nullable = true)
public String getLogin() {
return login;
}
@Field(required = false, nullable = true)
public String getRole() {
return role;
}
@Field(required = false, nullable = true)
public String getProjectId() {
return projectId;
}
public Identity(String externalIdType, String externalId) {
this(externalIdType, externalId, null, null, null, null);
}
public Identity(String externalIdType, String externalId, String name, String profileUrl, String profilePicture, String login) {
this.externalId = externalId;
this.name = name;
this.externalIdType = externalIdType;
this.profileUrl = profileUrl;
this.login = login;
this.profilePicture = profilePicture;
}
public Identity(Identity identity, String role, String projectId){
this.externalId = identity.getExternalId();
this.name = identity.getName();
this.externalIdType = identity.getExternalIdType();
this.profileUrl = identity.getProfileUrl();
this.login = identity.getLogin();
this.profilePicture = identity.getProfilePicture();
this.projectId = projectId;
this.role = role;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Identity identity = (Identity) o;
return new EqualsBuilder()
.append(externalId, identity.externalId)
.append(externalIdType, identity.externalIdType)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder(19, 43)
.append(externalId)
.append(externalIdType)
.toHashCode();
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("externalId", externalId)
.append("profilePicture", profilePicture)
.append("name", name)
.append("externalIdType", externalIdType)
.append("profileUrl", profileUrl)
.toString();
}
public Identity maskExternalId() {
return new Identity(externalIdType, login, name, profileUrl, profilePicture, login);
}
public static Identity fromId(String id) {
if (StringUtils.isBlank(id)) {
return null;
}
String[] split = id.split(":", 2);
if (split.length != 2){
return null;
}
String externalIdType = split[0];
String externalId = split[1];
return new Identity(externalIdType, externalId);
}
}