blob: c76a8715b766b335f068559c86e2762f07fbc208 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.atlas.authorize;
import org.apache.atlas.model.instance.AtlasClassification;
import org.apache.atlas.model.instance.AtlasEntityHeader;
import org.apache.atlas.type.AtlasClassificationType;
import org.apache.atlas.type.AtlasEntityType;
import org.apache.atlas.type.AtlasStructType.AtlasAttribute;
import org.apache.atlas.type.AtlasTypeRegistry;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class AtlasAccessRequest {
private static Logger LOG = LoggerFactory.getLogger(AtlasAccessRequest.class);
private static final String DEFAULT_ENTITY_ID_ATTRIBUTE = "qualifiedName";
private final AtlasPrivilege action;
private final Date accessTime;
private String user = null;
private Set<String> userGroups = null;
private String clientIPAddress = null;
private List<String> forwardedAddresses;
private String remoteIPAddress;
protected AtlasAccessRequest(AtlasPrivilege action) {
this(action, null, null, new Date(), null);
}
protected AtlasAccessRequest(AtlasPrivilege action, String user, Set<String> userGroups) {
this(action, user, userGroups, new Date(), null, null, null);
}
protected AtlasAccessRequest(AtlasPrivilege action, String user, Set<String> userGroups, Date accessTime,
String clientIPAddress, List<String> forwardedAddresses, String remoteIPAddress) {
this(action, user, userGroups, accessTime, clientIPAddress);
this.forwardedAddresses = forwardedAddresses;
this.remoteIPAddress = remoteIPAddress;
}
protected AtlasAccessRequest(AtlasPrivilege action, String user, Set<String> userGroups, Date accessTime, String clientIPAddress) {
this.action = action;
this.user = user;
this.userGroups = userGroups;
this.accessTime = accessTime;
this.clientIPAddress = clientIPAddress;
}
public AtlasPrivilege getAction() {
return action;
}
public Date getAccessTime() {
return accessTime;
}
public String getUser() {
return user;
}
public Set<String> getUserGroups() {
return userGroups;
}
public void setUser(String user, Set<String> userGroups) {
this.user = user;
this.userGroups = userGroups;
}
public List<String> getForwardedAddresses() {
return forwardedAddresses;
}
public String getRemoteIPAddress() {
return remoteIPAddress;
}
public String getClientIPAddress() {
return clientIPAddress;
}
public void setForwardedAddresses(List<String> forwardedAddresses) {
this.forwardedAddresses = forwardedAddresses;
}
public void setRemoteIPAddress(String remoteIPAddress) {
this.remoteIPAddress = remoteIPAddress;
}
public void setClientIPAddress(String clientIPAddress) {
this.clientIPAddress = clientIPAddress;
}
public Set<String> getEntityTypeAndAllSuperTypes(String entityType, AtlasTypeRegistry typeRegistry) {
final Set<String> ret;
if (entityType == null) {
ret = Collections.emptySet();
} else if (typeRegistry == null) {
ret = Collections.singleton(entityType);
} else {
AtlasEntityType entType = typeRegistry.getEntityTypeByName(entityType);
ret = entType != null ? entType.getTypeAndAllSuperTypes() : Collections.singleton(entityType);
}
return ret;
}
public Set<String> getClassificationTypeAndAllSuperTypes(String classificationName, AtlasTypeRegistry typeRegistry) {
final Set<String> ret;
if (classificationName == null) {
ret = Collections.emptySet();
} else if (typeRegistry == null) {
ret = Collections.singleton(classificationName);
} else {
AtlasClassificationType classificationType = typeRegistry.getClassificationTypeByName(classificationName);
return classificationType != null ? classificationType.getTypeAndAllSuperTypes() : Collections.singleton(classificationName);
}
return ret;
}
public String getEntityId(AtlasEntityHeader entity) {
return getEntityId(entity, null);
}
public String getEntityId(AtlasEntityHeader entity, AtlasTypeRegistry typeRegistry) {
Object ret = null;
if (entity != null) {
AtlasEntityType entityType = typeRegistry == null ? null : typeRegistry.getEntityTypeByName(entity.getTypeName());
Map<String, AtlasAttribute> uniqAttributes = entityType == null ? null : entityType.getUniqAttributes();
if (MapUtils.isEmpty(uniqAttributes)) {
ret = entity.getAttribute(DEFAULT_ENTITY_ID_ATTRIBUTE);
} else {
for (AtlasAttribute uniqAttribute : uniqAttributes.values()) {
ret = entity.getAttribute(uniqAttribute.getName());
if (ret != null) {
break;
}
}
}
}
return ret == null ? "" : ret.toString();
}
public Set<String> getClassificationNames(AtlasEntityHeader entity) {
final Set<String> ret;
if (entity == null || entity.getClassifications() == null) {
ret = Collections.emptySet();
} else {
ret = new HashSet<>();
for (AtlasClassification classify : entity.getClassifications()) {
ret.add(classify.getTypeName());
}
}
return ret;
}
@Override
public String toString() {
return "AtlasAccessRequest[" + "action=" + action + ", accessTime=" + accessTime +", user='" + user + '\'' +
", userGroups=" + userGroups + ", clientIPAddress='" + clientIPAddress + '\'' +
", forwardedAddresses=" + forwardedAddresses + ", remoteIPAddress='" + remoteIPAddress + '\'' +
']';
}
}