package com.shadowraider.struts.security;

import com.shadowraider.struts.security.principles.StrutsGroup;
import com.shadowraider.struts.security.principles.StrutsPermission;
import com.shadowraider.struts.security.principles.StrutsRole;
import com.shadowraider.struts.security.principles.StrutsUser;

public interface SPIAdapter {
	
	public void init(SecurityPlugin plugin) throws SecuritySPIException;
	public void shutdown();
	
	public boolean authenticateUser(String username, String password);
	public StrutsUser getAuthenticatedUser(String username, String password);
	
	public StrutsUser getUser(String username);
	public StrutsGroup getGroup(String groupname);
	public StrutsRole getRole(String rolename);
	public StrutsPermission getPermission(String permissionname);
	
	public void saveUser(StrutsUser user);
	
	public void removeUser(StrutsUser user);
	
	public boolean isUserInGroup(String username, String groupname);
	public boolean isUserInGroup(StrutsUser user, String groupname);
	public boolean isUserInGroup(String username, StrutsGroup group);
	public boolean isUserInGroup(StrutsUser user, StrutsGroup group);
	
	public boolean userHasRole(String username, String rolename);
	public boolean userHasRole(StrutsUser user, String rolename);
	public boolean userHasRole(String username, StrutsRole role);
	public boolean userHasRole(StrutsUser user, StrutsRole role);
	
	public boolean userHasPermission(String username, String permissionname);
	public boolean userHasPermission(StrutsUser user, String permissionname);
	public boolean userHasPermission(String username, StrutsPermission permission);
	public boolean userHasPermission(StrutsUser user, StrutsPermission permission);
	
	public boolean checkPermissionFromRoles(String username, String permissionname);
	public boolean checkPermissionFromRoles(StrutsUser user, String permissionname);
	public boolean checkPermissionFromRoles(String username, StrutsPermission permission);
	public boolean checkPermissionFromRoles(StrutsUser user, StrutsPermission permission);
	
	public void grantPermissionToUser(String username, String permissionname);
	public void grantPermissionToUser(StrutsUser user, String permissionname);
	public void grantPermissionToUser(String username, StrutsPermission permission);
	public void grantPermissionToUser(StrutsUser user, StrutsPermission permission);
	
	public void grantRoleToUser(String username, String rolename);
	public void grantRoleToUser(StrutsUser user, String rolename);
	public void grantRoleToUser(String username, StrutsRole role);
	public void grantRoleToUser(StrutsUser user, StrutsRole role);
	
	public void addUserToGroup(String username, String groupname);
	public void addUserToGroup(StrutsUser user, String groupname);
	public void addUserToGroup(String username, StrutsGroup group);
	public void addUserToGroup(StrutsUser user, StrutsGroup group);
	
	public void grantPermissionToRole(String rolename, String permissionname);
	public void grantPermissionToRole(StrutsRole role, String permissionname);
	public void grantPermissionToRole(String rolename, StrutsPermission permission);
	public void grantPermissionToRole(StrutsRole role, StrutsPermission permission);
	
	public void revokePermissionFromUser(String username, String permissionname);
	public void revokePermissionFromUser(StrutsUser user, String permissionname);
	public void revokePermissionFromUser(String username, StrutsPermission permission);
	public void revokePermissionFromUser(StrutsUser user, StrutsPermission permission);
	
	public void revokeRoleFromUser(String username, String rolename);
	public void revokeRoleFromUser(StrutsUser user, String rolename);
	public void revokeRoleFromUser(String username, StrutsRole role);
	public void revokeRoleFromUser(StrutsUser user, StrutsRole role);
	
	public void removeUserFromGroup(String username, String groupname);
	public void removeUserFromGroup(StrutsUser user, String groupname);
	public void removeUserFromGroup(String username, StrutsGroup group);
	public void removeUserFromGroup(StrutsUser user, StrutsGroup group);
	
	public void revokePermissionFromRole(String rolename, String permissionname);
	public void revokePermissionFromRole(StrutsRole role, String permissionname);
	public void revokePermissionFromRole(String rolename, StrutsPermission permission);
	public void revokePermissionFromRole(StrutsRole role, StrutsPermission permission);
}
