Bug fixes
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Kieran 2023-06-09 02:14:32 +02:00
parent 5f4b43b189
commit 1199ea0174
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
4 changed files with 20 additions and 35 deletions

View File

@ -43,10 +43,12 @@ public class UserController : Controller
var requestedId = isMe ? loggedUser!.Value : id.FromBase58Guid();
var user = await _store.Get(requestedId);
if (loggedUser != requestedId && !(user?.Flags.HasFlag(UserFlags.PublicProfile) ?? false))
if (user == default) return NotFound();
if (loggedUser != requestedId && !user.Flags.HasFlag(UserFlags.PublicProfile))
return NotFound();
return Json(user!.ToApiUser(isMe));
var isMyProfile = requestedId == user.Id;
return Json(user!.ToApiUser(isMyProfile));
}
/// <summary>

View File

@ -117,6 +117,7 @@ public class UserManager
var users = await _store.ListUsers(new(0, 1));
if (users.TotalResults == 0)
{
newUser.Flags |= UserFlags.EmailVerified; // force email as verified for admin user
newUser.Roles.Add(new()
{
UserId = newUser.Id,

View File

@ -1,6 +1,6 @@
import './App.css';
import {createBrowserRouter, Outlet, RouterProvider} from "react-router-dom";
import {createBrowserRouter, LoaderFunctionArgs, Outlet, RouterProvider} from "react-router-dom";
import {Provider} from "react-redux";
import store from "./Store";
@ -11,6 +11,8 @@ import {UserLogin} from "./Pages/UserLogin";
import {ProfilePage} from "./Pages/Profile";
import {Header} from "./Components/Shared/Header";
import {Donate} from "./Pages/Donate";
import {VoidApi} from "@void-cat/api";
import {ApiHost} from "./Const";
const router = createBrowserRouter([
@ -27,6 +29,13 @@ const router = createBrowserRouter([
},
{
path: "/u/:id",
loader: async ({params}: LoaderFunctionArgs) => {
const api = new VoidApi(ApiHost, store.getState().login.jwt);
if(params.id) {
return await api.getUser(params.id);
}
return null;
},
element: <ProfilePage/>
},
{

View File

@ -1,8 +1,8 @@
import "./Profile.css";
import {Fragment, useEffect, useState} from "react";
import {Fragment, useState} from "react";
import {useDispatch, useSelector} from "react-redux";
import {default as moment} from "moment";
import {useParams} from "react-router-dom";
import {useLoaderData} from "react-router-dom";
import {Profile} from "@void-cat/api";
import useApi from "Hooks/UseApi";
@ -16,11 +16,10 @@ import ApiKeyList from "../Components/Profile/ApiKeyList";
export function ProfilePage() {
const dispatch = useDispatch();
const params = useParams();
const loader = useLoaderData();
const Api = useApi();
const [profile, setProfile] = useState<Profile>();
const [noProfile, setNoProfile] = useState<boolean>();
const [profile, setProfile] = useState(loader as Profile | null);
const [emailCode, setEmailCode] = useState("");
const [emailCodeError, setEmailCodeError] = useState("");
const [newCodeSent, setNewCodeSent] = useState(false);
@ -31,17 +30,6 @@ export function ProfilePage() {
const needsEmailVerify = canEdit && profile?.needsVerification === true;
const cantEditProfile = canEdit && !needsEmailVerify;
async function loadProfile(id: string) {
try {
let p = await Api.getUser(id);
setProfile(p);
} catch (e) {
console.error(e);
setNoProfile(true);
}
}
async function changeAvatar() {
const res = await new Promise<Array<File>>((resolve) => {
let i = document.createElement('input');
@ -54,9 +42,7 @@ export function ProfilePage() {
});
const file = res[0];
const noop = (_: any) => {
};
const uploader = Api.getUploader(file, noop, noop, noop);
const uploader = Api.getUploader(file);
const rsp = await uploader.upload();
if (rsp.ok) {
setProfile({
@ -79,7 +65,6 @@ export function ProfilePage() {
async function submitCode(id: string, code: string) {
try {
await Api.submitVerifyCode(id, code);
await loadProfile(id);
} catch (e) {
console.error(e);
setEmailCodeError("Invalid or expired code.");
@ -157,12 +142,6 @@ export function ProfilePage() {
);
}
useEffect(() => {
if (params.id) {
loadProfile(params.id).catch(console.error);
}
}, [params]);
if (profile) {
let avatarUrl = profile.avatar ?? DefaultAvatar;
if (!avatarUrl.startsWith("http")) {
@ -209,12 +188,6 @@ export function ProfilePage() {
</div>
</div>
);
} else if (noProfile) {
return (
<div className="page">
<h1>No profile found :(</h1>
</div>
);
} else {
return (
<div className="page">