Compare commits
No commits in common. "7ceee48d31a59f3bc5278fcdc696beab377612d7" and "365ff2f23850b1808d3f6ea39c3789badf39ad7b" have entirely different histories.
7ceee48d31
...
365ff2f238
78
flake.lock
78
flake.lock
@ -7,11 +7,11 @@
|
|||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1727554699,
|
"lastModified": 1694377165,
|
||||||
"narHash": "sha256-puBCNL5PW7Pej+6Srmi2YjEgNeE015NFe33hbkkLqeQ=",
|
"narHash": "sha256-NeIlZIElbkbKaNK5SZv6ULcFT/UGIICb3q7GPpkf9jk=",
|
||||||
"owner": "tadfisher",
|
"owner": "tadfisher",
|
||||||
"repo": "android-nixpkgs",
|
"repo": "android-nixpkgs",
|
||||||
"rev": "bc34ef1c71fe9eafcfb1d637b431fca83d746625",
|
"rev": "b020dc733ee69393841a50cf94d45735d5a5a57a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -25,14 +25,15 @@
|
|||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"android-nixpkgs",
|
"android-nixpkgs",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
],
|
||||||
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1722113426,
|
"lastModified": 1693833206,
|
||||||
"narHash": "sha256-Yo/3loq572A8Su6aY5GP56knpuKYRvM2a1meP9oJZCw=",
|
"narHash": "sha256-wHOY0nnD6gWj8u9uI85/YlsganYyWRK1hLFZulZwfmY=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "devshell",
|
"repo": "devshell",
|
||||||
"rev": "67cce7359e4cd3c45296fb4aaf6a19e2a9c757ae",
|
"rev": "65114ea495a8d3cc1352368bf170d67ef005aa5a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -42,24 +43,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"inputs": {
|
|
||||||
"systems": "systems"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1726560853,
|
|
||||||
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils_2": {
|
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems_2"
|
"systems": "systems_2"
|
||||||
},
|
},
|
||||||
@ -77,13 +60,31 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_3"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1692799911,
|
||||||
|
"narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1727348695,
|
"lastModified": 1694183432,
|
||||||
"narHash": "sha256-J+PeFKSDV+pHL7ukkfpVzCOO7mBSrrpJ3svwBFABbhI=",
|
"narHash": "sha256-YyPGNapgZNNj51ylQMw9lAgvxtM2ai1HZVUu3GS8Fng=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1925c603f17fc89f4c8f6bf6f631a802ad85d784",
|
"rev": "db9208ab987cdeeedf78ad9b4cf3c55f5ebd269b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -95,11 +96,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1727586919,
|
"lastModified": 1694343207,
|
||||||
"narHash": "sha256-e/YXG0tO5GWHDS8QQauj8aj4HhXEm602q9swrrlTlKQ=",
|
"narHash": "sha256-jWi7OwFxU5Owi4k2JmiL1sa/OuBCQtpaAesuj5LXC8w=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "2dcd9c55e8914017226f5948ac22c53872a13ee2",
|
"rev": "78058d810644f5ed276804ce7ea9e82d92bee293",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -145,6 +146,21 @@
|
|||||||
"repo": "default",
|
"repo": "default",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"systems_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
40
flake.nix
40
flake.nix
@ -15,22 +15,20 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
# Everything to make Flutter happy
|
# Everything to make Flutter happy
|
||||||
android = pkgs.androidenv.composeAndroidPackages {
|
sdk = android-nixpkgs.sdk.${system} (sdkPkgs: with sdkPkgs; [
|
||||||
# TODO: Find a way to pin these
|
cmdline-tools-latest
|
||||||
#toolsVersion = "26.1.1";
|
build-tools-30-0-3
|
||||||
#platformToolsVersion = "31.0.3";
|
build-tools-33-0-2
|
||||||
#buildToolsVersions = [ "31.0.0" ];
|
build-tools-34-0-0
|
||||||
#includeEmulator = true;
|
platform-tools
|
||||||
#emulatorVersion = "30.6.3";
|
emulator
|
||||||
platformVersions = [ "28" ];
|
patcher-v4
|
||||||
includeSources = false;
|
platforms-android-28
|
||||||
includeSystemImages = true;
|
platforms-android-29
|
||||||
systemImageTypes = [ "default" ];
|
platforms-android-30
|
||||||
abiVersions = [ "x86_64" ];
|
platforms-android-31
|
||||||
includeNDK = false;
|
platforms-android-33
|
||||||
useGoogleAPIs = false;
|
]);
|
||||||
useGoogleTVAddOns = false;
|
|
||||||
};
|
|
||||||
lib = pkgs.lib;
|
lib = pkgs.lib;
|
||||||
pinnedJDK = pkgs.jdk17;
|
pinnedJDK = pkgs.jdk17;
|
||||||
|
|
||||||
@ -70,9 +68,9 @@
|
|||||||
};
|
};
|
||||||
in pkgs.mkShell {
|
in pkgs.mkShell {
|
||||||
buildInputs = with pkgs; [
|
buildInputs = with pkgs; [
|
||||||
flutter pinnedJDK android.platform-tools dart # Dart
|
flutter pinnedJDK sdk dart # Dart
|
||||||
gitlint # Code hygiene
|
gitlint # Code hygiene
|
||||||
ripgrep # General utilities
|
ripgrep # General utilities
|
||||||
|
|
||||||
# Flutter dependencies for Linux desktop
|
# Flutter dependencies for Linux desktop
|
||||||
atk
|
atk
|
||||||
@ -102,13 +100,13 @@
|
|||||||
CPATH = "${pkgs.xorg.libX11.dev}/include:${pkgs.xorg.xorgproto}/include";
|
CPATH = "${pkgs.xorg.libX11.dev}/include:${pkgs.xorg.xorgproto}/include";
|
||||||
LD_LIBRARY_PATH = with pkgs; lib.makeLibraryPath [ atk cairo epoxy gdk-pixbuf glib gtk3 harfbuzz pango ];
|
LD_LIBRARY_PATH = with pkgs; lib.makeLibraryPath [ atk cairo epoxy gdk-pixbuf glib gtk3 harfbuzz pango ];
|
||||||
|
|
||||||
ANDROID_SDK_ROOT = "${android.androidsdk}/share/android-sdk";
|
ANDROID_SDK_ROOT = "${sdk}/share/android-sdk";
|
||||||
ANDROID_HOME = "${android.androidsdk}/share/android-sdk";
|
ANDROID_HOME = "${sdk}/share/android-sdk";
|
||||||
JAVA_HOME = pinnedJDK;
|
JAVA_HOME = pinnedJDK;
|
||||||
|
|
||||||
# Fix an issue with Flutter using an older version of aapt2, which does not know
|
# Fix an issue with Flutter using an older version of aapt2, which does not know
|
||||||
# an used parameter.
|
# an used parameter.
|
||||||
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${android.androidsdk}/share/android-sdk/build-tools/34.0.0/aapt2";
|
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${sdk}/share/android-sdk/build-tools/34.0.0/aapt2";
|
||||||
};
|
};
|
||||||
|
|
||||||
apps = {
|
apps = {
|
||||||
|
@ -246,9 +246,6 @@ class SaslScramNegotiator extends Sasl2AuthenticationNegotiator {
|
|||||||
bool _checkSignature(String base64Signature) {
|
bool _checkSignature(String base64Signature) {
|
||||||
final signature =
|
final signature =
|
||||||
parseKeyValue(utf8.decode(base64.decode(base64Signature)));
|
parseKeyValue(utf8.decode(base64.decode(base64Signature)));
|
||||||
_log.finest(
|
|
||||||
'Expecting signature: "$_serverSignature", got: "${signature["v"]}"',
|
|
||||||
);
|
|
||||||
return signature['v']! == _serverSignature;
|
return signature['v']! == _serverSignature;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,28 +5,28 @@ homepage: https://codeberg.org/moxxy/moxxmpp
|
|||||||
publish_to: https://git.polynom.me/api/packages/Moxxy/pub
|
publish_to: https://git.polynom.me/api/packages/Moxxy/pub
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.0.0 <4.0.0"
|
sdk: '>=3.0.0 <4.0.0'
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
collection: ^1.19.0
|
collection: ^1.16.0
|
||||||
cryptography: ^2.7.0
|
cryptography: ^2.0.5
|
||||||
hex: ^0.2.0
|
hex: ^0.2.0
|
||||||
json_serializable: ^6.8.0
|
json_serializable: ^6.3.1
|
||||||
logging: ^1.2.0
|
logging: ^1.0.2
|
||||||
meta: ^1.16.0
|
meta: ^1.7.0
|
||||||
moxlib:
|
moxlib:
|
||||||
hosted: https://git.polynom.me/api/packages/Moxxy/pub
|
hosted: https://git.polynom.me/api/packages/Moxxy/pub
|
||||||
version: ^0.2.0
|
version: ^0.2.0
|
||||||
omemo_dart:
|
omemo_dart:
|
||||||
hosted: https://git.polynom.me/api/packages/PapaTutuWawa/pub
|
hosted: https://git.polynom.me/api/packages/PapaTutuWawa/pub
|
||||||
version: ^0.6.0
|
version: ^0.5.1
|
||||||
random_string: ^2.3.1
|
random_string: ^2.3.1
|
||||||
saslprep: ^1.0.3
|
saslprep: ^1.0.2
|
||||||
synchronized: ^3.3.0+3
|
synchronized: ^3.0.0+2
|
||||||
uuid: ^3.0.7
|
uuid: ^3.0.5
|
||||||
xml: ^6.5.0
|
xml: ^6.1.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
build_runner: ^2.4.12
|
build_runner: ^2.1.11
|
||||||
test: ^1.25.8
|
test: ^1.18.0
|
||||||
very_good_analysis: ^6.0.0
|
very_good_analysis: ^3.0.1
|
||||||
|
@ -216,89 +216,6 @@ void main() {
|
|||||||
expect(result.isType<XmppError>(), false);
|
expect(result.isType<XmppError>(), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test SCRAM-SHA-1 SASL2 negotiation with a valid signature', () async {
|
|
||||||
final fakeSocket = StubTCPSocket([
|
|
||||||
StringExpectation(
|
|
||||||
"<stream:stream xmlns='jabber:client' version='1.0' xmlns:stream='http://etherx.jabber.org/streams' to='server' from='user@server' xml:lang='en'>",
|
|
||||||
'''
|
|
||||||
<stream:stream
|
|
||||||
xmlns="jabber:client"
|
|
||||||
version="1.0"
|
|
||||||
xmlns:stream="http://etherx.jabber.org/streams"
|
|
||||||
from="server"
|
|
||||||
xml:lang="en">
|
|
||||||
<stream:features xmlns="http://etherx.jabber.org/streams">
|
|
||||||
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
|
|
||||||
<mechanism>PLAIN</mechanism>
|
|
||||||
<mechanism>SCRAM-SHA-1</mechanism>
|
|
||||||
</mechanisms>
|
|
||||||
<authentication xmlns='urn:xmpp:sasl:2'>
|
|
||||||
<mechanism>PLAIN</mechanism>
|
|
||||||
<mechanism>SCRAM-SHA-1</mechanism>
|
|
||||||
</authentication>
|
|
||||||
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
|
|
||||||
<required/>
|
|
||||||
</bind>
|
|
||||||
</stream:features>''',
|
|
||||||
),
|
|
||||||
StanzaExpectation(
|
|
||||||
"<authenticate xmlns='urn:xmpp:sasl:2' mechanism='SCRAM-SHA-1'><user-agent id='d4565fa7-4d72-4749-b3d3-740edbf87770'><software>moxxmpp</software><device>PapaTutuWawa's awesome device</device></user-agent><initial-response>biwsbj11c2VyLHI9ZnlrbytkMmxiYkZnT05Sdjlxa3hkYXdM</initial-response></authenticate>",
|
|
||||||
'''
|
|
||||||
<challenge xmlns='urn:xmpp:sasl:2'>cj1meWtvK2QybGJiRmdPTlJ2OXFreGRhd0wzcmZjTkhZSlkxWlZ2V1ZzN2oscz1RU1hDUitRNnNlazhiZjkyLGk9NDA5Ng==</challenge>
|
|
||||||
''',
|
|
||||||
),
|
|
||||||
StanzaExpectation(
|
|
||||||
'<response xmlns="urn:xmpp:sasl:2">Yz1iaXdzLHI9ZnlrbytkMmxiYkZnT05Sdjlxa3hkYXdMM3JmY05IWUpZMVpWdldWczdqLHA9djBYOHYzQnoyVDBDSkdiSlF5RjBYK0hJNFRzPQ==</response>',
|
|
||||||
'<success xmlns="urn:xmpp:sasl:2"><additional-data>dj1ybUY5cHFWOFM3c3VBb1pXamE0ZEpSa0ZzS1E9</additional-data><authorization-identifier>user@server</authorization-identifier></success>',
|
|
||||||
),
|
|
||||||
StanzaExpectation(
|
|
||||||
"<iq xmlns='jabber:client' type='set' id='aaaa'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind' /></iq>",
|
|
||||||
'''
|
|
||||||
'<iq xmlns="jabber:client" type="result" id="a"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>polynomdivision@test.server/MU29eEZn</jid></bind></iq>',
|
|
||||||
''',
|
|
||||||
adjustId: true,
|
|
||||||
ignoreId: true,
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
final conn = XmppConnection(
|
|
||||||
TestingReconnectionPolicy(),
|
|
||||||
AlwaysConnectedConnectivityManager(),
|
|
||||||
ClientToServerNegotiator(),
|
|
||||||
fakeSocket,
|
|
||||||
)..connectionSettings = ConnectionSettings(
|
|
||||||
jid: JID.fromString('user@server'),
|
|
||||||
password: 'pencil',
|
|
||||||
);
|
|
||||||
await conn.registerManagers([
|
|
||||||
PresenceManager(),
|
|
||||||
RosterManager(TestingRosterStateManager('', [])),
|
|
||||||
DiscoManager([]),
|
|
||||||
]);
|
|
||||||
await conn.registerFeatureNegotiators([
|
|
||||||
SaslPlainNegotiator(),
|
|
||||||
SaslScramNegotiator(
|
|
||||||
10,
|
|
||||||
'n=user,r=fyko+d2lbbFgONRv9qkxdawL',
|
|
||||||
'fyko+d2lbbFgONRv9qkxdawL',
|
|
||||||
ScramHashType.sha1,
|
|
||||||
),
|
|
||||||
ResourceBindingNegotiator(),
|
|
||||||
Sasl2Negotiator()
|
|
||||||
..userAgent = const UserAgent(
|
|
||||||
id: 'd4565fa7-4d72-4749-b3d3-740edbf87770',
|
|
||||||
software: 'moxxmpp',
|
|
||||||
device: "PapaTutuWawa's awesome device",
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
final result = await conn.connect(
|
|
||||||
waitUntilLogin: true,
|
|
||||||
shouldReconnect: false,
|
|
||||||
enableReconnectOnSuccess: false,
|
|
||||||
);
|
|
||||||
expect(result.isType<NegotiatorError>(), false);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('Test SCRAM-SHA-1 SASL2 negotiation with an invalid signature',
|
test('Test SCRAM-SHA-1 SASL2 negotiation with an invalid signature',
|
||||||
() async {
|
() async {
|
||||||
final fakeSocket = StubTCPSocket([
|
final fakeSocket = StubTCPSocket([
|
||||||
|
Loading…
Reference in New Issue
Block a user