@using Radzen @using System.ComponentModel.DataAnnotations @using System.IO.Pipelines @using System.Net.Mime @using System.Reflection @using System.Runtime.CompilerServices @using ImageBoardServerApp.Auth @using ImageBoardServerApp.Data @using ImageBoardServerApp.Data.Repository @inject NavigationManager NavigationManager @inject IWebHostEnvironment env @inject AuthenticationStateProvider authStateProvider
[ @toggleText ]
@if (opened) {
Post to /@board.Tag/ - @board.Topic
@if (hasErr) { @postErr }
} @code { private bool opened = false; private string toggleText = "Open Post Formula"; private void ToggleOpened() { opened = !opened; toggleText = opened ? "Close Post Formula" : "Open Post Formula"; } [Parameter] [Required] public BoardData board { get; set; } = new BoardData(); string postUsername { get; set; } = "Anonymous"; string postTitle { get; set; } = ""; string postContent { get; set; } = ""; private IBrowserFile selectedFile; private async Task SingleUpload(InputFileChangeEventArgs e) { selectedFile = e.GetMultipleFiles()[0]; this.StateHasChanged(); } string postErr { get; set; } bool hasErr { get; set; } = false; private async Task onPostClick() { var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider; var user = await cauthStateProvder.GetAuthenticationStateAsync(); var usr = user.User; UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name); if (foundusr == null) { hasErr = true; postErr = "You are not logged in."; return; } int userID = foundusr.UserID; if (DateTimeOffset.Now.ToUnixTimeMilliseconds() - foundusr.TimeBanned < 0) { foundusr.TimeBanned = -1; } if (foundusr.TimeBanned != -1) { hasErr = true; postErr = "You are banned and may not post."; //Maybe redirect to /banned? return; } foundusr.lastActionTimeStamp = DateTimeOffset.Now.ToUnixTimeMilliseconds(); await UsersRepository.updateUserAsync(foundusr); //TODO Add check if data is image if (selectedFile == null || selectedFile.Size >= 512000 * 4) { hasErr = true; postErr = "You did not attach a file or the selected file is bigger then the 2MiB file limit."; return; } Stream stream = selectedFile.OpenReadStream(maxAllowedSize: 512000 * 4); // max 2MB var file = Path.GetRandomFileName() + "." + selectedFile.Name.Split(".")[selectedFile.Name.Split(".").Length - 1]; var path = $"{env.WebRootPath}/img/dynamic/op/{@board.Tag}/{@file}"; FileStream fs = File.Create(path); await stream.CopyToAsync(fs); stream.Close(); fs.Close(); var imageToUpload = new ImageData { Board = board.Tag, ImageLocation = $"/img/dynamic/op/{@board.Tag}/{@file}" }; int imageID = await ImagesRepository.createImageAsync(imageToUpload); var postToPost = new PostData { UserID = userID, ImageID = imageID, Username = postUsername, Title = postTitle, Content = postContent, Interactions = 0, CreatedAt = DateTimeOffset.Now.ToUnixTimeMilliseconds(), Board = board.Tag, IsLocked = false, IsSticky = false }; int postId = await PostsRepository.createPostAsync(postToPost); if (postId != -1) { //Open post successfull NavigationManager.NavigateTo($"/{board.Tag}/thread/{postId}", true, true); await TheManager.bumpThreads(board); Console.WriteLine("Post created"); } else { //Open post unsucessfull hasErr = true; postErr = "There was an error and the post could not be created. Please notify the admin."; Console.WriteLine("Shit sucks and did not work."); } } }