4 Commits

17 changed files with 81 additions and 70 deletions

View File

@@ -69,7 +69,7 @@ class _MyHomePageState extends State<MyHomePage> {
RosterManager(),
PingManager(),
MessageManager(),
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
])
..registerFeatureNegotiators([
ResourceBindingNegotiator(),

View File

@@ -16,10 +16,10 @@ dependencies:
version: 0.1.4+1
moxxmpp:
hosted: https://git.polynom.me/api/packages/Moxxy/pub
version: 0.1.1
version: 0.1.2
moxxmpp_socket_tcp:
hosted: https://git.polynom.me/api/packages/Moxxy/pub
version: 0.1.1
version: 0.1.2
dev_dependencies:
flutter_test:

View File

@@ -1,3 +1,7 @@
## 0.1.2
- **FEAT**: Remove Moxxy specific strings.
## 0.1.1
- **REFACTOR**: Move packages into packages/.

View File

@@ -1 +1 @@
include: ../analysis_options.yaml
include: ../../analysis_options.yaml

View File

@@ -1,26 +1,26 @@
const smManager = 'im.moxxy.streammangementmanager';
const discoManager = 'im.moxxy.discomanager';
const messageManager = 'im.moxxy.messagemanager';
const rosterManager = 'im.moxxy.rostermanager';
const presenceManager = 'im.moxxy.presencemanager';
const csiManager = 'im.moxxy.csimanager';
const carbonsManager = 'im.moxxy.carbonsmanager';
const vcardManager = 'im.moxxy.vcardmanager';
const pubsubManager = 'im.moxxy.pubsubmanager';
const userAvatarManager = 'im.moxxy.useravatarmanager';
const stableIdManager = 'im.moxxy.stableidmanager';
const simsManager = 'im.moxxy.simsmanager';
const messageDeliveryReceiptManager = 'im.moxxy.messagedeliveryreceiptmanager';
const chatMarkerManager = 'im.moxxy.chatmarkermanager';
const oobManager = 'im.moxxy.oobmanager';
const sfsManager = 'im.moxxy.sfsmanager';
const messageRepliesManager = 'im.moxxy.messagerepliesmanager';
const blockingManager = 'im.moxxy.blockingmanager';
const httpFileUploadManager = 'im.moxxy.httpfileuploadmanager';
const chatStateManager = 'im.moxxy.chatstatemanager';
const pingManager = 'im.moxxy.ping';
const fileUploadNotificationManager = 'im.moxxy.fileuploadnotificationmanager';
const omemoManager = 'org.moxxy.omemomanager';
const emeManager = 'org.moxxy.ememanager';
const cryptographicHashManager = 'org.moxxy.cryptographichashmanager';
const delayedDeliveryManager = 'org.moxxy.delayeddeliverymanager';
const smManager = 'im.moxxmpp.streammangementmanager';
const discoManager = 'im.moxxmpp.discomanager';
const messageManager = 'im.moxxmpp.messagemanager';
const rosterManager = 'im.moxxmpp.rostermanager';
const presenceManager = 'im.moxxmpp.presencemanager';
const csiManager = 'im.moxxmpp.csimanager';
const carbonsManager = 'im.moxxmpp.carbonsmanager';
const vcardManager = 'im.moxxmpp.vcardmanager';
const pubsubManager = 'im.moxxmpp.pubsubmanager';
const userAvatarManager = 'im.moxxmpp.useravatarmanager';
const stableIdManager = 'im.moxxmpp.stableidmanager';
const simsManager = 'im.moxxmpp.simsmanager';
const messageDeliveryReceiptManager = 'im.moxxmpp.messagedeliveryreceiptmanager';
const chatMarkerManager = 'im.moxxmpp.chatmarkermanager';
const oobManager = 'im.moxxmpp.oobmanager';
const sfsManager = 'im.moxxmpp.sfsmanager';
const messageRepliesManager = 'im.moxxmpp.messagerepliesmanager';
const blockingManager = 'im.moxxmpp.blockingmanager';
const httpFileUploadManager = 'im.moxxmpp.httpfileuploadmanager';
const chatStateManager = 'im.moxxmpp.chatstatemanager';
const pingManager = 'im.moxxmpp.ping';
const fileUploadNotificationManager = 'im.moxxmpp.fileuploadnotificationmanager';
const omemoManager = 'org.moxxmpp.omemomanager';
const emeManager = 'org.moxxmpp.ememanager';
const cryptographicHashManager = 'org.moxxmpp.cryptographichashmanager';
const delayedDeliveryManager = 'org.moxxmpp.delayeddeliverymanager';

View File

@@ -1,9 +1,9 @@
const saslPlainNegotiator = 'im.moxxy.sasl.plain';
const saslScramSha1Negotiator = 'im.moxxy.sasl.scram.sha1';
const saslScramSha256Negotiator = 'im.moxxy.sasl.scram.sha256';
const saslScramSha512Negotiator = 'im.moxxy.sasl.scram.sha512';
const csiNegotiator = 'im.moxxy.xeps.csi';
const rosterNegotiator = 'im.moxxy.core.roster';
const resourceBindingNegotiator = 'im.moxxy.core.resource';
const streamManagementNegotiator = 'im.moxxy.xeps.sm';
const startTlsNegotiator = 'im.moxxy.core.starttls';
const saslPlainNegotiator = 'im.moxxmpp.sasl.plain';
const saslScramSha1Negotiator = 'im.moxxmpp.sasl.scram.sha1';
const saslScramSha256Negotiator = 'im.moxxmpp.sasl.scram.sha256';
const saslScramSha512Negotiator = 'im.moxxmpp.sasl.scram.sha512';
const csiNegotiator = 'im.moxxmpp.xeps.csi';
const rosterNegotiator = 'im.moxxmpp.core.roster';
const resourceBindingNegotiator = 'im.moxxmpp.core.resource';
const streamManagementNegotiator = 'im.moxxmpp.xeps.sm';
const startTlsNegotiator = 'im.moxxmpp.core.starttls';

View File

@@ -14,9 +14,11 @@ import 'package:moxxmpp/src/xeps/xep_0115.dart';
import 'package:moxxmpp/src/xeps/xep_0414.dart';
class PresenceManager extends XmppManagerBase {
PresenceManager() : _capabilityHash = null, super();
PresenceManager(this._capHashNode) : _capabilityHash = null, super();
String? _capabilityHash;
final String _capHashNode;
String get capabilityHashNode => _capHashNode;
@override
String getId() => presenceManager;
@@ -93,7 +95,7 @@ class PresenceManager extends XmppManagerBase {
xmlns: capsXmlns,
attributes: {
'hash': 'sha-1',
'node': 'http://moxxy.im',
'node': _capHashNode,
'ver': await getCapabilityHash()
},
)

View File

@@ -157,7 +157,7 @@ class DiscoManager extends XmppManagerBase {
final query = stanza.firstTag('query')!;
final node = query.attributes['node'] as String?;
final capHash = await presence.getCapabilityHash();
final isCapabilityNode = node == 'http://moxxy.im#$capHash';
final isCapabilityNode = node == '${presence.capabilityHashNode}#$capHash';
if (!isCapabilityNode && node != null) {
await getAttributes().sendStanza(Stanza.iq(
@@ -200,7 +200,7 @@ class DiscoManager extends XmppManagerBase {
xmlns: discoInfoXmlns,
attributes: {
...!isCapabilityNode ? {} : {
'node': 'http://moxxy.im#$capHash'
'node': '${presence.capabilityHashNode}#$capHash'
}
},
children: [

View File

@@ -1,6 +1,6 @@
name: moxxmpp
description: A pure-Dart XMPP library
version: 0.1.1
version: 0.1.2
homepage: https://codeberg.org/moxxy/moxxmpp
publish_to: https://git.polynom.me/api/packages/Moxxy/pub

View File

@@ -60,7 +60,7 @@ void main() {
StubNegotiator2(),
])
..registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),

View File

@@ -53,7 +53,7 @@ void main() {
ignoreId: true,
),
StringExpectation(
"<presence xmlns='jabber:client' from='polynomdivision@test.server/MU29eEZn'><show>chat</show><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://moxxy.im' ver='QRTBC5cg/oYd+UOTYazSQR4zb/I=' /></presence>",
"<presence xmlns='jabber:client' from='polynomdivision@test.server/MU29eEZn'><show>chat</show><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://moxxmpp.example' ver='QRTBC5cg/oYd+UOTYazSQR4zb/I=' /></presence>",
'',
),
StanzaExpectation(
@@ -73,7 +73,7 @@ void main() {
allowPlainAuth: true,
),);
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),

View File

@@ -242,7 +242,7 @@ void main() {
),);
final sm = StreamManagementManager();
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),
@@ -343,7 +343,7 @@ void main() {
'<enabled xmlns="urn:xmpp:sm:3" id="some-long-sm-id" resume="true" />',
),
StringExpectation(
"<presence xmlns='jabber:client' from='polynomdivision@test.server/MU29eEZn'><show>chat</show><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://moxxy.im' ver='QRTBC5cg/oYd+UOTYazSQR4zb/I=' /></presence>",
"<presence xmlns='jabber:client' from='polynomdivision@test.server/MU29eEZn'><show>chat</show><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://moxxmpp.example' ver='QRTBC5cg/oYd+UOTYazSQR4zb/I=' /></presence>",
'<iq type="result" />',
),
StanzaExpectation(
@@ -364,7 +364,7 @@ void main() {
),);
final sm = StreamManagementManager();
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),
@@ -518,7 +518,7 @@ void main() {
allowPlainAuth: true,
),);
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),
@@ -610,7 +610,7 @@ void main() {
allowPlainAuth: true,
),);
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),
@@ -702,7 +702,7 @@ void main() {
allowPlainAuth: true,
),);
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),

