public async Task SendTelemetry([Microsoft.AspNetCore.Mvc.FromBody] TelemetrySendViewModel model) // Activity ID { if (!Program.UseShSend || !ModelState.IsValid) { return; } var imageUrl = ""; var telemetrySendModel = model; var blobStorage = new BlobManager(_configuration["StorageConnectionString"]); if (telemetrySendModel.Image.Length > 0) { var imageData = Convert.FromBase64String(FixBase64(telemetrySendModel.Image)); imageUrl = blobStorage.UploadByteBlob( blobStorage.GetContainerReference(_configuration["BlobContainerName"]), $"{telemetrySendModel.IdActivity}/{telemetrySendModel.IdUser}/{DateTime.Now}_{new Random().Next(0, 20)}.png", "image/png", imageData ).GetAwaiter().GetResult(); } _telemetryRepository.Insert(new Telemetry() { // Id = 0, Longitude = telemetrySendModel.Longitude, Latitude = telemetrySendModel.Latitude, IdActivity = telemetrySendModel.IdActivity, IdUser = telemetrySendModel.IdUser, ImageUrl = imageUrl, Instant = telemetrySendModel.Instant }); }
public async Task <object> Create([FromRoute] int id, [FromBody] TelemetrySendViewModel model) { var activityId = id; if (!ModelState.IsValid) { return(new { error = "Bad request." }); } var user = await _userManager.GetUserAsync(HttpContext.User); var userData = _userRepository.GetUserByIdentity(user.Id); var userId = userData.Id; model.IdUser = userId; model.IdActivity = activityId; // This should be changed in real code to prevent extra queries var activityInfo = _activityRepository.Get(model.IdActivity); var runnerAdded = (activityInfo.Type == 1 || _activityRepository.IsRunnerAdded(model.IdActivity, userData.Id)); if (userData.IsOrganizer || activityInfo.Status != 1 || !runnerAdded) // Not allowed or closed { return(new { error = "Unauthorized." }); } // Known format of URL if (activityInfo.RaceUrl.Length > 0) { var newId = 0; int.TryParse(activityInfo.RaceUrl.Substring(activityInfo.RaceUrl.LastIndexOf("/") + 1), out newId); model.IdActivityOrganizer = newId; } await _eventHub.SendMessage(new QueueElement <TelemetrySendViewModel> { Type = "TelemetrySend", Data = model, }); return(new { coords = new { latitude = model.Latitude, longitude = model.Longitude, }, imageUrl = model.Image, }); }