コード例 #1
0
        /// <summary>
        /// ローカル情報に変換する
        /// </summary>
        /// <param name="manifest"></param>
        /// <returns></returns>
        private AddonInfomation ConvertToAddonInfo(V1::Manifest manifest)
        {
            var addon = new AddonInfomation();

            addon.Name.Value        = manifest.Name;
            addon.Author.Value      = manifest.Author;
            addon.Description.Value = manifest.Description;
            addon.Version.Value     = Version.Parse(manifest.Version);
            addon.Identifier.Value  = manifest.Identifier;
            addon.Permissions.AddRange(manifest.Permissions);
            addon.HostPermissions.AddRange(manifest.HostPermissions);
            addon.AutoUpdatePolicy = manifest.AutoUpdatePolicy;
            addon.Scripts          = manifest.Scripts;

            if (manifest.Icons.ContainsKey("32"))
            {
                addon.IconPathRelative.Value = manifest.Icons["32"];
            }
            else
            {
                addon.IconPathRelative.Value = manifest.Icons.Select(i => new KeyValuePair <int, string>(int.Parse(i.Key), i.Value)).OrderByDescending(i => i.Key).FirstOrDefault().Value;
            }

            addon.TargetAPIVersion.Value = Version.Parse(manifest.TargetAPIVersion);

            return(addon);
        }
コード例 #2
0
        /// <summary>
        /// マニフェストをチェックする
        /// </summary>
        /// <param name="manifest"></param>
        /// <returns></returns>
        private IAttemptResult CheckManifest(V1::Manifest manifest)
        {
            if (string.IsNullOrEmpty(manifest.Name))
            {
                return(new AttemptResult()
                {
                    Message = "アドオン名が空白です。"
                });
            }
            else if (string.IsNullOrEmpty(manifest.Author))
            {
                return(new AttemptResult()
                {
                    Message = "アドオン作者名が空白です。"
                });
            }
            else if (string.IsNullOrEmpty(manifest.Version))
            {
                return(new AttemptResult()
                {
                    Message = "アドオンバージョンが空白です。"
                });
            }
            else if (string.IsNullOrEmpty(manifest.ManifestVersion))
            {
                return(new AttemptResult()
                {
                    Message = "マニフェストバージョンが空白です。"
                });
            }

            if (manifest.ManifestVersion != "1.0")
            {
                return(new AttemptResult()
                {
                    Message = $"対応していないマニフェストバージョンです。({manifest.ManifestVersion})"
                });
            }

            bool result = Version.TryParse(manifest.Version, out Version _);

            if (!result)
            {
                return(new AttemptResult()
                {
                    Message = $"バージョンの形式が不正です。({manifest.Version})"
                });
            }

            bool aResult = Version.TryParse(manifest.TargetAPIVersion, out Version _);

            if (!aResult)
            {
                return(new AttemptResult()
                {
                    Message = $"APIバージョンの形式が不正です。({manifest.TargetAPIVersion})"
                });
            }

            foreach (string permission in manifest.Permissions)
            {
                if (!this.permissionsHandler.IsKnownPermission(permission))
                {
                    return(new AttemptResult()
                    {
                        Message = $"不明な権限です。({permission})"
                    });
                }
            }

            foreach (string host in manifest.HostPermissions)
            {
                if (!this.permissionsHandler.IsValidUrlPattern(host))
                {
                    return(new AttemptResult()
                    {
                        Message = $"不正なホストです。({host})"
                    });
                }
            }

            return(new AttemptResult()
            {
                IsSucceeded = true
            });
        }