From 2c87961c9e47aeba6eb7dbfca234cc457cb02158 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 25 Sep 2017 21:21:27 -0400 Subject: improve mod update-check validation & errors (#336) --- .../Framework/ModRepositories/GitHubRepository.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/StardewModdingAPI.Web/Framework/ModRepositories/GitHubRepository.cs') diff --git a/src/StardewModdingAPI.Web/Framework/ModRepositories/GitHubRepository.cs b/src/StardewModdingAPI.Web/Framework/ModRepositories/GitHubRepository.cs index 7dfe9f62..174fb79a 100644 --- a/src/StardewModdingAPI.Web/Framework/ModRepositories/GitHubRepository.cs +++ b/src/StardewModdingAPI.Web/Framework/ModRepositories/GitHubRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Net; using System.Threading.Tasks; using Newtonsoft.Json; using Pathoschild.Http.Client; @@ -46,6 +47,11 @@ namespace StardewModdingAPI.Web.Framework.ModRepositories /// The mod ID in this repository. public override async Task GetModInfoAsync(string id) { + // validate ID format + if (!id.Contains("/") || id.IndexOf("/", StringComparison.InvariantCultureIgnoreCase) != id.LastIndexOf("/", StringComparison.InvariantCultureIgnoreCase)) + return new ModInfoModel($"The value '{id}' isn't a valid GitHub mod ID, must be a username and project name like 'Pathoschild/LookupAnything'."); + + // fetch info try { GitRelease release = await this.Client @@ -53,6 +59,10 @@ namespace StardewModdingAPI.Web.Framework.ModRepositories .As(); return new ModInfoModel(id, this.NormaliseVersion(release.Tag), $"https://github.com/{id}/releases"); } + catch (ApiException ex) when (ex.Status == HttpStatusCode.NotFound) + { + return new ModInfoModel("Found no mod with this ID."); + } catch (Exception ex) { return new ModInfoModel(ex.ToString()); -- cgit