diff --git a/src/App.js b/src/App.js index ce37344..9f3ed8e 100644 --- a/src/App.js +++ b/src/App.js @@ -5,6 +5,7 @@ import authProvider from "./synapse/authProvider"; import dataProvider from "./synapse/dataProvider"; import { UserList, UserCreate, UserEdit } from "./components/users"; import { RoomList } from "./components/rooms"; +import { ConnectionsShow } from "./components/connections"; import LoginPage from "./components/LoginPage"; import UserIcon from "@material-ui/icons/Group"; import { ViewListIcon as RoomIcon } from "@material-ui/icons/ViewList"; @@ -36,6 +37,7 @@ const App = () => ( icon={UserIcon} /> + ); diff --git a/src/components/connections.js b/src/components/connections.js new file mode 100644 index 0000000..c6b0f0f --- /dev/null +++ b/src/components/connections.js @@ -0,0 +1,44 @@ +import React from "react"; +import { + Datagrid, + Show, + SimpleForm, + TextField, + ArrayField, + DateField, +} from "react-admin"; + + +export const ConnectionsShow = props => ( + + + + + + + + + + + + +); \ No newline at end of file diff --git a/src/components/users.js b/src/components/users.js index 068b59e..febd115 100644 --- a/src/components/users.js +++ b/src/components/users.js @@ -14,6 +14,7 @@ import { TextInput, ReferenceField, regex, + ShowButton, } from "react-admin"; const UserFilter = props => ( @@ -56,6 +57,7 @@ export const UserList = props => ( + ); @@ -87,4 +89,4 @@ export const UserEdit = props => ( -); +); \ No newline at end of file diff --git a/src/i18n/de.js b/src/i18n/de.js index 6626ae7..b479911 100644 --- a/src/i18n/de.js +++ b/src/i18n/de.js @@ -38,5 +38,13 @@ export default { joined_members: "Mitglieder", }, }, + connections: { + name: "Verbindungen", + fields: { + last_seen: "Datum", + ip: "IP-Adresse", + user_agent: "User Agent", + }, + }, }, }; diff --git a/src/i18n/en.js b/src/i18n/en.js index 0683213..3b27b76 100644 --- a/src/i18n/en.js +++ b/src/i18n/en.js @@ -38,5 +38,13 @@ export default { joined_members: "Members", }, }, + connections: { + name: "Connections", + fields: { + last_seen: "Date", + ip: "IP address", + user_agent: "User agent", + }, + }, }, }; diff --git a/src/synapse/dataProvider.js b/src/synapse/dataProvider.js index e144bf7..b5dcdd9 100644 --- a/src/synapse/dataProvider.js +++ b/src/synapse/dataProvider.js @@ -42,6 +42,14 @@ const resourceMap = { return json.total_rooms; }, }, + connections: { + path: "/_synapse/admin/v1/whois", + map: c => ({ + ...c, + id: c.user_id, + }), + data: "connections", + }, }; function filterNullValues(key, value) {