76 lines
2.8 KiB
Dart
76 lines
2.8 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:http/http.dart';
|
|
import 'package:matrix/matrix.dart' as matrix;
|
|
|
|
extension SynapseAdmin on matrix.Client {
|
|
Future<List<dynamic>> getEventReports({int from = 0, int limit = 10}) async {
|
|
final requestUri = Uri(
|
|
path: '/_synapse/admin/v1/event_reports',
|
|
query: 'from=$from&limit=$limit&order_by=received_ts&dir=b'
|
|
);
|
|
|
|
if (baseUri == null) return [];
|
|
print(baseUri!.resolveUri(requestUri).toString());
|
|
final request = Request('GET', baseUri!.resolveUri(requestUri));
|
|
request.headers['authorization'] = 'Bearer $accessToken';
|
|
final response = await httpClient.send(request);
|
|
final responseBody = await response.stream.toBytes();
|
|
if (response.statusCode != 200) unexpectedResponse(response, responseBody);
|
|
final responseString = utf8.decode(responseBody);
|
|
final json = jsonDecode(responseString);
|
|
return json['event_reports'];
|
|
}
|
|
|
|
Future<matrix.Event?> getReportedEvent(int id) async {
|
|
final requestUri = Uri(
|
|
path: '/_synapse/admin/v1/event_reports/$id',
|
|
);
|
|
|
|
if (baseUri == null) return null;
|
|
final request = Request('GET', baseUri!.resolveUri(requestUri));
|
|
request.headers['authorization'] = 'Bearer $accessToken';
|
|
final response = await httpClient.send(request);
|
|
final responseBody = await response.stream.toBytes();
|
|
if (response.statusCode != 200) unexpectedResponse(response, responseBody);
|
|
final responseString = utf8.decode(responseBody);
|
|
final json = jsonDecode(responseString);
|
|
|
|
final room = getRoomById(json['room_id']);
|
|
|
|
if (room == null) return null;
|
|
|
|
print('Event content: ${jsonEncode(json['event_json'])}');
|
|
|
|
return new matrix.Event(
|
|
content: json['event_json']['content'],
|
|
type: json['event_json']['type'],
|
|
eventId: json['event_id'],
|
|
senderId: json['sender'],
|
|
originServerTs: DateTime.fromMillisecondsSinceEpoch(json['event_json']['origin_server_ts']),
|
|
room: room,
|
|
);
|
|
}
|
|
|
|
Future<bool> isSynapseAdministrator() async {
|
|
print('Checking if I am admin...');
|
|
print('User ID: $userID');
|
|
if (userID == null) return false;
|
|
final requestUri = Uri(
|
|
path: '/_synapse/admin/v1/users/$userID/admin',
|
|
);
|
|
|
|
print('Base URL: ${baseUri.toString()}');
|
|
if (baseUri == null) return false;
|
|
final request = Request('GET', baseUri!.resolveUri(requestUri));
|
|
request.headers['authorization'] = 'Bearer $accessToken';
|
|
final response = await httpClient.send(request);
|
|
final responseBody = await response.stream.toBytes();
|
|
if (response.statusCode != 200) unexpectedResponse(response, responseBody);
|
|
final responseString = utf8.decode(responseBody);
|
|
final json = jsonDecode(responseString);
|
|
print('Response from endpoint: $responseString');
|
|
return json['admin'];
|
|
}
|
|
}
|