Merge branch 'Eric-maybe_borked' into 'Eric'

Eric maybe borked

See merge request limited_dev/imageboard!3
This commit is contained in:
limited_dev 2023-02-07 20:49:12 +00:00
commit c093b06d03
17 changed files with 145 additions and 23 deletions

View file

@ -1,7 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Diagnostics.CodeAnalysis;
using ImageBoardServerApp.Shared.Components;
namespace ImageBoardServerApp.Data; namespace ImageBoardServerApp.Data;

View file

@ -18,18 +18,9 @@
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Shared\Components\Forms\CommentForm.razor" />
<AdditionalFiles Include="Shared\Components\Forms\PostForm.razor" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="wwwroot\img\dynamic\comment\b" /> <Folder Include="wwwroot\img\dynamic\comment\b" />
<Folder Include="wwwroot\img\dynamic\op\b" /> <Folder Include="wwwroot\img\dynamic\op\b" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Remove="wwwroot\img\dynamic\op\1663306837979603.jpg" />
</ItemGroup>
</Project> </Project>

View file

@ -1,7 +1,6 @@
@page "/login" @page "/login"
@using ImageBoardServerApp.Data.Repository @using ImageBoardServerApp.Data.Repository
@using ImageBoardServerApp.Auth @using ImageBoardServerApp.Auth
@using System.Runtime.InteropServices
@inject IJSRuntime js @inject IJSRuntime js
@inject AuthenticationStateProvider authStateProvider @inject AuthenticationStateProvider authStateProvider
@inject NavigationManager navManager @inject NavigationManager navManager

View file

@ -0,0 +1,67 @@
@page "/register"
@using ImageBoardServerApp.Data.Repository
@using ImageBoardServerApp.Auth
@inject IJSRuntime js
@inject AuthenticationStateProvider authStateProvider
@inject NavigationManager navManager
<h3>Register to bulletbroards</h3>
<div>
<form>
<div>
<label for="email">Email:</label>
<input type="email" id="email" @bind="Email" />
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" @bind="Password" />
</div>
<a @onclick="login" href="javascript:void(0)">[Register]</a>
</form>
</div>
@code {
private string Email { get; set; }
private string Password { get; set; }
private bool verified;
private async Task login()
{
Console.WriteLine("Registering...");
UserData userToCreate = new UserData()
{
Email = Email,
Password = BCrypt.Net.BCrypt.HashPassword(Password),
Role = "User",
PermissionInteger = 1,
TimeBanned = -1
};
if (await UsersRepository.getUserByEmailAsync(Email) != null)
{
return;
}
await UsersRepository.createUserAsync(userToCreate);
Console.WriteLine("loggin you in...");
var user = await UsersRepository.getUserByEmailAsync(Email);
if (user == null)
{
await js.InvokeVoidAsync("alert", "User does not exist");
verified = false;
return;
}
verified = BCrypt.Net.BCrypt.Verify(Password, user.Password);
if (verified)
{
verified = true;
var customAuthStateProvider = (CustomAuthenticationStateProvider)authStateProvider;
await customAuthStateProvider.UpdateAuthenticationStateAsync(user);
navManager.NavigateTo("/", true);
return;
}
await js.InvokeVoidAsync("alert", $"Wrong Password");
}
}
@code {
}

View file

@ -6,8 +6,8 @@
<h1>BulletBoard</h1> <h1>BulletBoard</h1>
<span>This is a simple Imageboard made in Razor.</span> <span>This is a simple Imageboard made in Razor.</span>
<br/> <br/>
<span>We're currently hosting @amountOfPosts Threads with @amountOfComments Comments from @amountOfUsers Users.</span> <span>We're currently hosting @amountOfPosts Threads, @amountOfComments Comments and @amountOfUsers Users.</span>
<br/> <sr/>
<span>@Details</span> <span>@Details</span>
@code{ @code{

View file

@ -0,0 +1,32 @@
@page "/modmenu"
@using ImageBoardServerApp.Auth
@inject AuthenticationStateProvider authStateProvider
@inject NavigationManager navManager
<h3>ModMenu</h3>
<AuthorizeView>
<Authorized>
<span>Welcome @mail to the mod menu</span>
<div>
<a href="/modmenu/reports">[Reports]</a>
<a href="/modmenu/users">[Users]</a>
</div>
</Authorized>
<NotAuthorized>
<a href="/login">You do not have permission to view this menu.</a>
</NotAuthorized>
</AuthorizeView>
@code {
private string mail { get; set; } = "";
protected override async Task OnInitializedAsync()
{
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
var user = await cauthStateProvder.GetAuthenticationStateAsync();
if (user.User.Identity.IsAuthenticated)
{
mail = user.User.Identity.Name;
}
}
}

View file

@ -0,0 +1,5 @@
@page "/modmenu/reports"
<Reports />
@code {
}

View file

@ -0,0 +1,6 @@
@page "/modmenu/users"
<h3>UsersPage</h3>
@code {
}

View file

@ -9,6 +9,10 @@
<a class="toggleOpened" onclick="@ToggleOpened">@toggleText</a> <a class="toggleOpened" onclick="@ToggleOpened">@toggleText</a>
<span>]</span> <span>]</span>
<span class="name">@comment.Username</span> <span class="name">@comment.Username</span>
@if (@comment.User.Role != "User")
{
<span class="@comment.User.Role" >##@comment.User.Role</span>
}
<span class="date">@getTimeFromUnix(comment.CreatedAt)</span> <span class="date">@getTimeFromUnix(comment.CreatedAt)</span>
<span class="post-id">No.@comment.CommentID</span> <span class="post-id">No.@comment.CommentID</span>
</div> </div>

