2023-01-18 12:56:24 +00:00
|
|
|
@using Radzen
|
|
|
|
@using System.ComponentModel.DataAnnotations
|
|
|
|
@using System.IO.Pipelines
|
|
|
|
@using System.Net.Mime
|
|
|
|
@using System.Reflection
|
|
|
|
@using System.Runtime.CompilerServices
|
|
|
|
@using ImageBoardServerApp.Data
|
|
|
|
@using ImageBoardServerApp.Data.Repository
|
|
|
|
|
|
|
|
@inject NavigationManager NavigationManager
|
2023-01-27 22:50:12 +00:00
|
|
|
@inject IWebHostEnvironment env
|
2023-01-18 12:56:24 +00:00
|
|
|
|
|
|
|
<div>
|
|
|
|
<span>[</span>
|
|
|
|
<a class="toggleOpened" onclick="@ToggleOpened">@toggleText</a>
|
|
|
|
<span>]</span>
|
|
|
|
</div>
|
|
|
|
@if (opened)
|
|
|
|
{
|
|
|
|
<div class="pd centered">
|
|
|
|
<span>Post to /@board.Tag/ - @board.Topic</span>
|
|
|
|
|
2023-01-27 21:09:16 +00:00
|
|
|
<div class="centered formContent">
|
|
|
|
<div>
|
|
|
|
<div class="pd centered marg">
|
|
|
|
<RadzenTextBox Placeholder="Username (Anonymous)" MaxLength="15" Change=@(args => OnChange(args, "username")) Class="w-100"/>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="pd centered marg">
|
|
|
|
<RadzenTextBox Placeholder="Title" MaxLength="20" Change=@(args => OnChange(args, "title")) Class="w-100"/>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="pd centered marg">
|
|
|
|
<RadzenTextArea Placeholder="Content..." @bind-Value="@postContent" Cols="30" Rows="6" Change=@(args => OnChange(args, "Content")) Class="w-100"/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2023-01-18 12:56:24 +00:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="pd centered marg">
|
2023-01-27 21:09:16 +00:00
|
|
|
<FormInfo/>
|
2023-02-01 13:18:36 +00:00
|
|
|
<InputFile OnChange="@SingleUpload" type="file" accept="image/*"/>
|
2023-01-18 12:56:24 +00:00
|
|
|
<RadzenButton class="pd" Click="@onPostClick" Text="Post!"></RadzenButton>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@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 = "Anonymous";
|
|
|
|
string postTitle = "";
|
|
|
|
string postContent = "";
|
|
|
|
|
|
|
|
void OnChange(string value, string name)
|
|
|
|
{
|
|
|
|
switch (name)
|
|
|
|
{
|
|
|
|
case "title":
|
|
|
|
postTitle = value;
|
|
|
|
break;
|
|
|
|
case "username":
|
|
|
|
postUsername = value;
|
|
|
|
break;
|
|
|
|
case "content":
|
|
|
|
postContent = value;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
Console.WriteLine("not found.");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
Console.WriteLine($"Smth changed!: {value}");
|
|
|
|
}
|
|
|
|
|
2023-01-27 22:50:12 +00:00
|
|
|
private IBrowserFile selectedFile;
|
|
|
|
|
|
|
|
|
2023-01-18 12:56:24 +00:00
|
|
|
private async Task SingleUpload(InputFileChangeEventArgs e)
|
|
|
|
{
|
2023-01-27 22:50:12 +00:00
|
|
|
selectedFile = e.GetMultipleFiles()[0];
|
|
|
|
this.StateHasChanged();
|
2023-01-18 12:56:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private async Task onPostClick()
|
|
|
|
{
|
|
|
|
var userToCreate = new UserData
|
|
|
|
{
|
2023-02-01 20:49:02 +00:00
|
|
|
Email = "test@mail.org",
|
|
|
|
Password = "$2a$10$C/ZPY5aVGkImLGyIP0SySuQaEYIwnY0J99i/m6tqqf6tMkax89Eku",
|
|
|
|
PermissionInteger = 100,
|
|
|
|
TimeBanned = -1,
|
2023-01-18 12:56:24 +00:00
|
|
|
lastActionTimeStamp = DateTime.Now.Millisecond
|
|
|
|
};
|
2023-02-01 20:49:02 +00:00
|
|
|
|
2023-01-27 21:09:16 +00:00
|
|
|
int userID;
|
2023-02-01 20:49:02 +00:00
|
|
|
UserData foundusr = await UsersRepository.getUserByEmailAsync(userToCreate.Email);
|
2023-01-27 21:09:16 +00:00
|
|
|
if (foundusr == null)
|
|
|
|
{
|
|
|
|
userID = await UsersRepository.createUserAsync(userToCreate);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
userID = foundusr.UserID;
|
2023-02-01 20:49:02 +00:00
|
|
|
if(foundusr.TimeBanned != -1)
|
2023-01-27 21:09:16 +00:00
|
|
|
return;
|
2023-02-01 20:49:02 +00:00
|
|
|
foundusr.lastActionTimeStamp = DateTimeOffset.UnixEpoch.ToUnixTimeMilliseconds();
|
2023-01-27 21:09:16 +00:00
|
|
|
await UsersRepository.updateUserAsync(foundusr);
|
|
|
|
}
|
2023-01-18 12:56:24 +00:00
|
|
|
|
|
|
|
//TODO Add check if data is image
|
2023-01-27 22:50:12 +00:00
|
|
|
|
|
|
|
if (selectedFile == null)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
Stream stream = selectedFile.OpenReadStream(maxAllowedSize: 512000 * 4); // max 2MB
|
2023-02-01 13:18:36 +00:00
|
|
|
var file = Path.GetRandomFileName() + "." + selectedFile.Name.Split(".")[selectedFile.Name.Split(".").Length - 1];
|
|
|
|
var path = $"{env.WebRootPath}\\img\\dynamic\\op\\{board.Tag}\\{file}";
|
2023-01-27 22:50:12 +00:00
|
|
|
FileStream fs = File.Create(path);
|
|
|
|
await stream.CopyToAsync(fs);
|
|
|
|
stream.Close();
|
|
|
|
fs.Close();
|
|
|
|
|
2023-01-18 12:56:24 +00:00
|
|
|
var imageToUpload = new ImageData
|
|
|
|
{
|
|
|
|
Board = board.Tag,
|
2023-02-01 13:18:36 +00:00
|
|
|
ImageLocation = $"\\img\\dynamic\\op\\{board.Tag}\\{file}"
|
2023-01-18 12:56:24 +00:00
|
|
|
};
|
|
|
|
int imageID = await ImagesRepository.createImageAsync(imageToUpload);
|
|
|
|
var postToPost = new PostData
|
|
|
|
{
|
|
|
|
UserID = userID,
|
|
|
|
ImageID = imageID,
|
|
|
|
Username = postUsername,
|
|
|
|
Title = postTitle,
|
|
|
|
Content = postContent,
|
2023-01-25 16:26:21 +00:00
|
|
|
Interactions = 0,
|
2023-01-18 12:56:24 +00:00
|
|
|
CreatedAt = DateTimeOffset.Now.ToUnixTimeMilliseconds(),
|
|
|
|
Board = board.Tag
|
|
|
|
};
|
|
|
|
int postId = await PostsRepository.createPostAsync(postToPost);
|
|
|
|
if (postId != -1)
|
|
|
|
{
|
|
|
|
//Open post successfull
|
2023-01-26 12:04:55 +00:00
|
|
|
NavigationManager.NavigateTo($"/{board.Tag}/thread/{postId}", true, true);
|
2023-01-18 12:56:24 +00:00
|
|
|
Console.WriteLine("Post created");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
//Open post unsucessfull
|
|
|
|
NavigationManager.NavigateTo("/UnSuccessfulPost");
|
|
|
|
Console.WriteLine("Shit sucks and did not work.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|