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 import railo.runtime.type.util.KeyConstants; 020 021 public class StoreGetACL extends S3Function { 022 023 public static final Collection.Key DISPLAY_NAME = KeyImpl.intern("displayName"); 024 public static final Collection.Key PERMISSION = KeyImpl.intern("permission"); 025 026 027 public static Object call(PageContext pc , String url) throws PageException { 028 029 S3Resource res=toS3Resource(pc,url,"StoreGetACL"); 030 try { 031 return toArrayStruct(res.getAccessControlPolicy().getAccessControlList()); 032 } catch (IOException e) { 033 throw Caster.toPageException(e); 034 } 035 } 036 037 private static Object toArrayStruct(List<AccessControl> accessControlList) throws S3Exception { 038 Array arr=new ArrayImpl(); 039 String type; 040 Struct sct; 041 AccessControl ac; 042 Iterator<AccessControl> it = accessControlList.iterator(); 043 while(it.hasNext()){ 044 ac=it.next(); 045 arr.appendEL(sct=new StructImpl()); 046 sct.setEL(KeyConstants._id, ac.getId()); 047 sct.setEL(PERMISSION, ac.getPermission()); 048 049 type = AccessControl.toType(ac.getType()); 050 if("Group".equalsIgnoreCase(type)) 051 setGroup(sct,ac); 052 else if("CanonicalUser".equalsIgnoreCase(type)) 053 sct.setEL(DISPLAY_NAME, ac.getDisplayName()); 054 else 055 sct.setEL(KeyConstants._email, ac.getId()); 056 } 057 return arr; 058 } 059 060 private static void setGroup(Struct sct, AccessControl ac) { 061 String uri = ac.getUri(); 062 sct.setEL(KeyConstants._id, uri); 063 if("http://acs.amazonaws.com/groups/global/AllUsers".equalsIgnoreCase(uri)) 064 sct.setEL(KeyConstants._group, "all"); 065 else if("http://acs.amazonaws.com/groups/global/AuthenticatedUsers".equalsIgnoreCase(uri)) 066 sct.setEL(KeyConstants._group, "authenticated"); 067 else if("http://acs.amazonaws.com/groups/s3/LogDelivery".equalsIgnoreCase(uri)) 068 sct.setEL(KeyConstants._group, "log_delivery"); 069 } 070 071 }