Skip to content

Commit dbcb4f9

Browse files
Use central defintion of storage system
Change-Id: Ibf31c650b08920bf82827607c3421556ac90ae61
1 parent 035baa7 commit dbcb4f9

File tree

9 files changed

+66
-53
lines changed

9 files changed

+66
-53
lines changed

src/components/media.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { Link } from "react-router-dom";
3434
import { dateParser } from "./date";
3535
import { DeleteMediaParams, SynapseDataProvider } from "../synapse/dataProvider";
3636
import { getMediaUrl } from "../synapse/synapse";
37+
import storage from "../storage";
3738

3839
const DeleteMediaDialog = ({ open, onClose, onSubmit }) => {
3940
const translate = useTranslate();
@@ -339,7 +340,7 @@ export const ViewMediaButton = ({ media_id, label }) => {
339340
};
340341

341342
export const MediaIDField = ({ source }) => {
342-
const homeserver = localStorage.getItem("home_server");
343+
const homeserver = storage.getItem("home_server");
343344
const record = useRecordContext();
344345
if (!record) return null;
345346

src/pages/LoginPage.tsx

+5-4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
isValidBaseUrl,
2828
splitMxid,
2929
} from "../synapse/synapse";
30+
import storage from "../storage";
3031

3132
const FormBox = styled(Box)(({ theme }) => ({
3233
display: "flex",
@@ -94,7 +95,7 @@ const LoginPage = () => {
9495
const [locale, setLocale] = useLocaleState();
9596
const locales = useLocales();
9697
const translate = useTranslate();
97-
const base_url = allowSingleBaseUrl ? restrictBaseUrl : localStorage.getItem("base_url");
98+
const base_url = allowSingleBaseUrl ? restrictBaseUrl : storage.getItem("base_url");
9899
const [ssoBaseUrl, setSSOBaseUrl] = useState("");
99100
const loginToken = /\?loginToken=([a-zA-Z0-9_-]+)/.exec(window.location.href);
100101

@@ -103,8 +104,8 @@ const LoginPage = () => {
103104
console.log("SSO token is", ssoToken);
104105
// Prevent further requests
105106
window.history.replaceState({}, "", window.location.href.replace(loginToken[0], "#").split("#")[0]);
106-
const baseUrl = localStorage.getItem("sso_base_url");
107-
localStorage.removeItem("sso_base_url");
107+
const baseUrl = storage.getItem("sso_base_url");
108+
storage.removeItem("sso_base_url");
108109
if (baseUrl) {
109110
const auth = {
110111
base_url: baseUrl,
@@ -154,7 +155,7 @@ const LoginPage = () => {
154155
};
155156

156157
const handleSSO = () => {
157-
localStorage.setItem("sso_base_url", ssoBaseUrl);
158+
storage.setItem("sso_base_url", ssoBaseUrl);
158159
const ssoFullUrl = `${ssoBaseUrl}/_matrix/client/r0/login/sso/redirect?redirectUrl=${encodeURIComponent(
159160
window.location.href
160161
)}`;

src/resources/users.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ export const UserList = (props: ListProps) => (
128128

129129
// https://matrix.org/docs/spec/appendices#user-identifiers
130130
// here only local part of user_id
131-
// maxLength = 255 - "@" - ":" - localStorage.getItem("home_server").length
132-
// localStorage.getItem("home_server").length is not valid here
131+
// maxLength = 255 - "@" - ":" - storage.getItem("home_server").length
132+
// storage.getItem("home_server").length is not valid here
133133
const validateUser = [required(), maxLength(253), regex(/^[a-z0-9._=\-/]+$/, "synapseadmin.users.invalid_user_id")];
134134

135135
const validateAddress = [required(), maxLength(255)];

src/storage.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const storage = localStorage;
2+
3+
export default storage;

src/synapse/authProvider.test.ts

+15-14
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import fetchMock from "jest-fetch-mock";
22

33
import authProvider from "./authProvider";
4+
import storage from "../storage";
45

56
fetchMock.enableMocks();
67

78
describe("authProvider", () => {
89
beforeEach(() => {
910
fetchMock.resetMocks();
10-
localStorage.clear();
11+
storage.clear();
1112
});
1213

1314
describe("login", () => {
@@ -36,10 +37,10 @@ describe("authProvider", () => {
3637
}),
3738
method: "POST",
3839
});
39-
expect(localStorage.getItem("base_url")).toEqual("http://example.com");
40-
expect(localStorage.getItem("user_id")).toEqual("@user:example.com");
41-
expect(localStorage.getItem("access_token")).toEqual("foobar");
42-
expect(localStorage.getItem("device_id")).toEqual("some_device");
40+
expect(storage.getItem("base_url")).toEqual("http://example.com");
41+
expect(storage.getItem("user_id")).toEqual("@user:example.com");
42+
expect(storage.getItem("access_token")).toEqual("foobar");
43+
expect(storage.getItem("device_id")).toEqual("some_device");
4344
});
4445
});
4546

@@ -67,16 +68,16 @@ describe("authProvider", () => {
6768
}),
6869
method: "POST",
6970
});
70-
expect(localStorage.getItem("base_url")).toEqual("https://example.com");
71-
expect(localStorage.getItem("user_id")).toEqual("@user:example.com");
72-
expect(localStorage.getItem("access_token")).toEqual("foobar");
73-
expect(localStorage.getItem("device_id")).toEqual("some_device");
71+
expect(storage.getItem("base_url")).toEqual("https://example.com");
72+
expect(storage.getItem("user_id")).toEqual("@user:example.com");
73+
expect(storage.getItem("access_token")).toEqual("foobar");
74+
expect(storage.getItem("device_id")).toEqual("some_device");
7475
});
7576

7677
describe("logout", () => {
77-
it("should remove the access_token from localStorage", async () => {
78-
localStorage.setItem("base_url", "example.com");
79-
localStorage.setItem("access_token", "foo");
78+
it("should remove the access_token from storage", async () => {
79+
storage.setItem("base_url", "example.com");
80+
storage.setItem("access_token", "foo");
8081
fetchMock.mockResponse(JSON.stringify({}));
8182

8283
await authProvider.logout(null);
@@ -89,7 +90,7 @@ describe("authProvider", () => {
8990
method: "POST",
9091
user: { authenticated: true, token: "Bearer foo" },
9192
});
92-
expect(localStorage.getItem("access_token")).toBeNull();
93+
expect(storage.getItem("access_token")).toBeNull();
9394
});
9495
});
9596

@@ -113,7 +114,7 @@ describe("authProvider", () => {
113114
});
114115

115116
it("should resolve when logged in", async () => {
116-
localStorage.setItem("access_token", "foobar");
117+
storage.setItem("access_token", "foobar");
117118

118119
await expect(authProvider.checkAuth({})).resolves.toBeUndefined();
119120
});

src/synapse/authProvider.ts

+12-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { AuthProvider, Options, fetchUtils } from "react-admin";
22

3+
import storage from "../storage";
4+
35
const authProvider: AuthProvider = {
46
// called when the user attempts to log in
57
login: async ({
@@ -19,7 +21,7 @@ const authProvider: AuthProvider = {
1921
body: JSON.stringify(
2022
Object.assign(
2123
{
22-
device_id: localStorage.getItem("device_id"),
24+
device_id: storage.getItem("device_id"),
2325
initial_device_display_name: "Synapse Admin",
2426
},
2527
loginToken
@@ -40,23 +42,23 @@ const authProvider: AuthProvider = {
4042
// server, since the admin might want to access the admin API via some
4143
// private address
4244
base_url = base_url.replace(/\/+$/g, "");
43-
localStorage.setItem("base_url", base_url);
45+
storage.setItem("base_url", base_url);
4446

4547
const decoded_base_url = window.decodeURIComponent(base_url);
4648
const login_api_url = decoded_base_url + "/_matrix/client/r0/login";
4749

4850
const { json } = await fetchUtils.fetchJson(login_api_url, options);
49-
localStorage.setItem("home_server", json.home_server);
50-
localStorage.setItem("user_id", json.user_id);
51-
localStorage.setItem("access_token", json.access_token);
52-
localStorage.setItem("device_id", json.device_id);
51+
storage.setItem("home_server", json.home_server);
52+
storage.setItem("user_id", json.user_id);
53+
storage.setItem("access_token", json.access_token);
54+
storage.setItem("device_id", json.device_id);
5355
},
5456
// called when the user clicks on the logout button
5557
logout: async () => {
5658
console.log("logout");
5759

58-
const logout_api_url = localStorage.getItem("base_url") + "/_matrix/client/r0/logout";
59-
const access_token = localStorage.getItem("access_token");
60+
const logout_api_url = storage.getItem("base_url") + "/_matrix/client/r0/logout";
61+
const access_token = storage.getItem("access_token");
6062

6163
const options: Options = {
6264
method: "POST",
@@ -68,7 +70,7 @@ const authProvider: AuthProvider = {
6870

6971
if (typeof access_token === "string") {
7072
await fetchUtils.fetchJson(logout_api_url, options);
71-
localStorage.removeItem("access_token");
73+
storage.removeItem("access_token");
7274
}
7375
},
7476
// called when the API returns an error
@@ -81,7 +83,7 @@ const authProvider: AuthProvider = {
8183
},
8284
// called when the user navigates to a new location, to check for authentication
8385
checkAuth: () => {
84-
const access_token = localStorage.getItem("access_token");
86+
const access_token = storage.getItem("access_token");
8587
console.log("checkAuth " + access_token);
8688
return typeof access_token === "string" ? Promise.resolve() : Promise.reject();
8789
},

src/synapse/dataProvider.test.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import fetchMock from "jest-fetch-mock";
22

33
import dataProvider from "./dataProvider";
4+
import storage from "../storage";
45

56
fetchMock.enableMocks();
67

@@ -9,8 +10,8 @@ beforeEach(() => {
910
});
1011

1112
describe("dataProvider", () => {
12-
localStorage.setItem("base_url", "http://localhost");
13-
localStorage.setItem("access_token", "access_token");
13+
storage.setItem("base_url", "http://localhost");
14+
storage.setItem("access_token", "access_token");
1415

1516
it("fetches all users", async () => {
1617
fetchMock.mockResponseOnce(

src/synapse/dataProvider.ts

+20-18
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ import { stringify } from "query-string";
22

33
import { DataProvider, DeleteParams, Identifier, Options, RaRecord, fetchUtils } from "react-admin";
44

5+
import storage from "../storage";
6+
57
// Adds the access token to all requests
68
const jsonClient = (url: string, options: Options = {}) => {
7-
const token = localStorage.getItem("access_token");
9+
const token = storage.getItem("access_token");
810
console.log("httpClient " + url);
911
if (token != null) {
1012
options.user = {
@@ -16,7 +18,7 @@ const jsonClient = (url: string, options: Options = {}) => {
1618
};
1719

1820
const mxcUrlToHttp = (mxcUrl: string) => {
19-
const homeserver = localStorage.getItem("base_url");
21+
const homeserver = storage.getItem("base_url");
2022
const re = /^mxc:\/\/([^/]+)\/(\w+)/;
2123
const ret = re.exec(mxcUrl);
2224
console.log("mxcClient " + ret);
@@ -232,7 +234,7 @@ const resourceMap = {
232234
data: "users",
233235
total: json => json.total,
234236
create: (data: RaRecord) => ({
235-
endpoint: `/_synapse/admin/v2/users/@${encodeURIComponent(data.id)}:${localStorage.getItem("home_server")}`,
237+
endpoint: `/_synapse/admin/v2/users/@${encodeURIComponent(data.id)}:${storage.getItem("home_server")}`,
236238
body: data,
237239
method: "PUT",
238240
}),
@@ -341,7 +343,7 @@ const resourceMap = {
341343
data: "media",
342344
total: json => json.total,
343345
delete: (params: DeleteParams) => ({
344-
endpoint: `/_synapse/admin/v1/media/${localStorage.getItem("home_server")}/${params.id}`,
346+
endpoint: `/_synapse/admin/v1/media/${storage.getItem("home_server")}/${params.id}`,
345347
}),
346348
},
347349
protect_media: {
@@ -358,11 +360,11 @@ const resourceMap = {
358360
quarantine_media: {
359361
map: (qm: UserMedia) => ({ id: qm.media_id }),
360362
create: (params: UserMedia) => ({
361-
endpoint: `/_synapse/admin/v1/media/quarantine/${localStorage.getItem("home_server")}/${params.media_id}`,
363+
endpoint: `/_synapse/admin/v1/media/quarantine/${storage.getItem("home_server")}/${params.media_id}`,
362364
method: "POST",
363365
}),
364366
delete: (params: DeleteParams) => ({
365-
endpoint: `/_synapse/admin/v1/media/unquarantine/${localStorage.getItem("home_server")}/${params.id}`,
367+
endpoint: `/_synapse/admin/v1/media/unquarantine/${storage.getItem("home_server")}/${params.id}`,
366368
method: "POST",
367369
}),
368370
},
@@ -506,7 +508,7 @@ const dataProvider: SynapseDataProvider = {
506508
order_by: field,
507509
dir: getSearchOrder(order),
508510
};
509-
const homeserver = localStorage.getItem("base_url");
511+
const homeserver = storage.getItem("base_url");
510512
if (!homeserver || !(resource in resourceMap)) throw Error("Homeserver not set");
511513

512514
const res = resourceMap[resource];
@@ -523,7 +525,7 @@ const dataProvider: SynapseDataProvider = {
523525

524526
getOne: async (resource, params) => {
525527
console.log("getOne " + resource);
526-
const homeserver = localStorage.getItem("base_url");
528+
const homeserver = storage.getItem("base_url");
527529
if (!homeserver || !(resource in resourceMap)) throw Error("Homeserver not set");
528530

529531
const res = resourceMap[resource];
@@ -535,7 +537,7 @@ const dataProvider: SynapseDataProvider = {
535537

536538
getMany: async (resource, params) => {
537539
console.log("getMany " + resource);
538-
const homeserver = localStorage.getItem("base_url");
540+
const homeserver = storage.getItem("base_url");
539541
if (!homeserver || !(resource in resourceMap)) throw Error("Homerserver not set");
540542

541543
const res = resourceMap[resource];
@@ -560,7 +562,7 @@ const dataProvider: SynapseDataProvider = {
560562
dir: getSearchOrder(order),
561563
};
562564

563-
const homeserver = localStorage.getItem("base_url");
565+
const homeserver = storage.getItem("base_url");
564566
if (!homeserver || !(resource in resourceMap)) throw Error("Homeserver not set");
565567

566568
const res = resourceMap[resource];
@@ -577,7 +579,7 @@ const dataProvider: SynapseDataProvider = {
577579

578580
update: async (resource, params) => {
579581
console.log("update " + resource);
580-
const homeserver = localStorage.getItem("base_url");
582+
const homeserver = storage.getItem("base_url");
581583
if (!homeserver || !(resource in resourceMap)) throw Error("Homeserver not set");
582584

583585
const res = resourceMap[resource];
@@ -592,7 +594,7 @@ const dataProvider: SynapseDataProvider = {
592594

593595
updateMany: async (resource, params) => {
594596
console.log("updateMany " + resource);
595-
const homeserver = localStorage.getItem("base_url");
597+
const homeserver = storage.getItem("base_url");
596598
if (!homeserver || !(resource in resourceMap)) throw Error("Homeserver not set");
597599

598600
const res = resourceMap[resource];
@@ -609,7 +611,7 @@ const dataProvider: SynapseDataProvider = {
609611

610612
create: async (resource, params) => {
611613
console.log("create " + resource);
612-
const homeserver = localStorage.getItem("base_url");
614+
const homeserver = storage.getItem("base_url");
613615
if (!homeserver || !(resource in resourceMap)) throw Error("Homeserver not set");
614616

615617
const res = resourceMap[resource];
@@ -626,7 +628,7 @@ const dataProvider: SynapseDataProvider = {
626628

627629
createMany: async (resource: string, params: { ids: Identifier[]; data: RaRecord }) => {
628630
console.log("createMany " + resource);
629-
const homeserver = localStorage.getItem("base_url");
631+
const homeserver = storage.getItem("base_url");
630632
if (!homeserver || !(resource in resourceMap)) throw Error("Homeserver not set");
631633

632634
const res = resourceMap[resource];
@@ -648,7 +650,7 @@ const dataProvider: SynapseDataProvider = {
648650

649651
delete: async (resource, params) => {
650652
console.log("delete " + resource);
651-
const homeserver = localStorage.getItem("base_url");
653+
const homeserver = storage.getItem("base_url");
652654
if (!homeserver || !(resource in resourceMap)) throw Error("Homeserver not set");
653655

654656
const res = resourceMap[resource];
@@ -673,7 +675,7 @@ const dataProvider: SynapseDataProvider = {
673675

674676
deleteMany: async (resource, params) => {
675677
console.log("deleteMany " + resource);
676-
const homeserver = localStorage.getItem("base_url");
678+
const homeserver = storage.getItem("base_url");
677679
if (!homeserver || !(resource in resourceMap)) throw Error("Homeserver not set");
678680

679681
const res = resourceMap[resource];
@@ -719,10 +721,10 @@ const dataProvider: SynapseDataProvider = {
719721
* @returns
720722
*/
721723
deleteMedia: async ({ before_ts, size_gt = 0, keep_profiles = true }) => {
722-
const homeserver = localStorage.getItem("home_server"); // TODO only required for synapse < 1.78.0
724+
const homeserver = storage.getItem("home_server"); // TODO only required for synapse < 1.78.0
723725
const endpoint = `/_synapse/admin/v1/media/${homeserver}/delete?before_ts=${before_ts}&size_gt=${size_gt}&keep_profiles=${keep_profiles}`;
724726

725-
const base_url = localStorage.getItem("base_url");
727+
const base_url = storage.getItem("base_url");
726728
const endpoint_url = base_url + endpoint;
727729
const { json } = await jsonClient(endpoint_url, { method: "POST" });
728730
return json as DeleteMediaResult;

0 commit comments

Comments
 (0)