5
0
mirror of https://github.com/apache/sqoop.git synced 2025-05-06 06:12:26 +08:00

SQOOP-2772: Sqoop2: Remove the notion of PrincipalsBean

(Jarek Jarcec Cecho via Colin Ma)
This commit is contained in:
Colin Ma 2016-01-14 14:35:35 +08:00
parent 2df3db3e78
commit 88654b95fa
6 changed files with 81 additions and 84 deletions

View File

@ -73,7 +73,7 @@ public void dropRole(String serverUrl, MRole role) {
public void grantRevokeRole(String serverUrl, List<MRole> roles, List<MPrincipal> principals, boolean isGrant) {
RolesBean rolesBean = new RolesBean(roles);
PrincipalsBean principalsBean = new PrincipalsBean(principals);
PrincipalBean principalsBean = new PrincipalBean(principals);
// Extract all config inputs including sensitive inputs
JSONObject jsonObject = new JSONObject();
jsonObject.putAll(rolesBean.extract(false));
@ -95,17 +95,17 @@ public RolesBean readRolesByPrincipal(String serverUrl, MPrincipal principal) {
return bean;
}
public PrincipalsBean readPrincipalsByRole(String serverUrl, MRole role) {
public PrincipalBean readPrincipalsByRole(String serverUrl, MRole role) {
String response = super.get(serverUrl + RESOURCE + PRINCIPALS
+ "?role_name=" + UrlSafeUtils.urlEncode(role.getName()));
JSONObject jsonObject = JSONUtils.parse(response);
PrincipalsBean bean = new PrincipalsBean();
PrincipalBean bean = new PrincipalBean();
bean.restore(jsonObject);
return bean;
}
public void grantRevokePrivilege(String serverUrl, List<MPrincipal> principals, List<MPrivilege> privileges, boolean isGrant) {
PrincipalsBean principalsBean = new PrincipalsBean(principals);
PrincipalBean principalsBean = new PrincipalBean(principals);
// Extract all config inputs including sensitive inputs
JSONObject jsonObject = new JSONObject();
jsonObject.putAll(principalsBean.extract(false));

View File

@ -202,7 +202,7 @@ public RolesBean readRolesByPrincipal(MPrincipal principal) {
return getAuthorizationRequest().readRolesByPrincipal(serverUrl, principal);
}
public PrincipalsBean readPrincipalsByRole(MRole role) {
public PrincipalBean readPrincipalsByRole(MRole role) {
return getAuthorizationRequest().readPrincipalsByRole(serverUrl, role);
}

View File

@ -33,7 +33,7 @@
@InterfaceStability.Unstable
public class PrincipalBean implements JsonBean {
public static final String PRINCIPAL = "principal";
private static final String PRINCIPALS = "principals";
private static final String NAME = "name";
private static final String TYPE = "type";
@ -46,7 +46,7 @@ public List<MPrincipal> getPrincipals() {
// For "extract"
public PrincipalBean(MPrincipal principal) {
this();
this.principals = new ArrayList<MPrincipal>();
this.principals = new ArrayList<>();
this.principals.add(principal);
}
@ -62,9 +62,16 @@ public PrincipalBean() {
@Override
@SuppressWarnings("unchecked")
public JSONObject extract(boolean skipSensitive) {
JSONObject principal = new JSONObject();
principal.put(PRINCIPAL, extractPrincipal(principals.get(0)));
return principal;
JSONArray principalsArray = extractPrincipals();
JSONObject principals = new JSONObject();
principals.put(PRINCIPALS, principalsArray);
return principals;
}
@Override
public void restore(JSONObject json) {
JSONArray principalsArray = JSONUtils.getJSONArray(json, PRINCIPALS);
restorePrincipals(principalsArray);
}
@SuppressWarnings("unchecked")
@ -86,15 +93,8 @@ private JSONObject extractPrincipal(MPrincipal principal) {
return object;
}
@Override
public void restore(JSONObject json) {
principals = new ArrayList<MPrincipal>();
JSONObject obj = JSONUtils.getJSONObject(json, PRINCIPAL);
principals.add(restorePrincipal(obj));
}
protected void restorePrincipals(JSONArray array) {
principals = new ArrayList<MPrincipal>();
principals = new ArrayList<>();
for (Object obj : array) {
principals.add(restorePrincipal(obj));
}

View File

@ -1,63 +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.sqoop.json;
import org.apache.sqoop.classification.InterfaceAudience;
import org.apache.sqoop.classification.InterfaceStability;
import org.apache.sqoop.model.MPrincipal;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.util.List;
@InterfaceAudience.Private
@InterfaceStability.Unstable
public class PrincipalsBean extends PrincipalBean {
private static final String PRINCIPALS = "principals";
// For "extract"
public PrincipalsBean(MPrincipal principal) {
super(principal);
}
public PrincipalsBean(List<MPrincipal> principals) {
super(principals);
}
// For "restore"
public PrincipalsBean() {
}
@Override
@SuppressWarnings("unchecked")
public JSONObject extract(boolean skipSensitive) {
JSONArray principalsArray = super.extractPrincipals();
JSONObject principals = new JSONObject();
principals.put(PRINCIPALS, principalsArray);
return principals;
}
@Override
public void restore(JSONObject json) {
JSONArray principalsArray = JSONUtils.getJSONArray(json, PRINCIPALS);
restorePrincipals(principalsArray);
}
}

View File

@ -0,0 +1,60 @@
/**
* 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.sqoop.json;
import org.apache.sqoop.model.MPrincipal;
import org.json.simple.JSONObject;
import org.testng.annotations.Test;
import java.util.LinkedList;
import java.util.List;
import static org.testng.AssertJUnit.assertEquals;
public class TestPrincipalBean {
@Test
public void testSerialization() {
MPrincipal principalUser = new MPrincipal("jarcec", MPrincipal.TYPE.USER);
MPrincipal principalGroup = new MPrincipal("sqoop", MPrincipal.TYPE.GROUP);
List<MPrincipal> principals = new LinkedList<>();
principals.add(principalUser);
principals.add(principalGroup);
// Serialize it to JSON object
PrincipalBean outputBean = new PrincipalBean(principals);
JSONObject json = outputBean.extract(false);
// "Move" it across network in text form
String jsonString = json.toJSONString();
// Retrieved transferred object
JSONObject parsedJson = JSONUtils.parse(jsonString);
PrincipalBean inputBean = new PrincipalBean();
inputBean.restore(parsedJson);
assertEquals(inputBean.getPrincipals().size(), 2);
assertEquals(inputBean.getPrincipals().get(0).getName(), "jarcec");
assertEquals(inputBean.getPrincipals().get(0).getType(), "USER");
assertEquals(inputBean.getPrincipals().get(1).getName(), "sqoop");
assertEquals(inputBean.getPrincipals().get(1).getType(), "GROUP");
}
}

View File

@ -164,7 +164,7 @@ private JsonBean getPrincipal(RequestContext ctx) {
MRole role = new MRole(role_name);
manager.logAuditEvent(ctx.getUserName(),
ctx.getRequest().getRemoteAddr(), "get", "principals by role", role.toString());
return new PrincipalsBean(handler.getPrincipalsByRole(role));
return new PrincipalBean(handler.getPrincipalsByRole(role));
} else {
throw new SqoopException(SecurityError.AUTH_0012, "Can't get role name");
}
@ -259,7 +259,7 @@ private JsonBean grantRevokeRole(RequestContext ctx, boolean isGrant) {
AuditLoggerManager manager = AuditLoggerManager.getInstance();
RolesBean rolesBean = new RolesBean();
PrincipalsBean principalsBean = new PrincipalsBean();
PrincipalBean principalsBean = new PrincipalBean();
try {
JSONObject json = JSONUtils.parse(ctx.getRequest().getReader());
@ -290,7 +290,7 @@ private JsonBean grantRevokePrivilege(RequestContext ctx, boolean isGrant) {
AuthorizationHandler handler = AuthorizationManager.getInstance().getAuthorizationHandler();
AuditLoggerManager manager = AuditLoggerManager.getInstance();
PrincipalsBean principalsBean = new PrincipalsBean();
PrincipalBean principalsBean = new PrincipalBean();
PrivilegesBean privilegesBean = new PrivilegesBean();
try {