matrix-art

An image gallery for Matrix
git clone git://archive.git.mtrnord.blog/MTRNord/matrix-art.git
Log | Files | Refs | README | LICENSE

commit ae491de32ca98a15bdcdd7509732a4e31cdd7883
parent b0df3af801ecedd2b2a9a8f8e7b952acbc120c64
Author: MTRNord <mtrnord1@gmail.com>
Date:   Fri, 21 Jan 2022 22:05:33 +0100

Finish login and add logout

Diffstat:
Mcomponents/Header.tsx | 1+
Mpages/login.tsx | 12++++++++----
Apages/logout.tsx | 35+++++++++++++++++++++++++++++++++++
Mpages/profile/[userid].tsx | 8++++++++
4 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/components/Header.tsx b/components/Header.tsx @@ -39,6 +39,7 @@ export default class Header extends PureComponent { {this.context.client.isGuest ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/register">Join</Link></span> : undefined} {this.context.client.isGuest ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/login">Log in</Link></span> : undefined} {!this.context.client.isGuest ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href={"/profile/" + encodeURIComponent(this.context.client.userId!)}>Profile</Link></span> : undefined} + {!this.context.client.isGuest ? <span className='px-4 h-auto min-w-[1.5rem] flex items-center whitespace-nowrap cursor-pointer text-gray-900 dark:text-gray-200 font-medium'><Link href="/logout/">Logout</Link></span> : undefined} </nav> </div> <span className='lg:opacity-100 opacity-0 inline-block bg-gray-900 dark:bg-gray-200 w-[1px] lg:h-7 h-0'></span> diff --git a/pages/login.tsx b/pages/login.tsx @@ -61,7 +61,6 @@ class Login extends PureComponent<Props, State> { } async handleSubmit(event: { preventDefault: () => void; }) { - // TODO update client event.preventDefault(); let serverUrl = this.state.serverUrl; // Reset url if the field is hidden. @@ -75,13 +74,16 @@ class Login extends PureComponent<Props, State> { serverUrl = constMatrixArtServer + "/_matrix/client"; } - // TODO join required rooms if (this.state.mxid && this.state.password) { this.setState({ loading: true }); await this.context.client.login(serverUrl, this.state.mxid, this.state.password, true); - this.props.router.replace("/"); + await this.context.client.followUser(`#${this.context.client.userId}`); + if (typeof window !== "undefined") { + window.location.reload(); + } + await this.props.router.replace("/"); } } @@ -103,7 +105,9 @@ class Login extends PureComponent<Props, State> { <h1 className='text-xl text-gray-900 dark:text-gray-200 font-bold'>Log In</h1> </div> </div> - {/* TODO fix loader */} + <div className="m-0 w-full"> + <div className="loader fixed top-[50%] left-[50%] transform translate-x-[-50%] translate-y-[-50%]">Loading...</div> + </div> </main> <Footer></Footer> </div> diff --git a/pages/logout.tsx b/pages/logout.tsx @@ -0,0 +1,34 @@ +import { NextRouter, withRouter } from "next/router"; +import { PureComponent, ReactNode } from "react"; +import { ClientContext } from "../components/ClientContext"; + +type Props = { + router: NextRouter; +}; +type State = { + +}; + +class Logout extends PureComponent<Props, State> { + declare context: React.ContextType<typeof ClientContext>; + + constructor(props: Props | Readonly<Props>) { + super(props); + } + + async componentDidMount() { + if (!this.context.client.isGuest) { + await this.context.client.logout(false); + } + if (typeof window !== "undefined") { + window.location.reload(); + } + await this.props.router.replace("/"); + } + render() { + return <></>; + } +} + +Logout.contextType = ClientContext; +export default withRouter(Logout); +\ No newline at end of file diff --git a/pages/profile/[userid].tsx b/pages/profile/[userid].tsx @@ -41,6 +41,14 @@ class Profile extends PureComponent<Props, State> { if (!this.context.client?.accessToken) { this.registerAsGuest(); } else { + if (!this.context.guest_client?.accessToken) { + try { + let serverUrl = constMatrixArtServer + "/_matrix/client"; + await this.context.guest_client?.registerAsGuest(serverUrl); + } catch (error) { + console.error("Failed to register as guest:", error); + } + } console.log("Already logged in"); if (!this.props.mxid) { return;