View File

@@ -104,7 +104,7 @@ void main() {
attributes: {
// TODO: Somehow make the test ignore this attribute
'ver': 'QRTBC5cg/oYd+UOTYazSQR4zb/I=',
'node': 'http://moxxy.im',
'node': 'http://moxxmpp.example',
'hash': 'sha-1'
},
)
@@ -126,7 +126,7 @@ void main() {
allowPlainAuth: true,
),);
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),
@@ -180,7 +180,7 @@ void main() {
allowPlainAuth: true,
),);
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),
@@ -234,7 +234,7 @@ void main() {
allowPlainAuth: true,
),);
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),
@@ -289,7 +289,7 @@ void main() {
allowPlainAuth: false,
),);
conn.registerManagers([
PresenceManager(),
PresenceManager('http://moxxmpp.example'),
RosterManager(),
DiscoManager(),
PingManager(),

View File

@@ -1,3 +1,7 @@
## 0.1.2
- **FEAT**: Make onBadCertificate available.
## 0.1.1
- **REFACTOR**: Move packages into packages/.

View File

@@ -1,4 +1,4 @@
include: ../analysis_options.yaml
include: ../../analysis_options.yaml
analyzer:
exclude:

View File

@@ -50,11 +50,12 @@ class TCPSocketWrapper extends BaseSocketWrapper {
return <MoxSrvRecord>[];
}
bool _onBadCertificate(dynamic certificate, String domain) {
_log.fine('Bad certificate: ${certificate.toString()}');
//final isExpired = certificate.endValidity.isAfter(DateTime.now());
// TODO(Unknown): Either validate the certificate ourselves or use a platform native
// hostname verifier (or Dart adds it themselves)
/// Called when we encounter a certificate we cannot verify. [certificate] refers to the certificate
/// in question, while [domain] refers to the domain we try to validate the certificate against.
///
/// Return true if the certificate should be accepted. Return false if it should be rejected.
@visibleForOverriding
bool onBadCertificate(dynamic certificate, String domain) {
return false;
}
@@ -83,7 +84,7 @@ class TCPSocketWrapper extends BaseSocketWrapper {
sock,
host: domain,
supportedProtocols: const [ xmppClientALPNId ],
onBadCertificate: (cert) => _onBadCertificate(cert, domain),
onBadCertificate: (cert) => onBadCertificate(cert, domain),
);
_ignoreSocketClosure = false;
@@ -175,7 +176,7 @@ class TCPSocketWrapper extends BaseSocketWrapper {
_socket = await SecureSocket.secure(
_socket!,
supportedProtocols: const [ xmppClientALPNId ],
onBadCertificate: (cert) => _onBadCertificate(cert, domain),
onBadCertificate: (cert) => onBadCertificate(cert, domain),
);
_secure = true;

View File

@@ -1,6 +1,6 @@
name: moxxmpp_socket_tcp
description: A socket for moxxmpp using TCP that implements the RFC6120 connection algorithm and XEP-0368
version: 0.1.1
version: 0.1.2
homepage: https://codeberg.org/moxxy/moxxmpp
publish_to: https://git.polynom.me/api/packages/Moxxy/pub
@@ -12,7 +12,7 @@ dependencies:
meta: ^1.6.0
moxxmpp:
hosted: https://git.polynom.me/api/packages/Moxxy/pub
version: ^0.1.1
version: ^0.1.2
dev_dependencies:
lints: ^2.0.0