Add dataProvider for synapse
Change-Id: Id1bd6e840a1af8c647c316e29a39e988ac224dba
This commit is contained in:
		
							
								
								
									
										220
									
								
								src/synapse/dataProvider.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								src/synapse/dataProvider.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,220 @@ | ||||
| import { fetchUtils } from "react-admin"; | ||||
| import { stringify } from "query-string"; | ||||
|  | ||||
| // Adds the access token to all requests | ||||
| const jsonClient = (url, options = {}) => { | ||||
|   const token = localStorage.getItem("access_token"); | ||||
|   console.log("httpClient " + url); | ||||
|   if (token != null) { | ||||
|     options.user = { | ||||
|       authenticated: true, | ||||
|       token: `Bearer ${token}`, | ||||
|     }; | ||||
|   } | ||||
|   return fetchUtils.fetchJson(url, options); | ||||
| }; | ||||
|  | ||||
| const resourceMap = { | ||||
|   users: { | ||||
|     path: "/_synapse/admin/v2/users", | ||||
|     map: u => ({ | ||||
|       ...u, | ||||
|       id: u.name, | ||||
|       is_guest: !!u.is_guest, | ||||
|       admin: !!u.admin, | ||||
|       deactivated: !!u.deactivated, | ||||
|     }), | ||||
|     data: "users", | ||||
|     total: (json, perPage) => { | ||||
|       return parseInt(json.next_token, 10) + perPage; | ||||
|     }, | ||||
|   }, | ||||
|   rooms: { | ||||
|     path: "/_synapse/admin/v1/rooms", | ||||
|     map: r => ({ | ||||
|       ...r, | ||||
|       id: r.room_id, | ||||
|       alias: r.canonical_alias, | ||||
|       members: r.joined_members, | ||||
|     }), | ||||
|     data: "rooms", | ||||
|     total: json => { | ||||
|       return json.total_rooms; | ||||
|     }, | ||||
|   }, | ||||
| }; | ||||
|  | ||||
| function filterNullValues(key, value) { | ||||
|   // Filtering out null properties | ||||
|   if (value === null) { | ||||
|     return undefined; | ||||
|   } | ||||
|   return value; | ||||
| } | ||||
|  | ||||
| const dataProvider = { | ||||
|   getList: (resource, params) => { | ||||
|     console.log("getList " + resource); | ||||
|     const { user_id, guests } = params.filter; | ||||
|     const { page, perPage } = params.pagination; | ||||
|     const query = { | ||||
|       from: (page - 1) * perPage, | ||||
|       limit: perPage, | ||||
|       user_id: user_id, | ||||
|       guests: guests, | ||||
|     }; | ||||
|     const homeserver = localStorage.getItem("home_server"); | ||||
|     if (!homeserver || !(resource in resourceMap)) return Promise.reject(); | ||||
|  | ||||
|     const res = resourceMap[resource]; | ||||
|     const homeserver_url = "https://" + homeserver + res.path; | ||||
|     const url = `${homeserver_url}?${stringify(query)}`; | ||||
|  | ||||
|     return jsonClient(url).then(({ json }) => ({ | ||||
|       data: json[res.data].map(res.map), | ||||
|       total: res.total(json, perPage), | ||||
|     })); | ||||
|   }, | ||||
|  | ||||
|   getOne: (resource, params) => { | ||||
|     console.log("getOne " + resource); | ||||
|     const homeserver = localStorage.getItem("home_server"); | ||||
|     if (!homeserver || !(resource in resourceMap)) return Promise.reject(); | ||||
|  | ||||
|     const res = resourceMap[resource]; | ||||
|     const homeserver_url = "https://" + homeserver + res.path; | ||||
|     return jsonClient(`${homeserver_url}/${params.id}`).then(({ json }) => ({ | ||||
|       data: res.map(json), | ||||
|     })); | ||||
|   }, | ||||
|  | ||||
|   getMany: (resource, params) => { | ||||
|     console.log("getMany " + resource); | ||||
|     const homeserver = localStorage.getItem("home_server"); | ||||
|     if (!homeserver || !(resource in resourceMap)) return Promise.reject(); | ||||
|  | ||||
|     const res = resourceMap[resource]; | ||||
|     const homeserver_url = "https://" + homeserver + res.path; | ||||
|     return Promise.all( | ||||
|       params.ids.map(id => jsonClient(`${homeserver_url}/${id}`)) | ||||
|     ).then(responses => ({ | ||||
|       data: responses.map(({ json }) => res.map(json)), | ||||
|     })); | ||||
|   }, | ||||
|  | ||||
|   getManyReference: (resource, params) => { | ||||
|     // FIXME | ||||
|     console.log("getManyReference " + resource); | ||||
|     const { page, perPage } = params.pagination; | ||||
|     const { field, order } = params.sort; | ||||
|     const query = { | ||||
|       sort: JSON.stringify([field, order]), | ||||
|       range: JSON.stringify([(page - 1) * perPage, page * perPage - 1]), | ||||
|       filter: JSON.stringify({ | ||||
|         ...params.filter, | ||||
|         [params.target]: params.id, | ||||
|       }), | ||||
|     }; | ||||
|  | ||||
|     const homeserver = localStorage.getItem("home_server"); | ||||
|     if (!homeserver || !(resource in resourceMap)) return Promise.reject(); | ||||
|  | ||||
|     const res = resourceMap[resource]; | ||||
|     const homeserver_url = "https://" + homeserver + res.path; | ||||
|     const url = `${homeserver_url}?${stringify(query)}`; | ||||
|  | ||||
|     return jsonClient(url).then(({ headers, json }) => ({ | ||||
|       data: json, | ||||
|       total: parseInt( | ||||
|         headers | ||||
|           .get("content-range") | ||||
|           .split("/") | ||||
|           .pop(), | ||||
|         10 | ||||
|       ), | ||||
|     })); | ||||
|   }, | ||||
|  | ||||
|   update: (resource, params) => { | ||||
|     console.log("update " + resource); | ||||
|     const homeserver = localStorage.getItem("home_server"); | ||||
|     if (!homeserver || !(resource in resourceMap)) return Promise.reject(); | ||||
|  | ||||
|     const res = resourceMap[resource]; | ||||
|     const homeserver_url = "https://" + homeserver + res.path; | ||||
|     return jsonClient(`${homeserver_url}/${params.id}`, { | ||||
|       method: "PUT", | ||||
|       body: JSON.stringify(params.data, filterNullValues), | ||||
|     }).then(({ json }) => ({ | ||||
|       data: json, | ||||
|     })); | ||||
|   }, | ||||
|  | ||||
|   updateMany: (resource, params) => { | ||||
|     console.log("updateMany " + resource); | ||||
|     const homeserver = localStorage.getItem("home_server"); | ||||
|     if (!homeserver || !(resource in resourceMap)) return Promise.reject(); | ||||
|  | ||||
|     const res = resourceMap[resource]; | ||||
|     const homeserver_url = "https://" + homeserver + res.path; | ||||
|     return Promise.all( | ||||
|       params.ids.map(id => jsonClient(`${homeserver_url}/${id}`), { | ||||
|         method: "PUT", | ||||
|         body: JSON.stringify(params.data, filterNullValues), | ||||
|       }) | ||||
|     ).then(responses => ({ | ||||
|       data: responses.map(({ json }) => json), | ||||
|     })); | ||||
|   }, | ||||
|  | ||||
|   create: (resource, params) => { | ||||
|     console.log("create " + resource); | ||||
|     const homeserver = localStorage.getItem("home_server"); | ||||
|     if (!homeserver || !(resource in resourceMap)) return Promise.reject(); | ||||
|  | ||||
|     const res = resourceMap[resource]; | ||||
|     const homeserver_url = "https://" + homeserver + res.path; | ||||
|     return jsonClient(`${homeserver_url}/${params.id}`, { | ||||
|       method: "PUT", | ||||
|       body: JSON.stringify(params.data, filterNullValues), | ||||
|     }).then(({ json }) => ({ | ||||
|       data: { | ||||
|         ...params.data, | ||||
|         id: json.id, | ||||
|       }, | ||||
|     })); | ||||
|   }, | ||||
|  | ||||
|   delete: (resource, params) => { | ||||
|     console.log("delete " + resource); | ||||
|     const homeserver = localStorage.getItem("home_server"); | ||||
|     if (!homeserver || !(resource in resourceMap)) return Promise.reject(); | ||||
|  | ||||
|     const res = resourceMap[resource]; | ||||
|     const homeserver_url = "https://" + homeserver + res.path; | ||||
|     return jsonClient(`${homeserver_url}/${params.id}`, { | ||||
|       method: "DELETE", | ||||
|     }).then(({ json }) => ({ | ||||
|       data: json, | ||||
|     })); | ||||
|   }, | ||||
|  | ||||
|   deleteMany: (resource, params) => { | ||||
|     console.log("deleteMany " + resource); | ||||
|     const homeserver = localStorage.getItem("home_server"); | ||||
|     if (!homeserver || !(resource in resourceMap)) return Promise.reject(); | ||||
|  | ||||
|     const res = resourceMap[resource]; | ||||
|     const homeserver_url = "https://" + homeserver + res.path; | ||||
|     return Promise.all( | ||||
|       params.ids.map(id => jsonClient(`${homeserver_url}/${id}`), { | ||||
|         method: "DELETE", | ||||
|         body: JSON.stringify(params.data, filterNullValues), | ||||
|       }) | ||||
|     ).then(responses => ({ | ||||
|       data: responses.map(({ json }) => json), | ||||
|     })); | ||||
|   }, | ||||
| }; | ||||
|  | ||||
| export default dataProvider; | ||||
		Reference in New Issue
	
	Block a user
	 Manuel Stahl
					Manuel Stahl