public void GetLiveriesData() { string range = ranges["liveries"]; SpreadsheetsResource.ValuesResource.GetRequest request = SheetService.Spreadsheets.Values.Get(spreadsheetId, range); //loops through all the data got from the sheet ValueRange response = request.Execute(); IList <IList <System.Object> > values = response.Values; if (values != null && values.Count > 01) { foreach (var row in values) { if ((string)row[1] == "") { break; } else { if ((string)row[4] != "Complete") { continue; } //Debug.Log("Creating the livery by " + (string)row[2] + " for " + (string)row[0]); Livery a = new Livery((string)row[2], (string)row[3], (string)row[0], (string)row[12], (string)row[11]); //Debug.Log(a.Airline); Airlines[(string)row[0]].liveries.Add(a); } } } }
public LiveryDTO(Livery livery) { this.Id = livery.Id; this.SeriesId = livery.SeriesId; this.LiveryType = livery.LiveryType; this.ITeamId = livery.ITeamId; this.ITeamName = livery.ITeamName; this.IsCustomNumber = livery.IsCustomNumber; this.IsRejected = livery.IsRejected; this.LastUpdated = string.Format("{0:yyyy-MM-ddTHH:mm:ssZ}", livery.LastUpdated); if (livery.Car != null) { CarName = livery.Car.Name; } if (livery.User != null) { UserId = livery.User.Id; FirstName = livery.User.FirstName; LastName = livery.User.LastName; } if (livery.IsRejected && livery.Rejections != null) { this.RejectionStatus = livery.Rejections.First(l => l.Status != RejectionStatus.Resolved).Status; } }
public async Task UploadPreview(Livery livery, Stream jpeg) { var watch = new Stopwatch(); _logger.Log(LogLevel.Debug, "Beginning upload process to S3"); watch.Start(); var jpgRequest = GetPutRequestForUpload(GetFileName(livery, "jpeg"), jpeg); _logger.Log(LogLevel.Debug, $"Elapsed Time after generating put requests to S3: {watch.ElapsedMilliseconds}"); try { _logger.Log(LogLevel.Debug, "Beginning jpg upload to S3"); var result = await _s3Client.PutObjectAsync(jpgRequest); _logger.Log(LogLevel.Debug, $"Elapsed Time after jpg upload to S3: {watch.ElapsedMilliseconds}"); } catch (AmazonS3Exception s3Ex) { Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object" , s3Ex.Message); throw; } watch.Stop(); _logger.Log(LogLevel.Debug, $"Total Elapsed S3 time: {watch.ElapsedMilliseconds}"); }
public async Task DeleteLivery(Livery livery) { try { if (livery.LiveryType != LiveryType.SpecMap) { var tgaRequest = GetDeleteObjectRequest(GetFileName(livery, "tga")); var tgaResult = await _s3Client.DeleteObjectAsync(tgaRequest); var jpegRequest = GetDeleteObjectRequest(GetFileName(livery, "jpeg")); var jpegResult = await _s3Client.DeleteObjectAsync(jpegRequest); } else { var mipRequest = GetDeleteObjectRequest(GetFileName(livery, "mip")); var mipResult = await _s3Client.DeleteObjectAsync(mipRequest); } } catch (AmazonS3Exception s3Ex) { Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object" , s3Ex.Message); throw; } }
public string GetPresignedPutUrlForLivery(Livery livery) { if (livery.LiveryType == LiveryType.SpecMap) { return(GetPresignedPutRequest(GetFileName(livery, "mip"))); } return(GetPresignedPutRequest(GetFileName(livery, "tga"))); }
public string GetPreview(Livery livery) { if (livery.LiveryType == LiveryType.SpecMap) { return(""); } return(GetPresignedGetRequest(GetFileName(livery, "jpeg"))); }
public async Task <Stream> GetTgaStreamFromLivery(Livery livery) { try { return(await GetTgaStream(GetFileName(livery, "tga"))); } catch (Exception ex) { _logger.LogError("Issue reading tga from s3"); return(null); } }
public static async Task <HttpStatusCode> DeleteLivery(Livery liv) { var client = new RestClient(baseUri + "liveries/" + liv.Id); var request = new RestRequest(Method.DELETE); request.AddHeader("Authorization", jwt); var response = await client.ExecuteAsync(request); return(response.StatusCode); }
public async Task SendRejectionEmail(Livery livery) { var htmlTemplateObj = Handlebars.Compile(EmailTemplates.paintUpdateHTMLTemplate); var textTemplateObj = Handlebars.Compile(EmailTemplates.paintUpdateTextTemplate); var data = new { seriesName = livery.Series.Name, name = livery.User.FirstName + ' ' + livery.User.LastName, image = "reject", actionTitle = "Rejected", actionBody = "rejected" }; var htmlBody = htmlTemplateObj(data); var textBody = textTemplateObj(data); SendEmail(livery.User.Email, "RaceSpot.Media Paint Rejection", htmlBody, textBody); }
private string GetFileName(Livery livery, string fileType) { string id = livery.IsTeam() ? livery.ITeamId : livery.User.IracingId; string itemPath; string carNumPath = livery.Series.IsLeague && livery.IsCustomNumber ? "_num" : ""; string teamPath = livery.IsTeam() ? "_team" : ""; switch (livery.LiveryType) { case LiveryType.Helmet: itemPath = "helmet"; break; case LiveryType.Suit: itemPath = "suit"; break; case LiveryType.SpecMap: itemPath = "car_spec"; break; case LiveryType.Car: default: itemPath = $"car{carNumPath}"; break; } if (livery.LiveryType == LiveryType.Car || livery.LiveryType == LiveryType.SpecMap) { return($"{livery.SeriesId}/{livery.Car.Path}/{itemPath}{teamPath}_{id}.{fileType}"); } else { return($"{livery.SeriesId}/{itemPath}{teamPath}_{id}.{fileType}"); } }
public LiveryDTO(Livery livery, string PreviewUrl) : this(livery) { this.PreviewUrl = PreviewUrl; }
/// <summary> /// Download a livery from the server into the accPath /// Function shall only be called if livery is not already existin in the accPath. /// </summary> /// <param name="accPath">path to acc livery folder</param> /// <param name="liv">livery object (holds name/id of livery)</param> /// <param name="fileWhitelist">whitelist, security measurement to only download allowed files</param> /// <returns></returns> public static async Task <bool> DownloadLivery(string accPath, Livery liv, string[] fileWhitelist = null) { var client = new RestClient(baseUri + "liveries/" + liv.Id); var request = new RestRequest(); request.AddHeader("Authorization", jwt); var response = await client.ExecuteGetAsync(request); if (response.StatusCode == HttpStatusCode.OK) { var path = Path.GetTempPath() + "/AccLiveryManager/"; var zipPath = path + "/" + liv.Name + ".zip"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } if (File.Exists(zipPath)) { // in case the previous download was aborted File.Delete(zipPath); } var fileBytes = response.RawBytes; File.WriteAllBytes(zipPath, fileBytes); if (fileWhitelist == null || fileWhitelist.Length == 0) { ZipFile.ExtractToDirectory(zipPath, accPath + "/" + liv.Name); } else { // extract into tmp directory and only copy valid files if (Directory.Exists(path + liv.Name)) { Directory.Delete(path + liv.Name, true); } Directory.CreateDirectory(path + liv.Name); ZipFile.ExtractToDirectory(zipPath, path + "/" + liv.Name); // create new livery directory Directory.CreateDirectory(accPath + "/" + liv.Name); var files = Hash.GetFileinDirWhitelist(path + liv.Name, fileWhitelist); foreach (var file in files) { File.Copy(file, accPath + "/" + liv.Name + "/" + Path.GetFileName(file)); } // cleanup Directory.Delete(path + liv.Name, true); } // keep the tmp folder clean File.Delete(zipPath); return(true); } else { return(false); } }
public async Task <IActionResult> Post([FromRoute] Guid seriesId, [FromBody] LiveryDTO dto) { var user = await _context.Users.FirstOrDefaultAsync(u => u.UserName == User.Identity.Name); if (user == null) { return(Unauthorized()); } else if (String.IsNullOrEmpty(user.IracingId)) { return(Forbid("User has not verified iRacing account yet")); } if (!dto.CarId.HasValue && (dto.LiveryType == LiveryType.Car || dto.LiveryType == LiveryType.SpecMap)) { return(BadRequest("Car livery must have carId in request")); } var series = await _context.Series.FirstOrDefaultAsync(s => s.Id == seriesId); if (series == null) { return(NotFound($"Could not find series with id {seriesId}")); } if (series.IsTeam && (String.IsNullOrEmpty(dto.ITeamId) && dto.LiveryType != LiveryType.Helmet)) { return(BadRequest("Series is a team series but no Team ID was provided")); } if (!series.IsTeam && !String.IsNullOrEmpty(dto.ITeamId)) { return(BadRequest("Series is not a team series but Team ID was provided")); } if (!series.IsLeague && dto.IsCustomNumber) { return(BadRequest("Custom Number paints are only permitted for league events")); } Livery livery; if (String.IsNullOrEmpty(dto.ITeamId)) { livery = _context.Liveries.Include(l => l.Car) .Include(l => l.Series) .FirstOrDefault(l => l.SeriesId == seriesId && l.UserId == user.Id && l.LiveryType == dto.LiveryType && String.IsNullOrEmpty(l.ITeamId)); } else { livery = _context.Liveries.Include(l => l.Car) .Include(l => l.Series) .FirstOrDefault(l => l.SeriesId == seriesId && l.ITeamId == dto.ITeamId && l.LiveryType == dto.LiveryType); } if (livery == null) { var teamName = ""; if (!String.IsNullOrEmpty(dto.ITeamId)) { try { var iTeam = await _iracingService.LookupIracingTeamById(dto.ITeamId, false); if (iTeam.TeamOwnerId != user.IracingId) { return(BadRequest("User is not owner of iRacing Team. Please ask Team Owner to upload livery")); } teamName = iTeam.TeamName; } catch (Exception ex) { return(StatusCode(StatusCodes.Status500InternalServerError, "Unable to verify user owns team. Please contact Support for assistance.")); } } livery = new Livery() { SeriesId = seriesId, Series = series, ITeamId = dto.ITeamId, ITeamName = teamName, LiveryType = dto.LiveryType, User = user, UserId = user.Id, Status = UploadStatus.WAITING, IsCustomNumber = dto.IsCustomNumber, IsRejected = false, LastUpdated = DateTime.UtcNow, }; if (dto.CarId.HasValue) { var car = await _context.Cars.Include(c => c.SeriesCars).FirstOrDefaultAsync(c => c.Id == dto.CarId.Value); if (car == null) { return(NotFound($"Could not find car with id {dto.CarId}")); } if (car.SeriesCars.Count(s => s.SeriesId == seriesId) == 0) { return(BadRequest("Car is not in series")); } livery.CarId = dto.CarId.Value; livery.Car = car; } _context.Liveries.Add(livery); _context.SaveChanges(); } else { if (!String.IsNullOrEmpty(dto.ITeamId) && livery.UserId != user.Id) { return(BadRequest("You are not the original uploader of the livery")); } if (dto.CarId.HasValue && dto.CarId.Value != livery.CarId) { var car = await _context.Cars.Include(c => c.SeriesCars).FirstOrDefaultAsync(c => c.Id == dto.CarId.Value); if (car == null) { return(NotFound($"Could not find car with id {dto.CarId}")); } if (car.SeriesCars.Count(s => s.SeriesId == seriesId) == 0) { return(BadRequest("Car is not in series")); } var specMap = _context.Liveries.FirstOrDefault(l => l.LiveryType == LiveryType.SpecMap && l.SeriesId == seriesId && l.ITeamId == livery.ITeamId); if (specMap != null) { _context.Liveries.Remove(specMap); } livery.CarId = dto.CarId.Value; livery.Car = car; } if (dto.LiveryType == LiveryType.Car) { livery.IsCustomNumber = dto.IsCustomNumber; } if (livery.IsRejected) { var rejection = _context.Rejections .FirstOrDefault(r => r.LiveryId == livery.Id && r.Status != RejectionStatus.Resolved); if (rejection == null) { return(StatusCode(StatusCodes.Status500InternalServerError, "Error while resetting rejected status on livery - please contact Support!")); } rejection.Status = RejectionStatus.Updated; } livery.Status = UploadStatus.WAITING; _context.SaveChanges(); } var returnDto = new LiveryDTO(livery); returnDto.UploadUrl = _s3Service.GetPresignedPutUrlForLivery(livery); return(Ok(returnDto)); }