Bug fixes

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 requestedId = isMe ? loggedUser!.Value : id.FromBase58Guid();
var user = await _store.Get(requestedId); 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 NotFound();
return Json(user!.ToApiUser(isMe)); var isMyProfile = requestedId == user.Id;
return Json(user!.ToApiUser(isMyProfile));
} }
/// <summary> /// <summary>

View File

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

View File

@ -1,6 +1,6 @@
import './App.css'; 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 {Provider} from "react-redux";
import store from "./Store"; import store from "./Store";
@ -11,6 +11,8 @@ import {UserLogin} from "./Pages/UserLogin";
import {ProfilePage} from "./Pages/Profile"; import {ProfilePage} from "./Pages/Profile";
import {Header} from "./Components/Shared/Header"; import {Header} from "./Components/Shared/Header";
import {Donate} from "./Pages/Donate"; import {Donate} from "./Pages/Donate";
import {VoidApi} from "@void-cat/api";
import {ApiHost} from "./Const";
const router = createBrowserRouter([ const router = createBrowserRouter([
@ -27,6 +29,13 @@ const router = createBrowserRouter([
}, },
{ {
path: "/u/:id", 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/> element: <ProfilePage/>
}, },
{ {

View File

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