Candy.Server.Controllers.Api.ApplicationController.Latest C# (CSharp) Method

Latest() private method

private Latest ( string app, System.Version @for, [ Name = "user")]stringuser ) : IHttpActionResult
app string
@for System.Version
Name [
return IHttpActionResult
        public IHttpActionResult Latest(string app, Version @for, [FromUri(Name = "user")] string user)
        {
            var appName = app;
            var currentVersion = @for;

            // user は適用可能なバージョンを絞るために使用するが、ベータ版を一般公開しないなどが目的のため認証まではしない(詐称を許可)

            // トラバーサル防止
            if (appName.Contains(Path.DirectorySeparatorChar) ||
                appName.Contains(Path.AltDirectorySeparatorChar))
            {
                return NotFound();
            }

            var appDir = Path.Combine(PhysicalPackageRoot, appName);
            var jsonPath = Path.Combine(appDir, UpdateDefinitionFileName);

            if (!File.Exists(jsonPath))
            {
                // 更新が存在しない間は null を返す(application.json に掲載したアプリでも、更新が用意されるまでは update.json を用意しなくていいようにするため)
                return Json((object)null);
            }

            var json = File.ReadAllText(jsonPath);
            var updateInfo = JsonConvert.DeserializeObject<UpdateInfo>(json);

            var summaries = updateInfo.UpdateSummaries;

            // 適用可能な最新バージョンを取得
            var latest = summaries.Where(x => x.AllowedUserIds.Contains("Any") || x.AllowedUserIds.Contains(user))
                                  .Where(x => x.SupportedVersion <= currentVersion && currentVersion < x.Version)
                                  .OrderByDescending(x => x.Version)
                                  .FirstOrDefault();

            if (latest != null)
            {
                latest.PackagePath = PackageRoot + appName + "/update/" + latest.PackagePath;
            }

            return Json(latest, JsonConvert.DefaultSettings());
        }
ApplicationController