forked from Kieran/void.cat
Bug fixes
This commit is contained in:
parent
5f4b43b189
commit
1199ea0174
@ -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>
|
||||||
|
@ -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,
|
||||||
|
@ -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/>
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -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">
|
||||||
|
Loading…
Reference in New Issue
Block a user