commit fb78a241871e4524db36e7d6c09852e822330551
parent bc3a849bd62ab0f2704c3536ef33eea2b19cac9a
Author: MTRNord <mtrnord1@gmail.com>
Date: Sat, 5 Feb 2022 20:11:25 +0100
Fix matrix art going up in flames
Diffstat:
10 files changed, 95 insertions(+), 95 deletions(-)
diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml
@@ -50,7 +50,7 @@ jobs:
- name: Install Playwright
run: npx playwright install --with-deps && npx playwright install msedge
- name: Run Playwright tests
- run: (node --version && npx playwright --version) && npm run dev-tests & npx playwright test
+ run: npx playwright test
- uses: actions/upload-artifact@82c141cc518b40d92cc801eee768e7aafc9c2fa2 # v2
if: always()
with:
diff --git a/components/FrontPageImage.tsx b/components/FrontPageImage.tsx
@@ -40,7 +40,6 @@ export default class FrontPageImage extends PureComponent<Props, State> {
componentDidUpdate(prevProps: Props, prevState: State) {
if (this.state.error && this.state.error !== prevState.error) {
- toast.dismiss();
toast(() => <div><h2 className="text-xl text-white">{i18n?.t("Error")}</h2><br />{this.state.error}</div>, {
autoClose: false
});
diff --git a/e2e/auth.json b/e2e/auth.json
@@ -1,42 +0,0 @@
-{
- "cookies": [],
- "origins": [
- {
- "origin": "http://localhost:3000",
- "localStorage": [
- {
- "name": "mainaccessToken",
- "value": "syt_bWF0cml4X2FydF9ndWVzdF8xNjQxMDQ3ODI1NDkz_sHzGkEbUPwgafJZCVqDE_2LrWnQ"
- },
- {
- "name": "mainserverName",
- "value": "art.midnightthoughts.space"
- },
- {
- "name": "mainuserId",
- "value": "@matrix_art_guest_1641047825493:art.midnightthoughts.space"
- },
- {
- "name": "mainserverUrl",
- "value": "https://matrix.art.midnightthoughts.space/_matrix/client"
- },
- {
- "name": "guestaccessToken",
- "value": "syt_bWF0cml4X2FydF9ndWVzdF8xNjQxMDQ3ODI1NDkz_sHzGkEbUPwgafJZCVqDE_2LrWnQ"
- },
- {
- "name": "guestserverName",
- "value": "art.midnightthoughts.space"
- },
- {
- "name": "guestuserId",
- "value": "@matrix_art_guest_1641047825493:art.midnightthoughts.space"
- },
- {
- "name": "guestserverUrl",
- "value": "https://matrix.art.midnightthoughts.space/_matrix/client"
- }
- ]
- }
- ]
-}
-\ No newline at end of file
diff --git a/e2e/home.spec.ts b/e2e/home.spec.ts
@@ -1,11 +1,6 @@
import { test, expect } from '@playwright/test';
-test.use({
- storageState: 'e2e/auth.json'
-});
-
test('test navigation to details', async ({ page, baseURL }) => {
- console.log(baseURL);
page.on('console', msg => console.log(msg.text()));
// Go to http://localhost:3000/
diff --git a/helpers/matrix_client.ts b/helpers/matrix_client.ts
@@ -73,16 +73,22 @@ export default class MatrixClient {
let username = "matrix_art_guest_" + Date.now();
let password = this.generateToken(32);
- const data = await this.fetchJson(`${serverUrl}/r0/register?kind=guest`, {
- method: "POST",
- body: JSON.stringify({
- auth: {
- type: "m.login.dummy",
- },
- username: username,
- password: password,
- }),
- });
+ let data;
+ try {
+ data = await this.fetchJson(`${serverUrl}/r0/register?kind=guest`, {
+ method: "POST",
+ body: JSON.stringify({
+ auth: {
+ type: "m.login.dummy",
+ },
+ username: username,
+ password: password,
+ }),
+ });
+ } catch (error) {
+ console.log(`${serverUrl}/r0/register?kind=guest`);
+ throw new Error("Failed to register new guest");
+ }
this.serverUrl = serverUrl;
this._userId = data.user_id;
this._accessToken = data.access_token;
@@ -158,6 +164,7 @@ export default class MatrixClient {
}
async register(serverUrl: string, username: string, password: string) {
+ console.log(`${serverUrl}/r0/register`);
const data = await this.fetchJson(`${serverUrl}/r0/register`, {
method: "POST",
body: JSON.stringify({
@@ -287,7 +294,16 @@ export default class MatrixClient {
invite: 100,
ban: 100,
redact: 100,
- }
+ },
+ initial_state: [
+ {
+ type: "m.room.guest_access",
+ content: {
+ guest_access: "can_join"
+ },
+ state_key: ""
+ }
+ ]
}),
headers: {
Authorization: `Bearer ${this.accessToken}`,
diff --git a/helpers/storage.ts b/helpers/storage.ts
@@ -1,3 +1,4 @@
+const STORAGE_VERSION = 2;
export default class Storage {
private prefix;
private nodeLocalStorage?;
@@ -15,6 +16,15 @@ export default class Storage {
}
this.nodeLocalStorage = new LocalStorage(dir);
}
+ if (this.getItem("version") === undefined || this.getItem("version") !== STORAGE_VERSION.toString()) {
+ if (typeof window !== "undefined") {
+ window.localStorage.clear();
+ window.localStorage.setItem("version", STORAGE_VERSION.toString());
+ } else {
+ this.nodeLocalStorage?.clear();
+ this.nodeLocalStorage?.setItem("version", STORAGE_VERSION.toString());
+ }
+ }
}
getItem(key: string): any {
if (typeof window !== "undefined") {
diff --git a/pages/index.tsx b/pages/index.tsx
@@ -152,7 +152,12 @@ export const getServerSideProps: GetServerSideProps = async ({ res, locale }) =>
// TODO fix this somehow. It is super inefficient.
for (let user of data) {
// We dont need many events
- const roomId = await client?.followUser(user.public_user_room);
+ let roomId;
+ try {
+ roomId = await client?.followUser(user.public_user_room);
+ } catch {
+ console.error("Unbable to join room");
+ }
const events = await client?.getTimeline(roomId, 100);
// Filter events by type
let images = events.filter((event) => (event.type == "m.image_gallery" || event.type == "m.image") && !event.unsigned?.redacted_because) as MatrixImageEvents[];
diff --git a/pages/post/[id].tsx b/pages/post/[id].tsx
@@ -65,21 +65,22 @@ class Post extends PureComponent<Props, State> {
try {
let serverUrl = constMatrixArtServer + "/_matrix/client";
await this.context.client?.registerAsGuest(serverUrl);
- await this.context.guest_client?.registerAsGuest(serverUrl);
} catch (error) {
console.error("Failed to register as guest:", error);
}
} 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.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);
+ }
+ } else {
+ console.log("Guest Already logged in");
+ }
if (this.props.directory_data && this.props.event_id && this.props.event_id.startsWith("$")) {
await this.loadEvent(this.props.event_id);
}
@@ -99,7 +100,12 @@ class Post extends PureComponent<Props, State> {
// TODO fix this. It is super inefficient.
for (let user of this.props.directory_data) {
// We dont need many events
- const roomId = await client?.followUser(user.public_user_room);
+ let roomId;
+ try {
+ roomId = await client?.followUser(user.public_user_room);
+ } catch {
+ console.error("Unbable to join room");
+ }
const events = await client?.getTimeline(roomId, 100); // Filter events by type
const image_event = events.find((event) => (event.type === "m.image_gallery" || event.type === "m.image") && event.event_id === event_id);
if (image_event == undefined) {
@@ -481,7 +487,12 @@ export const getServerSideProps: GetServerSideProps = async ({ res, locale, quer
for (let user of data) {
// TODO check what happens if this is a non public image.
// We dont need many events
- const roomId = await client?.followUser(user.public_user_room);
+ let roomId;
+ try {
+ roomId = await client?.followUser(user.public_user_room);
+ } catch {
+ console.error("Unbable to join room");
+ }
const events = await client?.getTimeline(roomId, 100);
// Filter events by type
const image_event = events.find((event) => ((event.type == "m.image_gallery" || event.type == "m.image") && !event.unsigned?.redacted_because) && event.event_id === event_id);
diff --git a/pages/profile/[userid].tsx b/pages/profile/[userid].tsx
@@ -65,29 +65,32 @@ 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;
- }
+ }
+ if (!this.context.guest_client?.accessToken) {
try {
- const profile = await this.context.client.getProfile(this.props.mxid);
- this.setState({
- displayname: profile.displayname,
- avatar_url: profile.avatar_url,
- });
+ let serverUrl = constMatrixArtServer + "/_matrix/client";
+ await this.context.guest_client?.registerAsGuest(serverUrl);
} catch (error) {
- console.debug(`Failed to fetch profile for user ${this.props.mxid}:`, error);
+ console.error("Failed to register as guest:", error);
}
- await this.loadEvents();
+ } else {
+ console.log("Guest Already logged in");
+ }
+ if (!this.props.mxid) {
+ return;
}
+ try {
+ const profile = await this.context.client.getProfile(this.props.mxid);
+ this.setState({
+ displayname: profile.displayname,
+ avatar_url: profile.avatar_url,
+ });
+ } catch (error) {
+ console.debug(`Failed to fetch profile for user ${this.props.mxid}:`, error);
+ }
+ await this.loadEvents();
+
this.setState({
isLoggedInUser: this.props.mxid === this.context.client.userId && !this.context.client.isGuest
});
@@ -120,7 +123,12 @@ class Profile extends PureComponent<Props, State> {
isLoadingImages: true,
});
try {
- const roomId = await client?.followUser("#" + this.props.mxid);
+ let roomId;
+ try {
+ roomId = await client?.followUser("#" + this.props.mxid);
+ } catch {
+ console.error("Unbable to join room");
+ }
const events = await client?.getTimeline(roomId, 100, { limit: 30, types: ["m.image", "m.image_gallery", "matrixart.profile", "matrixart.profile_banner"] });
const profile_event = events.find((event) => event.type === "matrixart.profile" && event.sender === this.props.mxid);
const filtered_events = events.filter(event => event.type !== "m.room.member" && event.type !== "m.room.topic" && event.type !== "m.room.name" && event.type !== "m.room.power_levels");
diff --git a/playwright.config.ts b/playwright.config.ts
@@ -104,11 +104,10 @@ const config: PlaywrightTestConfig = {
/* Folder for test artifacts such as screenshots, videos, traces, etc. */
outputDir: 'test-results/',
- /* Run your local dev server before starting the tests
+ /* Run your local dev server before starting the tests */
webServer: {
command: 'npm run dev-tests',
port: 3000,
- reuseExistingServer: !process.env.CI,
- },*/
+ },
};
export default config;