Beispiel #1
0
        public GcsStorageController()
        {
            Authentication = new Authentication();

            PreprocessPerformsDiscovery = true;

            ListType = GcsListType.File;

            TemplateKVP["[ContainerName]"] = "Reserved";
        }
Beispiel #2
0
        public List <Google.Apis.Storage.v1.Data.Object> ListObjects(string containerName, string directory, GcsListType listType, bool recurse, string directoryFilter, string fileFilter)
        {
            List <Google.Apis.Storage.v1.Data.Object> ret = new List <Google.Apis.Storage.v1.Data.Object>();

            Regex inclusiveDirFilter = STEM.Sys.IO.Path.BuildInclusiveFilter(directoryFilter);
            Regex exclusiveDirFilter = STEM.Sys.IO.Path.BuildExclusiveFilter(directoryFilter);

            Regex inclusiveFileFilter = STEM.Sys.IO.Path.BuildInclusiveFilter(fileFilter);
            Regex exclusiveFileFilter = STEM.Sys.IO.Path.BuildExclusiveFilter(fileFilter);

            if (String.IsNullOrEmpty(containerName))
            {
                foreach (Google.Apis.Storage.v1.Data.Bucket cc in ListBuckets())
                {
                    ret.AddRange(ListObjects(cc.Name, directory, listType, recurse, directoryFilter, fileFilter));
                }

                return(ret);
            }

            foreach (Google.Apis.Storage.v1.Data.Object blob in ListObjects(containerName, directory))
            {
                bool isDir = true;

                string path = ToString(blob);
                string dir  = path;

                if (!path.EndsWith(Path.DirectorySeparatorChar.ToString()))
                {
                    dir   = STEM.Sys.IO.Path.GetDirectoryName(path);
                    isDir = false;
                }

                bool good = false;
                if (isDir)
                {
                    if (inclusiveDirFilter == null || inclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                    {
                        if (exclusiveDirFilter == null || !exclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                        {
                            good = true;
                        }
                    }
                }
                else
                {
                    if (inclusiveDirFilter == null || inclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                    {
                        if (exclusiveDirFilter == null || !exclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                        {
                            if (inclusiveFileFilter == null || inclusiveFileFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(path).ToUpper()))
                            {
                                if (exclusiveFileFilter == null || !exclusiveFileFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(path).ToUpper()))
                                {
                                    good = true;
                                }
                            }
                        }
                    }
                }

                if (!good)
                {
                    continue;
                }

                if (isDir)
                {
                    if (listType == GcsListType.Directory || listType == GcsListType.All)
                    {
                        ret.Add(blob);
                    }

                    if (recurse)
                    {
                        ret.AddRange(ListObjects(containerName, PrefixFromPath(path), listType, recurse, directoryFilter, fileFilter));
                    }
                }
                else if (!isDir && (listType == GcsListType.File || listType == GcsListType.All))
                {
                    if (directory == "" && !blob.Name.Contains("/"))
                    {
                        ret.Add(blob);
                    }
                    else if (directory != "")
                    {
                        string prefix = directory.Trim('/').Trim('\\');
                        prefix = prefix.Replace('\\', '/');
                        prefix = prefix.Trim('/') + '/';

                        if (!blob.Name.Replace(prefix, "").Contains("/"))
                        {
                            ret.Add(blob);
                        }
                    }
                }
            }

            return(ret);
        }