You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.6 KiB
96 lines
2.6 KiB
// ignore_for_file: public_member_api_docs |
|
|
|
part of '../nextcloud.dart'; |
|
|
|
extension UserDetailsDisplayName on openapi.NextcloudProvisioningApiUserDetails { |
|
/// This is used to work around an API change that wasn't made for every endpoint |
|
/// See https://github.com/nextcloud/server/commit/5086335643b6181284ee50f57b95525002842992 |
|
String? getDisplayName() => displayname ?? displayName; |
|
} |
|
|
|
extension NextcloudNotificationsPushProxy on NextcloudNotificationsClient { |
|
/// Registers a device at the push proxy server |
|
Future registerDeviceAtPushProxy( |
|
final String pushToken, |
|
final NextcloudNotificationsPushServerSubscription subscription, |
|
final String proxyServer, |
|
) async { |
|
final request = await HttpClient().postUrl(Uri.parse('${proxyServer}devices')) |
|
..followRedirects = false |
|
..persistentConnection = true; |
|
|
|
request.headers.add(HttpHeaders.contentTypeHeader, 'application/x-www-form-urlencoded'); |
|
|
|
request.add( |
|
utf8.encode( |
|
Uri( |
|
queryParameters: { |
|
'pushToken': pushToken, |
|
'deviceIdentifier': subscription.deviceIdentifier, |
|
'deviceIdentifierSignature': subscription.signature, |
|
'userPublicKey': subscription.publicKey, |
|
}, |
|
).query, |
|
), |
|
); |
|
|
|
final response = await request.close(); |
|
|
|
if (response.statusCode != 200) { |
|
// coverage:ignore-start |
|
throw NextcloudApiException( |
|
response.statusCode, |
|
{}, // TODO |
|
await response.bodyBytes, |
|
); |
|
// coverage:ignore-end |
|
} |
|
} |
|
|
|
/// Generates the push token hash which is just sha512 |
|
String generatePushTokenHash(final String pushToken) => sha512.convert(utf8.encode(pushToken)).toString(); |
|
} |
|
|
|
/// Decrypts the subject of a push notification |
|
NextcloudNotificationsPushNotificationDecryptedSubject decryptPushNotificationSubject( |
|
final RSAPrivateKey privateKey, |
|
final String subject, |
|
) => |
|
NextcloudNotificationsPushNotificationDecryptedSubject.fromJson( |
|
json.decode(privateKey.decrypt(subject)) as Map<String, dynamic>, |
|
); |
|
|
|
/// See https://github.com/nextcloud/news/blob/4a107b3d53c4fe651ac704251b99e04a53cd587f/lib/Db/ListType.php |
|
enum NewsListType { |
|
feed(0), |
|
folder(1), |
|
starred(2), |
|
allItems(3), |
|
shared(4), |
|
explore(5), |
|
unread(6); |
|
|
|
const NewsListType(this.code); |
|
|
|
final int code; |
|
} |
|
|
|
enum ShareType { |
|
user(0), |
|
group(1), |
|
usergroup(2), |
|
link(3), |
|
email(4), |
|
// 5 was contact, is no longer used |
|
remote(6), |
|
circle(7), |
|
guest(8), |
|
remoteGroup(9), |
|
room(10), |
|
// 11 is userroom, but it's only used internally |
|
deck(12), |
|
deckUser(13); |
|
|
|
const ShareType(this.code); |
|
final int code; |
|
}
|
|
|