001 package railo.runtime.functions.s3; 002 003 import java.io.IOException; 004 import java.util.Iterator; 005 import java.util.List; 006 007 import railo.commons.io.res.type.s3.AccessControl; 008 import railo.commons.io.res.type.s3.S3Exception; 009 import railo.commons.io.res.type.s3.S3Resource; 010 import railo.runtime.PageContext; 011 import railo.runtime.exp.PageException; 012 import railo.runtime.op.Caster; 013 import railo.runtime.type.Array; 014 import railo.runtime.type.ArrayImpl; 015 import railo.runtime.type.Collection; 016 import railo.runtime.type.KeyImpl; 017 import railo.runtime.type.Struct; 018 import railo.runtime.type.StructImpl; 019 020 public class StoreGetACL extends S3Function { 021 022 public static final Collection.Key GROUP = KeyImpl.intern("group"); 023 public static final Collection.Key DISPLAY_NAME = KeyImpl.intern("displayName"); 024 public static final Collection.Key EMAIL = KeyImpl.intern("email"); 025 public static final Collection.Key PERMISSION = KeyImpl.intern("permission"); 026 027 028 public static Object call(PageContext pc , String url) throws PageException { 029 030 S3Resource res=toS3Resource(pc,url,"StoreGetACL"); 031 try { 032 return toArrayStruct(res.getAccessControlPolicy().getAccessControlList()); 033 } catch (IOException e) { 034 throw Caster.toPageException(e); 035 } 036 } 037 038 private static Object toArrayStruct(List<AccessControl> accessControlList) throws S3Exception { 039 Array arr=new ArrayImpl(); 040 String type; 041 Struct sct; 042 AccessControl ac; 043 Iterator<AccessControl> it = accessControlList.iterator(); 044 while(it.hasNext()){ 045 ac=it.next(); 046 arr.appendEL(sct=new StructImpl()); 047 sct.setEL(KeyImpl.ID, ac.getId()); 048 sct.setEL(PERMISSION, ac.getPermission()); 049 050 type = AccessControl.toType(ac.getType()); 051 if("Group".equalsIgnoreCase(type)) 052 setGroup(sct,ac); 053 else if("CanonicalUser".equalsIgnoreCase(type)) 054 sct.setEL(DISPLAY_NAME, ac.getDisplayName()); 055 else 056 sct.setEL(EMAIL, ac.getId()); 057 } 058 return arr; 059 } 060 061 private static void setGroup(Struct sct, AccessControl ac) { 062 String uri = ac.getUri(); 063 sct.setEL(KeyImpl.ID, uri); 064 if("http://acs.amazonaws.com/groups/global/AllUsers".equalsIgnoreCase(uri)) 065 sct.setEL(GROUP, "all"); 066 else if("http://acs.amazonaws.com/groups/global/AuthenticatedUsers".equalsIgnoreCase(uri)) 067 sct.setEL(GROUP, "authenticated"); 068 else if("http://acs.amazonaws.com/groups/s3/LogDelivery".equalsIgnoreCase(uri)) 069 sct.setEL(GROUP, "log_delivery"); 070 } 071 072 }