package org.aplikator.server;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.Authorizer;
import org.apache.shiro.authz.Permission;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.subject.PrincipalCollection;
import waffle.servlet.WindowsPrincipal;
import waffle.shiro.GroupMappingWaffleRealm;
import waffle.shiro.negotiate.NegotiateAuthenticationRealm;
/**
*
*/
public class WaffleNegotiateAuthenticationRealm extends NegotiateAuthenticationRealm implements Authorizer {
GroupMappingWaffleRealm delegate = new GroupMappingWaffleRealm() {
Map<Object, AuthorizationInfo> cache = new HashMap<>();
protected AuthorizationInfo getAuthorizationInfo(PrincipalCollection principals) {
if (principals == null) {
return null;
}
AuthorizationInfo info = cache.get(principals);
if (info == null) {
// Call template method if the info was not found in a cache
info = doGetAuthorizationInfoOverriden(principals);
// If the info is not null and the cache has been created, then cache the authorization info.
if (info != null && cache != null) {
cache.put(principals, info);
}
}
return info;
}
protected AuthorizationInfo doGetAuthorizationInfoOverriden(final PrincipalCollection principals) {
final WindowsPrincipal principal = principals.oneByType(WindowsPrincipal.class);
return principal == null ? null : this.doAuthorizationInfoOverriden(principal);
}
protected AuthorizationInfo doAuthorizationInfoOverriden(final WindowsPrincipal principal) {
final SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
authorizationInfo.addRoles(this.getRoleNamesForGroups(principal.getGroups().keySet()));
return authorizationInfo;
}
};
public void setGroupRolesMap(final Map<String, String> value) {
delegate.setGroupRolesMap(value);
}
@Override
public boolean isPermitted(PrincipalCollection principals, String permission) {
return delegate.isPermitted(principals, permission);
}
@Override
public boolean isPermitted(PrincipalCollection subjectPrincipal, Permission permission) {
return delegate.isPermitted(subjectPrincipal, permission);
}
@Override
public boolean[] isPermitted(PrincipalCollection subjectPrincipal, String... permissions) {
return delegate.isPermitted(subjectPrincipal, permissions);
}
@Override
public boolean[] isPermitted(PrincipalCollection subjectPrincipal, List<Permission> permissions) {
return delegate.isPermitted(subjectPrincipal, permissions);
}
@Override
public boolean isPermittedAll(PrincipalCollection subjectPrincipal, String... permissions) {
return delegate.isPermittedAll(subjectPrincipal, permissions);
}
@Override
public boolean isPermittedAll(PrincipalCollection subjectPrincipal, Collection<Permission> permissions) {
return delegate.isPermittedAll(subjectPrincipal, permissions);
}
@Override
public void checkPermission(PrincipalCollection subjectPrincipal, String permission) throws AuthorizationException {
delegate.checkPermission(subjectPrincipal, permission);
}
@Override
public void checkPermission(PrincipalCollection subjectPrincipal, Permission permission) throws AuthorizationException {
delegate.checkPermission(subjectPrincipal, permission);
}
@Override
public void checkPermissions(PrincipalCollection subjectPrincipal, String... permissions) throws AuthorizationException {
delegate.checkPermissions(subjectPrincipal, permissions);
}
@Override
public void checkPermissions(PrincipalCollection subjectPrincipal, Collection<Permission> permissions) throws AuthorizationException {
delegate.checkPermissions(subjectPrincipal, permissions);
}
@Override
public boolean hasRole(PrincipalCollection subjectPrincipal, String roleIdentifier) {
return delegate.hasRole(subjectPrincipal, roleIdentifier);
}
@Override
public boolean[] hasRoles(PrincipalCollection subjectPrincipal, List<String> roleIdentifiers) {
return hasRoles(subjectPrincipal, roleIdentifiers);
}
@Override
public boolean hasAllRoles(PrincipalCollection subjectPrincipal, Collection<String> roleIdentifiers) {
return hasAllRoles(subjectPrincipal, roleIdentifiers);
}
@Override
public void checkRole(PrincipalCollection subjectPrincipal, String roleIdentifier) throws AuthorizationException {
delegate.checkRole(subjectPrincipal, roleIdentifier);
}
@Override
public void checkRoles(PrincipalCollection subjectPrincipal, Collection<String> roleIdentifiers) throws AuthorizationException {
delegate.checkRoles(subjectPrincipal, roleIdentifiers);
}
@Override
public void checkRoles(PrincipalCollection subjectPrincipal, String... roleIdentifiers) throws AuthorizationException {
delegate.checkRoles(subjectPrincipal, roleIdentifiers);
}
}