Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,13 @@
import com.netflix.metacat.common.dto.Pageable;
import com.netflix.metacat.common.dto.Sort;
import com.netflix.metacat.common.server.connectors.model.CatalogInfo;
import com.netflix.metacat.common.server.util.AuthorizedCaller;
import com.netflix.metacat.common.server.util.ConnectorAuthorizationUtil;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;

import javax.annotation.Nullable;
import java.util.List;
import java.util.Set;

/**
* Connector decorator that authorizes catalog service calls based on SSO caller context.
Expand All @@ -46,39 +43,46 @@ public class AuthorizingConnectorCatalogService implements ConnectorCatalogServi
private final ConnectorCatalogService delegate;

@NonNull
private final Set<AuthorizedCaller> allowedCallers;
private final ConnectorAuthorizer authorizer;

@NonNull
private final String authorizedCallers;

@NonNull
private final String catalogName;

private void authorize(final String operation, final QualifiedName resource) {
authorizer.checkAuthorization(catalogName, authorizedCallers, operation, resource);
}

@Override
public void create(final ConnectorRequestContext context, final CatalogInfo resource) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "create", resource.getName());
authorize("create", resource.getName());
delegate.create(context, resource);
}

@Override
public void update(final ConnectorRequestContext context, final CatalogInfo resource) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "update", resource.getName());
authorize("update", resource.getName());
delegate.update(context, resource);
}

@Override
public void delete(final ConnectorRequestContext context, final QualifiedName name) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "delete", name);
authorize("delete", name);
delegate.delete(context, name);
}

@Override
public CatalogInfo get(final ConnectorRequestContext context, final QualifiedName name) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "get", name);
authorize("get", name);
return delegate.get(context, name);
}

@Override
@SuppressFBWarnings
public boolean exists(final ConnectorRequestContext context, final QualifiedName name) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "exists", name);
authorize("exists", name);
return delegate.exists(context, name);
}

Expand All @@ -90,7 +94,7 @@ public List<CatalogInfo> list(
@Nullable final Sort sort,
@Nullable final Pageable pageable
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "list", name);
authorize("list", name);
return delegate.list(context, name, prefix, sort, pageable);
}

Expand All @@ -102,7 +106,7 @@ public List<QualifiedName> listNames(
@Nullable final Sort sort,
@Nullable final Pageable pageable
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "listNames", name);
authorize("listNames", name);
return delegate.listNames(context, name, prefix, sort, pageable);
}

Expand All @@ -112,7 +116,7 @@ public void rename(
final QualifiedName oldName,
final QualifiedName newName
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "rename", oldName);
authorize("rename", oldName);
delegate.rename(context, oldName, newName);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,13 @@
import com.netflix.metacat.common.dto.Pageable;
import com.netflix.metacat.common.dto.Sort;
import com.netflix.metacat.common.server.connectors.model.DatabaseInfo;
import com.netflix.metacat.common.server.util.AuthorizedCaller;
import com.netflix.metacat.common.server.util.ConnectorAuthorizationUtil;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;

import javax.annotation.Nullable;
import java.util.List;
import java.util.Set;

/**
* Connector decorator that authorizes database service calls based on SSO caller context.
Expand All @@ -46,39 +43,46 @@ public class AuthorizingConnectorDatabaseService implements ConnectorDatabaseSer
private final ConnectorDatabaseService delegate;

@NonNull
private final Set<AuthorizedCaller> allowedCallers;
private final ConnectorAuthorizer authorizer;

@NonNull
private final String authorizedCallers;

@NonNull
private final String catalogName;

private void authorize(final String operation, final QualifiedName resource) {
authorizer.checkAuthorization(catalogName, authorizedCallers, operation, resource);
}

@Override
public void create(final ConnectorRequestContext context, final DatabaseInfo resource) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "create", resource.getName());
authorize("create", resource.getName());
delegate.create(context, resource);
}

@Override
public void update(final ConnectorRequestContext context, final DatabaseInfo resource) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "update", resource.getName());
authorize("update", resource.getName());
delegate.update(context, resource);
}

@Override
public void delete(final ConnectorRequestContext context, final QualifiedName name) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "delete", name);
authorize("delete", name);
delegate.delete(context, name);
}

@Override
public DatabaseInfo get(final ConnectorRequestContext context, final QualifiedName name) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "get", name);
authorize("get", name);
return delegate.get(context, name);
}

@Override
@SuppressFBWarnings
public boolean exists(final ConnectorRequestContext context, final QualifiedName name) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "exists", name);
authorize("exists", name);
return delegate.exists(context, name);
}

Expand All @@ -90,7 +94,7 @@ public List<DatabaseInfo> list(
@Nullable final Sort sort,
@Nullable final Pageable pageable
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "list", name);
authorize("list", name);
return delegate.list(context, name, prefix, sort, pageable);
}

Expand All @@ -102,7 +106,7 @@ public List<QualifiedName> listNames(
@Nullable final Sort sort,
@Nullable final Pageable pageable
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "listNames", name);
authorize("listNames", name);
return delegate.listNames(context, name, prefix, sort, pageable);
}

Expand All @@ -112,7 +116,7 @@ public void rename(
final QualifiedName oldName,
final QualifiedName newName
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "rename", oldName);
authorize("rename", oldName);
delegate.rename(context, oldName, newName);
}

Expand All @@ -121,7 +125,7 @@ public List<QualifiedName> listViewNames(
final ConnectorRequestContext context,
final QualifiedName databaseName
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "listViewNames", databaseName);
authorize("listViewNames", databaseName);
return delegate.listViewNames(context, databaseName);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@
import com.netflix.metacat.common.server.connectors.model.PartitionsSaveRequest;
import com.netflix.metacat.common.server.connectors.model.PartitionsSaveResponse;
import com.netflix.metacat.common.server.connectors.model.TableInfo;
import com.netflix.metacat.common.server.util.AuthorizedCaller;
import com.netflix.metacat.common.server.util.ConnectorAuthorizationUtil;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import lombok.Getter;
import lombok.NonNull;
Expand All @@ -35,7 +33,6 @@
import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* Connector decorator that authorizes partition service calls based on SSO caller context.
Expand All @@ -51,19 +48,26 @@ public class AuthorizingConnectorPartitionService implements ConnectorPartitionS
private final ConnectorPartitionService delegate;

@NonNull
private final Set<AuthorizedCaller> allowedCallers;
private final ConnectorAuthorizer authorizer;

@NonNull
private final String authorizedCallers;

@NonNull
private final String catalogName;

private void authorize(final String operation, final QualifiedName resource) {
authorizer.checkAuthorization(catalogName, authorizedCallers, operation, resource);
}

@Override
public List<PartitionInfo> getPartitions(
final ConnectorRequestContext context,
final QualifiedName table,
final PartitionListRequest partitionsRequest,
final TableInfo tableInfo
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "getPartitions", table);
authorize("getPartitions", table);
return delegate.getPartitions(context, table, partitionsRequest, tableInfo);
}

Expand All @@ -73,7 +77,7 @@ public PartitionsSaveResponse savePartitions(
final QualifiedName table,
final PartitionsSaveRequest partitionsSaveRequest
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "savePartitions", table);
authorize("savePartitions", table);
return delegate.savePartitions(context, table, partitionsSaveRequest);
}

Expand All @@ -84,7 +88,7 @@ public void deletePartitions(
final List<String> partitionNames,
final TableInfo tableInfo
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "deletePartitions", tableName);
authorize("deletePartitions", tableName);
delegate.deletePartitions(context, tableName, partitionNames, tableInfo);
}

Expand All @@ -94,7 +98,7 @@ public int getPartitionCount(
final QualifiedName table,
final TableInfo tableInfo
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "getPartitionCount", table);
authorize("getPartitionCount", table);
return delegate.getPartitionCount(context, table, tableInfo);
}

Expand All @@ -105,8 +109,7 @@ public Map<String, List<QualifiedName>> getPartitionNames(
final boolean prefixSearch
) {
// No specific resource name available, check catalog-level access
ConnectorAuthorizationUtil.checkAuthorization(
catalogName, allowedCallers, "getPartitionNames", QualifiedName.ofCatalog(catalogName));
authorize("getPartitionNames", QualifiedName.ofCatalog(catalogName));
return delegate.getPartitionNames(context, uris, prefixSearch);
}

Expand All @@ -117,7 +120,7 @@ public List<String> getPartitionKeys(
final PartitionListRequest partitionsRequest,
final TableInfo tableInfo
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "getPartitionKeys", table);
authorize("getPartitionKeys", table);
return delegate.getPartitionKeys(context, table, partitionsRequest, tableInfo);
}

Expand All @@ -128,38 +131,38 @@ public List<String> getPartitionUris(
final PartitionListRequest partitionsRequest,
final TableInfo tableInfo
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "getPartitionUris", table);
authorize("getPartitionUris", table);
return delegate.getPartitionUris(context, table, partitionsRequest, tableInfo);
}

@Override
public void create(final ConnectorRequestContext context, final PartitionInfo resource) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "create", resource.getName());
authorize("create", resource.getName());
delegate.create(context, resource);
}

@Override
public void update(final ConnectorRequestContext context, final PartitionInfo resource) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "update", resource.getName());
authorize("update", resource.getName());
delegate.update(context, resource);
}

@Override
public void delete(final ConnectorRequestContext context, final QualifiedName name) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "delete", name);
authorize("delete", name);
delegate.delete(context, name);
}

@Override
public PartitionInfo get(final ConnectorRequestContext context, final QualifiedName name) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "get", name);
authorize("get", name);
return delegate.get(context, name);
}

@Override
@SuppressFBWarnings
public boolean exists(final ConnectorRequestContext context, final QualifiedName name) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "exists", name);
authorize("exists", name);
return delegate.exists(context, name);
}

Expand All @@ -171,7 +174,7 @@ public List<PartitionInfo> list(
@Nullable final Sort sort,
@Nullable final Pageable pageable
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "list", name);
authorize("list", name);
return delegate.list(context, name, prefix, sort, pageable);
}

Expand All @@ -183,7 +186,7 @@ public List<QualifiedName> listNames(
@Nullable final Sort sort,
@Nullable final Pageable pageable
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "listNames", name);
authorize("listNames", name);
return delegate.listNames(context, name, prefix, sort, pageable);
}

Expand All @@ -193,7 +196,7 @@ public void rename(
final QualifiedName oldName,
final QualifiedName newName
) {
ConnectorAuthorizationUtil.checkAuthorization(catalogName, allowedCallers, "rename", oldName);
authorize("rename", oldName);
delegate.rename(context, oldName, newName);
}

Expand Down
Loading
Loading