예제 #1
0
        public async Task Lookup(string skinId)
        {
            var skin = DbContext.Skins.Include(x => x.Creator.FRUser).FirstOrDefault(x => x.GeneratedId == skinId);

            if (skin == null)
            {
                if (skinId.All(char.IsDigit))
                {
                    try
                    {
                        var intSkinId      = int.Parse(skinId);
                        var realItemSearch = DbContext.FRItems.FirstOrDefault(x => x.FRId == intSkinId && x.ItemCategory == FRItemCategory.Skins);
                        if (realItemSearch != null)
                        {
                            await ReplyAsync(embed : ErrorEmbed($"Skin not found, however there is a Flight Rising skin with that ID: `{realItemSearch.Name}`.\nIf you meant to search for a real skin please use the following command instead: `{await SettingManager.GetSettingValue("GUILDCONFIG_PREFIX", Context.Guild)}lookup skin {realItemSearch.FRId}`").Build());

                            return;
                        }
                    }
                    catch { }
                }

                await ReplyAsync(embed : ErrorEmbed("Skin not found.").Build());
            }
            else
            {
                var previewUrl = (await SkinTester.GenerateOrFetchDummyPreview(skin.GeneratedId, skin.Version)).Urls[0];

                var embed = new EmbedBuilder();
                embed.WithTitle(skin.Title ?? "_No title_");
                embed.WithImageUrl($"{CDNBasePath}{previewUrl}");
                embed.WithDescription(skin.Description ?? "_No description_");
                embed.WithAuthor(new EmbedAuthorBuilder()
                                 .WithName(skin.Creator?.UserName ?? "Anonymous")
                                 .WithUrl(skin.Creator != null ? $"{WebsiteBaseUrl}/profile/{skin.Creator.UserName}" : null));
                embed.WithFooter(new EmbedFooterBuilder().WithText($"Version {skin.Version}"));
                embed.WithUrl($"{WebsiteBaseUrl}/skintester/preview/{skinId}");

                await ReplyAsync(embed : embed.Build());
            }
        }
예제 #2
0
        public async Task <ActionResult> Preview(PreviewModelGet model)
        {
            var skin = DataContext.Skins.Include(x => x.Creator.FRUser).FirstOrDefault(x => x.GeneratedId == model.SkinId);

            if (skin == null)
            {
                AddErrorNotification("Skin not found");
                return(RedirectToRoute("Home"));
            }
            if (skin.Coverage == null)
            {
                await UpdateCoverage(skin, DataContext);
            }
            try
            {
                var isOwn = Request.IsAuthenticated && skin.Creator?.Id == HttpContext.GetOwinContext().Authentication.User.Identity.GetUserId <int>();
                if (isOwn && skin.Visibility == SkinVisiblity.HideEverywhere)
                {
                    AddInfoNotification("Notice: You have set this skin to be hidden everywhere, only people who you share the link to this skin with can see this skin.");
                }

                return(View(new PreviewModelViewModel
                {
                    Title = skin.Title,
                    Description = skin.Description,
                    SkinId = model.SkinId,
                    PreviewUrl = (await SkinTester.GenerateOrFetchDummyPreview(skin.GeneratedId, skin.Version)).Urls[0],
                    Coverage = skin.Coverage,
                    Creator = skin.Creator,
                    DragonType = (DragonType)skin.DragonType,
                    Gender = (Gender)skin.GenderType,
                    Visibility = skin.Visibility,
                    Version = skin.Version
                }));
            }
            catch (FileNotFoundException)
            {
                AddErrorNotification("Skin not found");
                return(RedirectToRoute("Home"));
            }
        }
