blob: b7652a58d3c5dbb66795e6d0e9d998826ce5e7fa [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.sentry.shell;
import com.budhash.cliche.Command;
import com.budhash.cliche.Shell;
import com.budhash.cliche.ShellDependent;
import org.apache.sentry.core.common.exception.SentryUserException;
import org.apache.sentry.provider.db.tools.ShellCommand;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Sentry group manipulation for CLI
*/
public class GroupShell implements ShellDependent {
private final ShellCommand shellCommand;
private final String authUser;
Shell shell;
public GroupShell(ShellCommand shellCommand, String authUser) {
this.shellCommand = shellCommand;
this.authUser = authUser;
}
@Command(abbrev = "lr", header = "[groups]",
description = "list groups and their roles")
public List<String> listRoles() {
try {
return shellCommand.listGroupRoles(authUser);
} catch (SentryUserException e) {
System.out.printf("failed to list the groups and roles: %s\n", e.toString());
return Collections.emptyList();
}
}
@Command(description = "Grant role to groups")
public void grant(String roleName, String ...groups) {
try {
Set<String> groupsSet = new HashSet<>(Arrays.asList(groups));
shellCommand.grantRoleToGroups(authUser, roleName, groupsSet);
} catch (SentryUserException e) {
System.out.printf("Failed to gran role %s to groups: %s\n",
roleName, e.toString());
}
}
@Command(description = "Revoke role from groups")
public void revoke(String roleName, String ...groups) {
try {
Set<String> groupsSet = new HashSet<>(Arrays.asList(groups));
shellCommand.revokeRoleFromGroups(authUser, roleName, groupsSet);
} catch (SentryUserException e) {
System.out.printf("Failed to revoke role %s to groups: %s\n",
roleName, e.toString());
}
}
@Override
public void cliSetShell(Shell theShell) {
this.shell = theShell;
}
}