View file

@ -58,4 +58,13 @@
.threadTextContainer{ .threadTextContainer{
margin: 0; margin: 0;
}
.Admin{
color: #ff191c;
}
.Mod{
color: #af13d7;
} }

View file

@ -100,7 +100,7 @@
{ {
Stream stream = selectedFile.OpenReadStream(maxAllowedSize: 512000 * 4); // max 2MB Stream stream = selectedFile.OpenReadStream(maxAllowedSize: 512000 * 4); // max 2MB
var file = Path.GetRandomFileName() + "." + selectedFile.Name.Split(".")[selectedFile.Name.Split(".").Length - 1]; var file = Path.GetRandomFileName() + "." + selectedFile.Name.Split(".")[selectedFile.Name.Split(".").Length - 1];
var path = $"{env.WebRootPath}\\img\\dynamic\\comment\\{@post.Board}\\{file}"; var path = $"{env.WebRootPath}/img/dynamic/comment/{@post.Board}/{@file}";
FileStream fs = File.Create(path); FileStream fs = File.Create(path);
await stream.CopyToAsync(fs); await stream.CopyToAsync(fs);
stream.Close(); stream.Close();
@ -110,7 +110,7 @@
var imageToUpload = new ImageData var imageToUpload = new ImageData
{ {
Board = post.Board, Board = post.Board,
ImageLocation = $"\\img\\dynamic\\comment\\{post.Board}\\{file}" ImageLocation = $"/img/dynamic/comment/{@post.Board}/{@file}"
}; };
int imageID = await ImagesRepository.createImageAsync(imageToUpload); int imageID = await ImagesRepository.createImageAsync(imageToUpload);
commentToCreate = new CommentData() commentToCreate = new CommentData()

View file

@ -120,7 +120,7 @@
Stream stream = selectedFile.OpenReadStream(maxAllowedSize: 512000 * 4); // max 2MB Stream stream = selectedFile.OpenReadStream(maxAllowedSize: 512000 * 4); // max 2MB
var file = Path.GetRandomFileName() + "." + selectedFile.Name.Split(".")[selectedFile.Name.Split(".").Length - 1]; var file = Path.GetRandomFileName() + "." + selectedFile.Name.Split(".")[selectedFile.Name.Split(".").Length - 1];
var path = $"{env.WebRootPath}\\img\\dynamic\\op\\{board.Tag}\\{file}"; var path = $"{env.WebRootPath}/img/dynamic/op/{@board.Tag}/{@file}";
FileStream fs = File.Create(path); FileStream fs = File.Create(path);
await stream.CopyToAsync(fs); await stream.CopyToAsync(fs);
stream.Close(); stream.Close();
@ -129,7 +129,7 @@
var imageToUpload = new ImageData var imageToUpload = new ImageData
{ {
Board = board.Tag, Board = board.Tag,
ImageLocation = $"\\img\\dynamic\\op\\{board.Tag}\\{file}" ImageLocation = $"/img/dynamic/op/{@board.Tag}/{@file}"
}; };
int imageID = await ImagesRepository.createImageAsync(imageToUpload); int imageID = await ImagesRepository.createImageAsync(imageToUpload);
var postToPost = new PostData var postToPost = new PostData

View file

@ -13,7 +13,10 @@
} }
<span class="title">@post.Title</span> <span class="title">@post.Title</span>
<span class="name">@post.Username</span> <span class="name">@post.Username</span>
<span class="roleAdmin" >##@post.User.Role</span> @if (post.User.Role != "User")
{
<span class="@post.User.Role" >##@post.User.Role</span>
}
<span class="date">@getTimeFromUnix(post.CreatedAt)</span> <span class="date">@getTimeFromUnix(post.CreatedAt)</span>
<span class="post-id">No.@post.PostID</span> <span class="post-id">No.@post.PostID</span>
</div> </div>
@ -33,7 +36,7 @@
<div class="threadTextContainer"> <div class="threadTextContainer">
@foreach (string s in @post.Content.Split("\n")) @foreach (string s in @post.Content.Split("\n"))
{ {
@if (s.StartsWith(">")) @if (@s.StartsWith(">"))
{ {
<span class="threadText greenText">@s</span> <span class="threadText greenText">@s</span>
} }

View file

@ -16,10 +16,14 @@
color: #339305; color: #339305;
} }
.roleAdmin{ .Admin{
color: #ff191c; color: #ff191c;
} }
.Mod{
color: #af13d7;
}
.threadHeader{ .threadHeader{
text-align: left; text-align: left;
} }

View file

@ -0,0 +1,5 @@
<h3>Reports</h3>
@code {
}

View file

@ -20,6 +20,7 @@
<a @onclick="logout" href="javascript:void(0)">[Logout @mail]</a> <a @onclick="logout" href="javascript:void(0)">[Logout @mail]</a>
</Authorized> </Authorized>
<NotAuthorized> <NotAuthorized>
<a href="/register">[Register]</a>
<a href="/login">[Login]</a> <a href="/login">[Login]</a>
</NotAuthorized> </NotAuthorized>
</AuthorizeView> </AuthorizeView>

View file

@ -6,8 +6,6 @@
@using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop @using Microsoft.JSInterop
@using ImageBoardServerApp
@using ImageBoardServerApp.Shared
@using Radzen @using Radzen
@using Radzen.Blazor @using Radzen.Blazor
@using ImageBoardServerApp @using ImageBoardServerApp