import ori.data.IDomain;
import ori.data.IPermissionList;
import ori.data.IToken;
import ori.data.IUserRoleList;
import ori.impl.PermissionList;
import ori.impl.UserRoleList;
import ori.impl.encoder.Md5HexaEncoder;

public class Test
{
  //roles
  private static final String ADMINISTRATOR_ROLE = "administrator";
  private static final String USER_ROLE = "user";

  //users
  private static final String ADMIN_LOGIN = "admin";
  private static final String ADMIN_PASSWORD = "alma";
  private static final String ENCODED_ADMIN_PASSWORD = "ebbc3c26a34b609dc46f5c3378f96e08";
  
  public static final String LOGIN_A = "a";
  public static final String PASSWORD_A = "a";
  public static final String ENCODED_PASSWORD_A = "0cc175b9c0f1b6a831c399e269772661";

  public static final String LOGIN_B = "b";
  public static final String PASSWORD_B = "b";
  public static final String ENCODED_PASSWORD_B = "92eb5ffee6ae2fec3ad71c777531578f";

  public static final String LOGIN_C = "c";
  public static final String PASSWORD_C = "c";
  public static final String ENCODED_PASSWORD_C = "4a8a08f09d37b73795649038408b5f33";

  //actions
  private static final String WRITE_ACTION = "write";
  private static final String READ_ACTION = "read";
  
  //modules
  private static final String SECRET_MODULE = "Secret";
  private static final String PUBLIC_MODULE = "Public";
  
  public static void main(String[] args)
  {
    IDomain testDomain = null;
    
    try
    {
      IUserRoleListProvider userRoleListProvider = new UserRoleListProvider();
      IRolePermissionListProvider rolePermissionListProvider = new RolePermissionListProvider();
      IUserPermissionListProvider userPermissionListProvider = new UserPermissionListProvider();
      IUserAuthenticator userAuthenticator = new UserAuthenticator();
      IPasswordEncoder passwordEncoder = new Md5HexaEncoder();

      // create a IDomain

      testDomain = Ori.createDomain(
          userRoleListProvider, 
          rolePermissionListProvider, 
          userPermissionListProvider,
          userAuthenticator,
          passwordEncoder, 
          ADMIN_LOGIN, ENCODED_ADMIN_PASSWORD);
      
      // Login
      IToken token = testDomain.login(ADMIN_LOGIN,ADMIN_PASSWORD);
      
      // check permission
      boolean result = token.hasPermission(SECRET_MODULE,READ_ACTION);
      
      System.out.println("User '"+token.getLogin()+"' has permission to " +
          "perform 'read' on 'secret'? "+result);
      
      // Logout
      token.invalidate();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
    finally
    {
      testDomain.destroy();
    }
  }
  
  private static class UserRoleListProvider implements IUserRoleListProvider
  {
    public IUserRoleList getUserRoleList()
    {
      UserRoleList result = new UserRoleList();
      
      result.addRoleToUser(LOGIN_A, ADMINISTRATOR_ROLE);
      result.addRoleToUser(LOGIN_A, USER_ROLE);
      
      result.addRoleToUser(LOGIN_B, USER_ROLE);
      
      result.addRoleToUser(LOGIN_C, USER_ROLE);
      
      return result;
    }
  }
  
  private static class UserAuthenticator implements IUserAuthenticator
  {
    public boolean authenticate(String login, String encodedPasswordthrows Exception
    {
      if (login.equals(LOGIN_A&& encodedPassword.equals(ENCODED_PASSWORD_A)) 
        return true;
      else if (login.equals(LOGIN_B&& encodedPassword.equals(ENCODED_PASSWORD_B)) 
        return true;
      else if (login.equals(LOGIN_C&& encodedPassword.equals(ENCODED_PASSWORD_C)) 
        return true;
      else return false;
    }
  }

  private static class RolePermissionListProvider implements IRolePermissionListProvider
  {
    public IPermissionList getRolePermissionList()
    {
      PermissionList pl = new PermissionList();
      
      pl.addPermission(ADMINISTRATOR_ROLE, PUBLIC_MODULE, READ_ACTION);
      pl.addPermission(ADMINISTRATOR_ROLE, PUBLIC_MODULE, WRITE_ACTION);
      pl.addPermission(ADMINISTRATOR_ROLE, SECRET_MODULE, READ_ACTION);
      pl.addPermission(ADMINISTRATOR_ROLE, SECRET_MODULE, WRITE_ACTION);

      pl.addPermission(USER_ROLE, PUBLIC_MODULE, READ_ACTION);
      pl.addPermission(USER_ROLE, PUBLIC_MODULE, WRITE_ACTION);

      return pl;
    }
  }
  
  private static class UserPermissionListProvider implements IUserPermissionListProvider
  {
    public IPermissionList getUserPermissionList()
    {
      PermissionList pl = new PermissionList();
      pl.addPermission(LOGIN_C,SECRET_MODULE,READ_ACTION);
      return pl;
    }
  }
}
Java2html