using System; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using StardewModdingAPI.Web.Models; namespace StardewModdingAPI.Web.Controllers { /// Provides an API to perform mod update checks. [Produces("application/json")] [Route("api/check")] public class CheckController : Controller { /********* ** Public methods *********/ /// Fetch version metadata for the given mods. /// The mods for which to fetch update metadata. [HttpPost] public async Task Post([FromBody] NexusResponseModel[] mods) { using (var client = new HttpClient()) { // the return array of mods var modList = new List(); foreach (var mod in mods) { try { // create request with HttpRequestMessage var request = new HttpRequestMessage(HttpMethod.Get, new Uri($"http://www.nexusmods.com/stardewvalley/mods/{mod.ID}")); // add the Nexus Client useragent to get JSON response from the site request.Headers.UserAgent.ParseAdd("Nexus Client v0.63.15"); // send the request out var response = await client.SendAsync(request); // ensure the response is valid (throws exception) response.EnsureSuccessStatusCode(); // get the JSON string of the response var stringResponse = await response.Content.ReadAsStringAsync(); // create the mod data from the JSON string var modData = JsonConvert.DeserializeObject(stringResponse); // add to the list of mods modList.Add(modData.ModInfo()); } catch (Exception ex) { var modData = mod.ModInfo(); modData.Valid = false; modList.Add(modData); } } return JsonConvert.SerializeObject(modList, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); } } } }