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()); } }
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")); } }
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 })); } }
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()); } }
public async Task <string> GetDummyPreviewImage(string skinId, int version) { return((await SkinTester.GenerateOrFetchDummyPreview(skinId, version)).Urls[0]); }