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    }