This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new d1e37d6458 HDDS-10535. Remove unused
RangerRestMultiTenantAccessController. (#6392)
d1e37d6458 is described below
commit d1e37d6458d5243fcf3d64ce8b1882a5b895a1eb
Author: Arafat2198 <[email protected]>
AuthorDate: Mon Mar 18 02:21:32 2024 +0530
HDDS-10535. Remove unused RangerRestMultiTenantAccessController. (#6392)
---
.../RangerRestMultiTenantAccessController.java | 681 ---------------------
1 file changed, 681 deletions(-)
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/multitenant/RangerRestMultiTenantAccessController.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/multitenant/RangerRestMultiTenantAccessController.java
deleted file mode 100644
index de29870909..0000000000
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/multitenant/RangerRestMultiTenantAccessController.java
+++ /dev/null
@@ -1,681 +0,0 @@
-/*
- * 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.hadoop.ozone.om.multitenant;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import org.apache.commons.lang3.NotImplementedException;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
-import org.apache.http.auth.BasicUserPrincipal;
-import org.apache.kerby.util.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.lang.reflect.Type;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_RANGER_HTTPS_ADMIN_API_PASSWD;
-import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_RANGER_HTTPS_ADMIN_API_USER;
-import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_RANGER_HTTPS_ADDRESS_KEY;
-import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_RANGER_OM_CONNECTION_REQUEST_TIMEOUT;
-import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_RANGER_OM_CONNECTION_REQUEST_TIMEOUT_DEFAULT;
-import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_RANGER_OM_CONNECTION_TIMEOUT;
-import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_RANGER_OM_CONNECTION_TIMEOUT_DEFAULT;
-import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_RANGER_OM_IGNORE_SERVER_CERT;
-import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_RANGER_OM_IGNORE_SERVER_CERT_DEFAULT;
-import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_RANGER_SERVICE;
-
-/**
- * Access controller for multi-tenancy implemented using Ranger's REST API.
- * This class is for testing and is not intended for production use.
- *
- * TODO: REMOVE.
- */
-public class RangerRestMultiTenantAccessController
- implements MultiTenantAccessController {
-
- public static final String OZONE_RANGER_POLICY_HTTP_ENDPOINT =
- "/service/public/v2/api/policy/";
-
- public static final String OZONE_RANGER_ROLE_HTTP_ENDPOINT =
- "/service/public/v2/api/roles/";
-
- private String getPolicyByNameEndpoint(String policyName) {
- // /service/public/v2/api/service/{servicename}/policy/{policyname}
- return rangerHttpsAddress + "/service/public/v2/api/service/" +
- rangerService + "/policy/" + policyName;
- }
-
- private String getRoleByNameEndpoint(String roleName) {
- // /service/public/v2/api/roles/name/
- return rangerHttpsAddress + "/service/public/v2/api/roles/name/" +
roleName;
- }
-
- private static final Logger LOG = LoggerFactory
- .getLogger(RangerRestMultiTenantAccessController.class);
-
- private final OzoneConfiguration conf;
- private boolean ignoreServerCert = false;
- private int connectionTimeout;
- private int connectionRequestTimeout;
- private String authHeaderValue;
- private final String rangerHttpsAddress;
- private final Gson jsonConverter;
- private final String rangerService;
- private final Map<IAccessAuthorizer.ACLType, String> aclToString;
- private final Map<String, IAccessAuthorizer.ACLType> stringToAcl;
- private long lastPolicyUpdateTimeEpochMillis = -1;
-
- public RangerRestMultiTenantAccessController(Configuration configuration)
- throws IOException {
- conf = new OzoneConfiguration(configuration);
- rangerHttpsAddress = conf.get(OZONE_RANGER_HTTPS_ADDRESS_KEY);
- rangerService = conf.get(OZONE_RANGER_SERVICE);
-
- GsonBuilder gsonBuilder = new GsonBuilder();
- gsonBuilder.registerTypeAdapter(Policy.class, policySerializer);
- gsonBuilder.registerTypeAdapter(Policy.class, policyDeserializer);
- gsonBuilder.registerTypeAdapter(Role.class, roleSerializer);
- gsonBuilder.registerTypeAdapter(Role.class, roleDeserializer);
- gsonBuilder.registerTypeAdapter(BasicUserPrincipal.class, userSerializer);
- jsonConverter = gsonBuilder.create();
-
- aclToString = new EnumMap<>(IAccessAuthorizer.ACLType.class);
- stringToAcl = new HashMap<>();
- fillRangerAclStrings();
- initializeRangerConnection();
- }
-
- private void fillRangerAclStrings() {
- aclToString.put(IAccessAuthorizer.ACLType.ALL, "all");
- aclToString.put(IAccessAuthorizer.ACLType.LIST, "list");
- aclToString.put(IAccessAuthorizer.ACLType.READ, "read");
- aclToString.put(IAccessAuthorizer.ACLType.WRITE, "write");
- aclToString.put(IAccessAuthorizer.ACLType.CREATE, "create");
- aclToString.put(IAccessAuthorizer.ACLType.DELETE, "delete");
- aclToString.put(IAccessAuthorizer.ACLType.READ_ACL, "read_acl");
- aclToString.put(IAccessAuthorizer.ACLType.WRITE_ACL, "write_acl");
- aclToString.put(IAccessAuthorizer.ACLType.NONE, "");
-
- stringToAcl.put("all", IAccessAuthorizer.ACLType.ALL);
- stringToAcl.put("list", IAccessAuthorizer.ACLType.LIST);
- stringToAcl.put("read", IAccessAuthorizer.ACLType.READ);
- stringToAcl.put("write", IAccessAuthorizer.ACLType.WRITE);
- stringToAcl.put("create", IAccessAuthorizer.ACLType.CREATE);
- stringToAcl.put("delete", IAccessAuthorizer.ACLType.DELETE);
- stringToAcl.put("read_acl", IAccessAuthorizer.ACLType.READ_ACL);
- stringToAcl.put("write_acl", IAccessAuthorizer.ACLType.WRITE_ACL);
- stringToAcl.put("", IAccessAuthorizer.ACLType.NONE);
- }
-
- private void initializeRangerConnection() {
- setupRangerConnectionConfig();
- if (ignoreServerCert) {
- setupRangerIgnoreServerCertificate();
- }
- setupRangerConnectionAuthHeader();
- }
-
- private void setupRangerConnectionConfig() {
- connectionTimeout = (int) conf.getTimeDuration(
- OZONE_RANGER_OM_CONNECTION_TIMEOUT,
- conf.get(
- OZONE_RANGER_OM_CONNECTION_TIMEOUT,
- OZONE_RANGER_OM_CONNECTION_TIMEOUT_DEFAULT),
- TimeUnit.MILLISECONDS);
- connectionRequestTimeout = (int)conf.getTimeDuration(
- OZONE_RANGER_OM_CONNECTION_REQUEST_TIMEOUT,
- conf.get(
- OZONE_RANGER_OM_CONNECTION_REQUEST_TIMEOUT,
- OZONE_RANGER_OM_CONNECTION_REQUEST_TIMEOUT_DEFAULT),
- TimeUnit.MILLISECONDS
- );
- ignoreServerCert = conf.getBoolean(
- OZONE_RANGER_OM_IGNORE_SERVER_CERT,
- OZONE_RANGER_OM_IGNORE_SERVER_CERT_DEFAULT);
- }
-
- private void setupRangerIgnoreServerCertificate() {
- // Create a trust manager that does not validate certificate chains
- TrustManager[] trustAllCerts = new TrustManager[]{
- new X509TrustManager() {
- public java.security.cert.X509Certificate[] getAcceptedIssuers() {
- return null;
- }
- public void checkClientTrusted(
- java.security.cert.X509Certificate[] certs, String authType) {
- }
- public void checkServerTrusted(
- java.security.cert.X509Certificate[] certs, String authType) {
- }
- }
- };
-
- try {
- SSLContext sc = SSLContext.getInstance("SSL");
- sc.init(null, trustAllCerts, new java.security.SecureRandom());
- HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
- } catch (Exception e) {
- LOG.info("Setting DefaultSSLSocketFactory failed.");
- }
- }
-
- private void setupRangerConnectionAuthHeader() {
- String userName = conf.get(OZONE_OM_RANGER_HTTPS_ADMIN_API_USER);
- String passwd = conf.get(OZONE_OM_RANGER_HTTPS_ADMIN_API_PASSWD);
- String auth = userName + ":" + passwd;
- byte[] encodedAuth =
- Base64.encodeBase64(auth.getBytes(StandardCharsets.UTF_8));
- authHeaderValue = "Basic " +
- new String(encodedAuth, StandardCharsets.UTF_8);
- }
-
-
- @Override
- public Policy createPolicy(Policy policy) throws IOException {
- String rangerAdminUrl =
- rangerHttpsAddress + OZONE_RANGER_POLICY_HTTP_ENDPOINT;
- HttpsURLConnection conn = makeHttpsPostCall(rangerAdminUrl,
- jsonConverter.toJsonTree(policy).getAsJsonObject());
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to create policy %s. " +
- "Http response code: %d", policy.getName(), conn.getResponseCode()));
- }
- getResponseData(conn);
-
- // TODO: Should reconstruct from response data.
- return policy;
- }
-
- @Override
- public void deletePolicy(String policyName) throws IOException {
- String rangerAdminUrl = getPolicyByNameEndpoint(policyName);
- HttpsURLConnection conn = makeHttpsDeleteCall(rangerAdminUrl);
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to delete policy '%s'. " +
- "Http response code: %d", policyName, conn.getResponseCode()));
- }
- }
-
- public Map<Long, Policy> getPolicies() throws Exception {
- // This API gets all policies for all services. The
- // /public/v2/api/policies/{serviceDefName}/for-resource endpoint is
- // supposed to get policies for only a specified service, but it does not
- // seem to work. This implementation should be ok for testing purposes as
- // this class is intended.
- String rangerAdminUrl =
- rangerHttpsAddress + OZONE_RANGER_POLICY_HTTP_ENDPOINT;
- HttpsURLConnection conn = makeHttpsGetCall(rangerAdminUrl);
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to get all policies. " +
- "Http response code: %d", conn.getResponseCode()));
- }
- String allPoliciesString = getResponseData(conn);
- // Filter out policies not for Ozone service.
- JsonArray jsonPoliciesArray = new JsonParser().parse(allPoliciesString)
- .getAsJsonArray();
- Map<Long, Policy> policies = new HashMap<>();
- for (JsonElement jsonPolicy: jsonPoliciesArray) {
- JsonObject jsonPolicyObject = jsonPolicy.getAsJsonObject();
- String service = jsonPolicyObject.get("service").getAsString();
- if (service.equals(rangerService)) {
- long id = jsonPolicyObject.get("id").getAsLong();
- policies.put(id, jsonConverter.fromJson(jsonPolicyObject,
- Policy.class));
- }
- }
-
- return policies;
- }
-
- @Override
- public Policy getPolicy(String policyName) throws IOException {
- String rangerAdminUrl = getPolicyByNameEndpoint(policyName);
-
- HttpsURLConnection conn = makeHttpsGetCall(rangerAdminUrl);
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to get policy '%s'. " +
- "Http response code: %d", policyName, conn.getResponseCode()));
- }
- String policyInfo = getResponseData(conn);
- return jsonConverter.fromJson(policyInfo, Policy.class);
- }
-
- @Override
- public List<Policy> getLabeledPolicies(String label) throws IOException {
- throw new NotImplementedException("Not Implemented");
- }
-
- @Override
- public Policy updatePolicy(Policy policy) throws IOException {
- throw new NotImplementedException("Not Implemented");
- }
-
- public void updatePolicy(long policyID, Policy policy) throws IOException {
- String rangerAdminUrl =
- rangerHttpsAddress + OZONE_RANGER_POLICY_HTTP_ENDPOINT + policyID;
-
- HttpsURLConnection conn = makeHttpsPutCall(rangerAdminUrl,
- jsonConverter.toJsonTree(policy));
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to update policy %d. " +
- "Http response code: %d", policyID, conn.getResponseCode()));
- }
- }
-
- @Override
- public Role createRole(Role role) throws IOException {
- String rangerAdminUrl =
- rangerHttpsAddress + OZONE_RANGER_ROLE_HTTP_ENDPOINT;
-
- HttpsURLConnection conn = makeHttpsPostCall(rangerAdminUrl,
- jsonConverter.toJsonTree(role).getAsJsonObject());
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to create role %s. " +
- "Http response code: %d", role.getName(), conn.getResponseCode()));
- }
- String responseString = getResponseData(conn);
- JsonObject jObject = new JsonParser().parse(responseString)
- .getAsJsonObject();
-// return jObject.get("id").getAsLong();
-
- // TODO: Should reconstruct from response data.
- return role;
- }
-
- @Override
- public void deleteRole(String roleName) throws IOException {
- String rangerAdminUrl = getRoleByNameEndpoint(roleName);
- HttpsURLConnection conn = makeHttpsDeleteCall(rangerAdminUrl);
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to delete role '%s'. " +
- "Http response code: %d", roleName, conn.getResponseCode()));
- }
- }
-
- @Override
- public long getRangerServicePolicyVersion() throws IOException {
- throw new NotImplementedException("Not Implemented");
- }
-
- public Map<Long, Role> getRoles() throws Exception {
- String rangerAdminUrl =
- rangerHttpsAddress + OZONE_RANGER_ROLE_HTTP_ENDPOINT;
- HttpsURLConnection conn = makeHttpsGetCall(rangerAdminUrl);
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to get all roles. " +
- "Http response code: %d", conn.getResponseCode()));
- }
-
- String allRolesString = getResponseData(conn);
- JsonArray rolesArrayJson =
- new JsonParser().parse(allRolesString).getAsJsonArray();
- Map<Long, Role> roles = new HashMap<>();
- for (JsonElement roleJson: rolesArrayJson) {
- long id = roleJson.getAsJsonObject().get("id").getAsLong();
- roles.put(id, jsonConverter.fromJson(roleJson, Role.class));
- }
-
- return roles;
- }
-
- @Override
- public Role getRole(String roleName) throws IOException {
- String rangerAdminUrl = getRoleByNameEndpoint(roleName);
-
- HttpsURLConnection conn = makeHttpsGetCall(rangerAdminUrl);
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to get role '%s'. " +
- "Http response code: %d", roleName, conn.getResponseCode()));
- }
- String roleInfo = getResponseData(conn);
- return jsonConverter.fromJson(roleInfo, Role.class);
- }
-
- @Override
- public Role updateRole(long roleId, Role role) throws IOException {
- String rangerAdminUrl =
- rangerHttpsAddress + OZONE_RANGER_ROLE_HTTP_ENDPOINT + roleId;
-
- HttpsURLConnection conn = makeHttpsPutCall(rangerAdminUrl,
- jsonConverter.toJsonTree(role));
- if (!successfulResponseCode(conn.getResponseCode())) {
- throw new IOException(String.format("Failed to update role %d. " +
- "Http response code: %d", roleId, conn.getResponseCode()));
- }
-
- // TODO: Should reconstruct from response data.
- return role;
- }
-
- private HttpsURLConnection makeHttpsPutCall(String url, JsonElement content)
- throws IOException {
- HttpsURLConnection connection = makeBaseHttpsURLConnection(url);
- connection.setRequestMethod("PUT");
- return addJsonContentToConnection(connection, content);
- }
-
- private HttpsURLConnection makeHttpsPostCall(String url, JsonElement content)
- throws IOException {
- HttpsURLConnection connection = makeBaseHttpsURLConnection(url);
- connection.setRequestMethod("POST");
- return addJsonContentToConnection(connection, content);
- }
-
- private HttpsURLConnection addJsonContentToConnection(
- HttpsURLConnection connection, JsonElement content) throws IOException {
- connection.setDoOutput(true);
- connection.setRequestProperty("Content-Type", "application/json;");
- try (OutputStream os = connection.getOutputStream()) {
- byte[] input = content.toString().getBytes(StandardCharsets.UTF_8);
- os.write(input, 0, input.length);
- os.flush();
- }
-
- return connection;
- }
-
- private HttpsURLConnection makeHttpsGetCall(String urlString)
- throws IOException {
- HttpsURLConnection connection = makeBaseHttpsURLConnection(urlString);
- connection.setRequestMethod("GET");
- return connection;
- }
-
- private HttpsURLConnection makeHttpsDeleteCall(String urlString)
- throws IOException {
- HttpsURLConnection connection = makeBaseHttpsURLConnection(urlString);
- connection.setRequestMethod("DELETE");
- return connection;
- }
-
- private HttpsURLConnection makeBaseHttpsURLConnection(String urlString)
- throws IOException {
- URL url = new URL(urlString);
- HttpsURLConnection urlConnection =
(HttpsURLConnection)url.openConnection();
- urlConnection.setConnectTimeout(connectionTimeout);
- urlConnection.setReadTimeout(connectionRequestTimeout);
- urlConnection.setRequestProperty("Accept", "application/json");
- urlConnection.setRequestProperty("Authorization", authHeaderValue);
-
- return urlConnection;
- }
-
- private String getResponseData(HttpsURLConnection urlConnection)
- throws IOException {
- StringBuilder response = new StringBuilder();
- try (BufferedReader br = new BufferedReader(
- new InputStreamReader(
- urlConnection.getInputStream(), StandardCharsets.UTF_8))) {
- String responseLine;
- while ((responseLine = br.readLine()) != null) {
- response.append(responseLine.trim());
- }
- }
- return response.toString();
- }
-
- private boolean successfulResponseCode(long responseCode) {
- return responseCode >= 200 && responseCode < 300;
- }
-
- /// SERIALIZATION ///
-
- private final JsonDeserializer<Policy> policyDeserializer =
- new JsonDeserializer<Policy>() {
- @Override public Policy deserialize(JsonElement jsonElement, Type type,
- JsonDeserializationContext jsonDeserializationContext)
- throws JsonParseException {
- JsonObject policyJson = jsonElement.getAsJsonObject();
- String name = policyJson.get("name").getAsString();
- Policy.Builder policyB = new Policy.Builder();
- policyB.setName(name);
- if (policyJson.has("description")) {
-
policyB.setDescription(policyJson.get("description").getAsString());
- }
- policyB.setEnabled(policyJson.get("isEnabled").getAsBoolean());
-
- // Read volume, bucket, keys from json.
- JsonObject resourcesJson =
- policyJson.get("resources").getAsJsonObject();
- // All Ozone Ranger policies specify at least a volume.
- JsonObject jsonVolumeResource =
- resourcesJson.get("volume").getAsJsonObject();
- JsonArray volumes =
jsonVolumeResource.get("values").getAsJsonArray();
- volumes.forEach(vol -> policyB.addVolume(vol.getAsString()));
-
- if (resourcesJson.has("bucket")) {
- JsonObject jsonBucketResource =
- resourcesJson.get("bucket").getAsJsonObject();
- JsonArray buckets =
- jsonBucketResource.get("values").getAsJsonArray();
- buckets.forEach(bucket -> policyB.addBucket(bucket.getAsString()));
- }
-
- if (resourcesJson.has("key")) {
- JsonObject jsonKeysResource =
- resourcesJson.get("key").getAsJsonObject();
- JsonArray keys = jsonKeysResource.get("values").getAsJsonArray();
- keys.forEach(key -> policyB.addKey(key.getAsString()));
- }
-
- // Read Roles and their ACLs.
- JsonArray policyItemsJson = policyJson.getAsJsonArray("policyItems");
- for (JsonElement policyItemElement : policyItemsJson) {
- JsonObject policyItemJson = policyItemElement.getAsJsonObject();
- JsonArray jsonRoles = policyItemJson.getAsJsonArray("roles");
- JsonArray jsonAclArray = policyItemJson.getAsJsonArray("accesses");
-
- for (JsonElement jsonAclElem : jsonAclArray) {
- JsonObject jsonAcl = jsonAclElem.getAsJsonObject();
- String aclType = jsonAcl.get("type").getAsString();
- Acl acl;
- if (jsonAcl.get("isAllowed").getAsBoolean()) {
- acl = Acl.allow(stringToAcl.get(aclType));
- } else {
- acl = Acl.deny(stringToAcl.get(aclType));
- }
-
- for (JsonElement roleNameJson : jsonRoles) {
- policyB.addRoleAcl(roleNameJson.getAsString(),
- Collections.singleton(acl));
- }
- }
- }
-
- return policyB.build();
- }
- };
-
- private final JsonDeserializer<Role> roleDeserializer =
- new JsonDeserializer<Role>() {
- @Override public Role deserialize(JsonElement jsonElement, Type type,
- JsonDeserializationContext jsonDeserializationContext)
- throws JsonParseException {
- JsonObject roleJson = jsonElement.getAsJsonObject();
- String name = roleJson.get("name").getAsString();
- Role.Builder role = new Role.Builder();
- role.setName(name);
- if (roleJson.has("description")) {
- role.setDescription(roleJson.get("description").getAsString());
- }
- for (JsonElement jsonUser : roleJson.get("users").getAsJsonArray()) {
- String userName =
- jsonUser.getAsJsonObject().get("name").getAsString();
- role.addUser(userName, false);
- }
-
- return role.build();
- }
- };
-
- private final JsonSerializer<Policy> policySerializer =
- new JsonSerializer<Policy>() {
- @Override public JsonElement serialize(Policy javaPolicy,
- Type typeOfSrc, JsonSerializationContext context) {
- JsonObject jsonPolicy = new JsonObject();
- jsonPolicy.addProperty("name", javaPolicy.getName());
- jsonPolicy.addProperty("service", rangerService);
- jsonPolicy.addProperty("isEnabled", javaPolicy.isEnabled());
- if (javaPolicy.getDescription().isPresent()) {
- jsonPolicy.addProperty("description",
- javaPolicy.getDescription().get());
- }
-
- // All resources under this policy are added to this object.
- JsonObject jsonResources = new JsonObject();
-
- // Add volumes. Ranger requires at least one volume to be specified.
- JsonArray jsonVolumeNameArray = new JsonArray();
- for (String volumeName : javaPolicy.getVolumes()) {
- jsonVolumeNameArray.add(new JsonPrimitive(volumeName));
- }
- JsonObject jsonVolumeResource = new JsonObject();
- jsonVolumeResource.add("values", jsonVolumeNameArray);
- jsonVolumeResource.addProperty("isRecursive", false);
- jsonVolumeResource.addProperty("isExcludes", false);
- jsonResources.add("volume", jsonVolumeResource);
-
- // Add buckets.
- JsonArray jsonBucketNameArray = new JsonArray();
- for (String bucketName : javaPolicy.getBuckets()) {
- jsonBucketNameArray.add(new JsonPrimitive(bucketName));
- }
-
- if (jsonBucketNameArray.size() > 0) {
- JsonObject jsonBucketResource = new JsonObject();
- jsonBucketResource.add("values", jsonBucketNameArray);
- jsonBucketResource.addProperty("isRecursive", false);
- jsonBucketResource.addProperty("isExcludes", false);
- jsonResources.add("bucket", jsonBucketResource);
- }
-
- // Add keys.
- JsonArray jsonKeyNameArray = new JsonArray();
- for (String keyName : javaPolicy.getKeys()) {
- jsonKeyNameArray.add(new JsonPrimitive(keyName));
- }
- if (jsonKeyNameArray.size() > 0) {
- JsonObject jsonKeyResource = new JsonObject();
- jsonKeyResource.add("values", jsonKeyNameArray);
- jsonKeyResource.addProperty("isRecursive", false);
- jsonKeyResource.addProperty("isExcludes", false);
- jsonResources.add("key", jsonKeyResource);
- }
-
- jsonPolicy.add("resources", jsonResources);
-
- // Add roles and their acls to the policy.
- JsonArray jsonPolicyItemArray = new JsonArray();
-
- // Make a new policy item for each role in the map.
- Map<String, Collection<Acl>> roleAcls = javaPolicy.getRoleAcls();
- for (Map.Entry<String, Collection<Acl>> entry : roleAcls.entrySet())
{
- // Add role to the policy item.
- String roleName = entry.getKey();
- JsonObject jsonPolicyItem = new JsonObject();
- JsonArray jsonRoles = new JsonArray();
- jsonRoles.add(new JsonPrimitive(roleName));
- jsonPolicyItem.add("roles", jsonRoles);
-
- // Add acls to the policy item.
- JsonArray jsonAclArray = new JsonArray();
- for (Acl acl : entry.getValue()) {
- JsonObject jsonAcl = new JsonObject();
- jsonAcl.addProperty("type", aclToString.get(acl.getAclType()));
- jsonAcl.addProperty("isAllowed", acl.isAllowed());
- jsonAclArray.add(jsonAcl);
- jsonPolicyItem.add("accesses", jsonAclArray);
- }
- jsonPolicyItemArray.add(jsonPolicyItem);
- }
- jsonPolicy.add("policyItems", jsonPolicyItemArray);
-
- return jsonPolicy;
- }
- };
-
- private final JsonSerializer<Role> roleSerializer =
- new JsonSerializer<Role>() {
- @Override public JsonElement serialize(Role javaRole, Type typeOfSrc,
- JsonSerializationContext context) {
- JsonObject jsonRole = new JsonObject();
- jsonRole.addProperty("name", javaRole.getName());
-
- JsonArray jsonUserArray = new JsonArray();
- for (String javaUser : javaRole.getUsersMap().keySet()) {
- jsonUserArray.add(jsonConverter.toJsonTree(javaUser));
- }
-
- jsonRole.add("users", jsonUserArray);
- return jsonRole;
- }
- };
-
- private final JsonSerializer<BasicUserPrincipal> userSerializer =
- new JsonSerializer<BasicUserPrincipal>() {
- @Override public JsonElement serialize(BasicUserPrincipal user,
- Type typeOfSrc, JsonSerializationContext context) {
- JsonObject jsonMember = new JsonObject();
- jsonMember.addProperty("name", user.getName());
- jsonMember.addProperty("isAdmin", false);
- return jsonMember;
- }
- };
-
- public void setPolicyLastUpdateTime(long mtime) {
- lastPolicyUpdateTimeEpochMillis = mtime;
- }
-
- public long getPolicyLastUpdateTime() {
- return lastPolicyUpdateTimeEpochMillis;
- }
-
- public HashSet<String> getRoleList() {
- return null;
- }
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]