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);
                }
            }
        }
    }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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}");
        }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
 public string GetPresignedPutUrlForLivery(Livery livery)
 {
     if (livery.LiveryType == LiveryType.SpecMap)
     {
         return(GetPresignedPutRequest(GetFileName(livery, "mip")));
     }
     return(GetPresignedPutRequest(GetFileName(livery, "tga")));
 }
Beispiel #6
0
 public string GetPreview(Livery livery)
 {
     if (livery.LiveryType == LiveryType.SpecMap)
     {
         return("");
     }
     return(GetPresignedGetRequest(GetFileName(livery, "jpeg")));
 }
Beispiel #7
0
 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);
     }
 }
Beispiel #8
0
        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);
        }
Beispiel #10
0
        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}");
            }
        }
Beispiel #11
0
 public LiveryDTO(Livery livery, string PreviewUrl) : this(livery)
 {
     this.PreviewUrl = PreviewUrl;
 }
Beispiel #12
0
        /// <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);
            }
        }
Beispiel #13
0
        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));
        }