Package railo.commons.io.res.type.s3

Source Code of railo.commons.io.res.type.s3.AccessControl

package railo.commons.io.res.type.s3;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import railo.commons.lang.Md5;
import railo.commons.lang.StringUtil;
import railo.runtime.exp.PageException;
import railo.runtime.functions.s3.StoreGetACL;
import railo.runtime.op.Caster;
import railo.runtime.type.Array;
import railo.runtime.type.Struct;
import railo.runtime.type.util.KeyConstants;

public class AccessControl {

  public static final short TYPE_GROUP=1;
  public static final short TYPE_EMAIL=2;
  public static final short TYPE_CANONICAL_USER=4;
 
  private String id;
  private String displayName;
  private String permission;
  private String uri;
  private short type;
  private String email;
 
  /**
   * @return the type
   */
  public short getType() {
    return type;
  }

  /**
   * @param type the type to set
   */
  public void setType(short type) {
    this.type = type;
  }

  /**
   * @return the id
   */
  public String getId() {
    return id;
  }
  /**
   * @param id the id to set
   */
  public void setId(String id) {
    this.id = id;
  }
  /**
   * @return the displayName
   */
  public String getDisplayName() {
    return displayName;
  }
  /**
   * @param displayName the displayName to set
   */
  public void setDisplayName(String displayName) {
    this.displayName = displayName;
  }
  /**
   * @return the permission
   */
  public String getPermission() {
    return permission;
  }
 
  public void setPermission(String permission) {
    this.permission=permission;
  }
 
  /**
   * @return the uri
   */
  public String getUri() {
    return uri;
  }
  /**
   * @param uri the uri to set
   */
  public void setUri(String uri) {
    this.uri = uri;
  }
 

 
  /**
   * @return the email
   */
  public String getEmail() {
    return email;
  }

  /**
   * @param email the email to set
   */
  public void setEmail(String email) {
    this.email = email;
  }
 

  @Override
  public String toString(){
    return "displayName:"+displayName+";email:"+email+";id:"+id+";permission:"+permission+";type:"+type+";uri:"+uri;
  }

  public String hash() {
    try {
      return Md5.getDigestAsString(toString());
    } catch (IOException e) {
      return null;
    }
  }
  @Override
  public int hashCode() {
    return hash().hashCode();
  }
 
 
 
 
 
 
 

  public static List<AccessControl> toAccessControlList(Object objACL) throws S3Exception, PageException{
    Array arr = Caster.toArray(objACL,null);
    if(arr==null)
      throw new S3Exception("ACL Object must be a Array of Structs");
   
    Struct sct;
    Iterator<Object> it = arr.valueIterator();
    List<AccessControl> acl=new ArrayList<AccessControl>();
    while(it.hasNext()){
      sct=Caster.toStruct(it.next(), null);
      if(sct==null)
        throw new S3Exception("ACL Object must be a Array of Structs");
      acl.add(toAccessControl(sct));
    }
    return acl;
  }
 
 
  public static AccessControl toAccessControl(Struct sct) throws S3Exception, PageException{
    AccessControl ac=new AccessControl();
        ac.setPermission(AccessControl.toPermission(sct.get(StoreGetACL.PERMISSION,null)));
       
       
       
        // Email
        String email = Caster.toString(sct.get(KeyConstants._email,null),null);
        if(!StringUtil.isEmpty(email)){
          ac.setType(AccessControl.TYPE_EMAIL);
          ac.setEmail(email);
          return ac;
        }
       
        // Group
        String uri=AccessControl.groupToURI(sct.get(KeyConstants._group,null));
        if(!StringUtil.isEmpty(uri)) {
          ac.setType(AccessControl.TYPE_GROUP);
          ac.setUri(uri);
          return ac;
        }
       
        // Canonical
        String id = Caster.toString(sct.get(KeyConstants._id),null);
        String displayName = Caster.toString(sct.get(StoreGetACL.DISPLAY_NAME),null);
        if(StringUtil.isEmpty(id))
          throw new S3Exception("missing id for Canonical User defintion");
       
        ac.setType(AccessControl.TYPE_CANONICAL_USER);
        ac.setId(id);
        ac.setDisplayName(displayName);
       
        return ac;
  }
 
 
  public static String toPermission(Object oPermission) throws S3Exception {
    String permission=Caster.toString(oPermission,null);
    if(StringUtil.isEmpty(permission,true))
      throw new S3Exception("missing permission definition");
   
    permission=permission.toUpperCase().trim();
    permission=AccessControl.removeWordDelimter(permission);
   
    if("FULLCONTROL".equals(permission))
      return "FULL_CONTROL";
    else if("WRITEACP".equals(permission))
      return "WRITE_ACP";
    else if("READACP".equals(permission))
      return "READ_ACP";
    else if("WRITE".equals(permission))
      return "WRITE";
    else if("READ".equals(permission))
      return "READ";
    else
      throw new S3Exception("invalid permission definition ["+permission+"], valid permissions are [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]");
  }
 

  public static String groupToURI(Object oGroup) throws S3Exception {
    if(!StringUtil.isEmpty(oGroup)) {
      String group=Caster.toString(oGroup,null);
      if(group==null)
        throw new S3Exception("invalid object type for group definition");
           
      group=removeWordDelimter(group);
      if("all".equalsIgnoreCase(group))
                return "http://acs.amazonaws.com/groups/global/AllUsers";
      if("authenticated".equalsIgnoreCase(group) || "AuthenticatedUser".equalsIgnoreCase(group) || "AuthenticatedUsers".equalsIgnoreCase(group))
                return "http://acs.amazonaws.com/groups/global/AuthenticatedUsers";
      if("logdelivery".equalsIgnoreCase(group))
                return "http://acs.amazonaws.com/groups/s3/LogDelivery";
      throw new S3Exception("invalid group definition ["+group+"], valid group defintions are are [all,authenticated,log_delivery]");
               
        }
    return null;
  }
 

  public static String toType(short type) throws S3Exception {
    String rtn = toType(type, null);
    if(rtn!=null) return rtn;
    throw new S3Exception("invalid type defintion");
  }
 
  public static String toType(short type, String defaultValue) {
    switch(type){
    case TYPE_EMAIL: return "AmazonCustomerByEmail";
    case TYPE_GROUP: return "Group";
    case TYPE_CANONICAL_USER: return "CanonicalUser";
    }
    return defaultValue;
  }

  public static short toType(String type) throws S3Exception {
    short rtn = toType(type, (short)-1);
    if(rtn!=-1) return rtn;
   
    throw new S3Exception("invalid type defintion ["+type+"], valid types are [Email,Group,CanonicalUser]");
  }
 
  public static short toType(String type, short defaultValue) {
    type=removeWordDelimter(type);
    if("Email".equalsIgnoreCase(type)) return TYPE_EMAIL;
    if("AmazonCustomerByEmail".equalsIgnoreCase(type)) return TYPE_EMAIL;
    if("CanonicalUser".equalsIgnoreCase(type)) return TYPE_CANONICAL_USER;
    if("Group".equalsIgnoreCase(type)) return TYPE_GROUP;
   
    return defaultValue;
  }
 

 
  private static String removeWordDelimter(String str) {
    str=StringUtil.replace(str,"_", "", false);
    str=StringUtil.replace(str,"-", "", false);
    str=StringUtil.replace(str," ", "", false);
    return str;
  }
}
TOP

Related Classes of railo.commons.io.res.type.s3.AccessControl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.