예제 #3
0
        public async Task <ActionResult> Manage(ManageModelGet model)
        {
            var skin = DataContext.Skins.Include(x => x.Previews).FirstOrDefault(x => x.GeneratedId == model.SkinId && x.SecretKey == model.SecretKey);

            if (skin == null)
            {
                AddErrorNotification("Skin not found or secret invalid");
                return(RedirectToRoute("Home"));
            }
            else
            {
                if (skin.Creator != null)
                {
                    if (!Request.IsAuthenticated)
                    {
                        AddErrorNotification("This skin is linked to an acocunt, please log in to manage this skin.");
                        return(RedirectToRoute("Home"));
                    }
                    else if (skin.Creator.Id != HttpContext.GetOwinContext().Authentication.User.Identity.GetUserId <int>())
                    {
                        AddErrorNotification("This skin is linked to a different account than the one that is logged in, you can only manage your own skins.");
                        return(RedirectToRoute("Home"));
                    }
                }

                if (skin.Coverage == null)
                {
                    await UpdateCoverage(skin, DataContext);
                }
                return(View(new ManageModelViewModel
                {
                    Skin = skin,
                    PreviewImageUrl = (await SkinTester.GenerateOrFetchDummyPreview(skin.GeneratedId, skin.Version)).Urls[0],
                    PreviewUrl = Url.RouteUrl("Preview", new { SkinId = skin.GeneratedId }, "https"),
                    ShareUrl = skin.ShareUrl
                }));
            }
        }
예제 #4
0
        public async Task <ActionResult> Upload(UploadModelPost model)
        {
            var azureImageService = new AzureImageService();

            var    randomizedId = CodeHelpers.GenerateId(5, DataContext.Skins.Select(x => x.GeneratedId).ToList());
            var    secretKey    = CodeHelpers.GenerateId(7);
            Bitmap skinImage    = null;

            try
            {
                skinImage = (Bitmap)Image.FromStream(model.Skin.InputStream);
                if (skinImage.Width != 350 || skinImage.Height != 350)
                {
                    AddErrorNotification("Image needs to be 350px x 350px. Just like FR.");
                    return(View());
                }
            }
            catch
            {
                AddErrorNotification("Upload is not a valid png image");
                return(View());
            }
            try
            {
                var fixPixelFormat = SkinTester.FixPixelFormat(skinImage);
                if (fixPixelFormat != null)
                {
                    skinImage = fixPixelFormat;
                }

                model.Skin.InputStream.Position = 0;
                var url = await azureImageService.WriteImage($@"skins\{randomizedId}.png", model.Skin.InputStream);

                Bitmap dragonImage = null;
                using (var client = new WebClient())
                {
                    var dwagonImageBytes = client.DownloadDataTaskAsync(string.Format(FRHelpers.DressingRoomDummyUrl, (int)model.DragonType, (int)model.Gender));
                    try
                    {
                        using (var memStream = new MemoryStream(await dwagonImageBytes, false))
                            dragonImage = (Bitmap)Image.FromStream(memStream);
                    }
                    catch
                    {
                    }
                }

                var skin = new Skin
                {
                    GeneratedId = randomizedId,
                    SecretKey   = secretKey,
                    Title       = model.Title,
                    Description = model.Description,
                    DragonType  = (int)model.DragonType,
                    GenderType  = (int)model.Gender,
                    Coverage    = GetCoveragePercentage(skinImage, dragonImage)
                };
                skinImage.Dispose();

                if (Request.IsAuthenticated)
                {
                    var userId = HttpContext.GetOwinContext().Authentication.User.Identity.GetUserId <int>();
                    skin.Creator    = DataContext.Users.FirstOrDefault(x => x.Id == userId);
                    skin.Visibility = skin.Creator.ProfileSettings.DefaultSkinsArePublic ? skin.Creator.ProfileSettings.DefaultShowSkinsInBrowse ? SkinVisiblity.Visible : SkinVisiblity.HideFromBrowse : SkinVisiblity.HideEverywhere;
                }

                DataContext.Skins.Add(skin);
                await DataContext.SaveChangesAsync();

                return(View("UploadResult", new UploadModelPostViewModel
                {
                    SkinId = randomizedId,
                    SecretKey = secretKey,
                    PreviewImageUrl = (await SkinTester.GenerateOrFetchDummyPreview(randomizedId, skin.Version)).Urls[0]
                }));
            }
            catch
            {
                AddErrorNotification("Something went wrong uploading");
                return(View());
            }
        }
예제 #5
0
 public async Task <string> GetDummyPreviewImage(string skinId, int version)
 {
     return((await SkinTester.GenerateOrFetchDummyPreview(skinId, version)).Urls[0]);
 }