예제 #1
0
 public ManifestContainer(string fileName, IEnumerable <byte> data, SignatureFileRef signatureFileRef, ManifestSpec manifestSpec)
 {
     FileName         = fileName;
     Data             = data ?? Enumerable.Empty <byte>();
     SignatureFileRef = signatureFileRef;
     ManifestSpec     = manifestSpec;
 }
예제 #2
0
        public Manifest(dynamic desc, string version = null, string type = "url", string repositoryBasePath = "", bool checkNames = true)
        {
            if (type == "url")
            {
                if (desc is string)
                {
                    this.ManifestSpec = ManifestFromYaml(desc);
                }
                else
                {
                    this.ManifestSpec = desc;
                }
                this.ManifestPath = "url";
            }
            else
            {
                string yml = File.ReadAllText(desc);
                this.ManifestSpec = ManifestFromYaml(yml);
                this.ManifestPath = desc;
            }

            this.Versions = new HashSet <string>();
            if (this.ManifestSpec.ContainsKey("Versions"))
            {
                foreach (var ver in this.ManifestSpec["Versions"])
                {
                    Versions.Add(ver.ToString());
                }
            }

            this.Versions.Add(this.ManifestSpec["Version"].ToString());
            this.CartridgeVersion = this.ManifestSpec["Cartridge-Version"].ToString();
            if (!string.IsNullOrEmpty(version))
            {
                this.Version = version;
                this.ManifestSpec["Version"] = this.Version;
            }
            else
            {
                this.Version = ManifestSpec["Version"];
            }

            this.CartridgeVendor = this.ManifestSpec["Cartridge-Vendor"];
            this.Name            = ManifestSpec["Name"];
            this.ShortName       = ManifestSpec["Cartridge-Short-Name"];
            this.Categories      = ManifestSpec["Categories"] ?? new List <object>()
            {
            };
            this.isDeployable = this.Categories.Contains("web_framework");
            this.isWebProxy   = this.Categories.Contains("web_proxy");

            string repositoryDirectory = string.Format("{0}-{1}", CartridgeVendor.ToLower(), this.Name);

            this.RepositoryPath = Path.Combine(repositoryBasePath, repositoryDirectory, CartridgeVersion);

            if (((Dictionary <object, object>)ManifestSpec).ContainsKey("Source-Url"))
            {
                if (!Uri.IsWellFormedUriString(ManifestSpec["Source-Url"], UriKind.Absolute))
                {
                    throw new Exception("Source-Url is not valid");
                }
                SourceUrl = ManifestSpec["Source-Url"];
                SourceMD5 = ManifestSpec.ContainsKey("Source-Md5") ? ManifestSpec["Source-Md5"] : null;
            }
            else
            {
                if (ManifestPath == "url")
                {
                    throw new MissingFieldException("Source-Url is required in manifest to obtain cartridge via URL", "Source-Url");
                }
            }


            this.Endpoints = new List <Endpoint>();
            if (((Dictionary <object, object>)ManifestSpec).ContainsKey("Endpoints"))
            {
                if (ManifestSpec["Endpoints"] is List <object> )
                {
                    foreach (dynamic ep in ManifestSpec["Endpoints"])
                    {
                        this.Endpoints.Add(Endpoint.FromDescriptor(ep, this.ShortName.ToUpper()));
                    }
                }
            }

            this.isWebProxy = Categories.Contains("web_framework");
        }
예제 #3
0
 protected AbstractManifest(ManifestSpec manifestSpec)
 {
     this._manifestSpec = manifestSpec;
 }