Skip to content

Commit

Permalink
merge: 'credentials-provider' into 'main'
Browse files Browse the repository at this point in the history
feat!: rework Form augmentation, direct discovery, and credentials provision

Closes #24 and #23

See merge request namib-master/libraries/dart_wot!51
  • Loading branch information
JKRhb committed May 30, 2022
2 parents cf6b62b + b285bc1 commit d53b900
Show file tree
Hide file tree
Showing 42 changed files with 852 additions and 603 deletions.
32 changes: 32 additions & 0 deletions example/coap_discovery.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// Copyright 2022 The NAMIB Project Developers. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
// SPDX-License-Identifier: BSD-3-Clause

import 'package:dart_wot/dart_wot.dart';

const propertyName = "string";

Future<void> main(List<String> args) async {
final servient = Servient()..addClientFactory(CoapClientFactory());

final wot = await servient.start();

await for (final thingDescription in wot.discover(ThingFilter(
url: Uri.parse("coap://plugfest.thingweb.io:5683/testthing"),
method: DiscoveryMethod.direct))) {
final consumedThing = await wot.consume(thingDescription);

try {
await consumedThing.writeProperty(propertyName, "Hello World!");
var value = await consumedThing.readProperty(propertyName);
print(value);
await consumedThing.writeProperty(propertyName, "Bye World!");
value = await consumedThing.readProperty(propertyName);
print(value);
} on Exception catch (e) {
print(e);
}
}
}
25 changes: 17 additions & 8 deletions example/coaps_readproperty.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,26 @@

import 'package:dart_wot/dart_wot.dart';

/// Matches [PskCredentials] by hostname and URI scheme.
final Map<Uri, PskCredentials> _pskCredentialsStore = {
Uri(host: "californium.eclipseprojects.io", scheme: "coaps"):
PskCredentials(identity: "Client_identity", preSharedKey: "secretPSK")
};

PskCredentials? _pskCredentialsCallback(
Uri uri, Form? form, String? identityHint) {
final key = Uri(scheme: uri.scheme, host: uri.host);

return _pskCredentialsStore[key];
}

Future<void> main(List<String> args) async {
final CoapClientFactory coapClientFactory =
CoapClientFactory(CoapConfig(useTinyDtls: true));
final servient = Servient()
..addClientFactory(coapClientFactory)
..addCredentials(
"coaps://californium.eclipseprojects.io",
"psk_sc",
PskCredentials("secretPSK"
// ,"Client_identity" // Identity can also be set in Credentials
));
final securityProvider =
ClientSecurityProvider(pskCredentialsCallback: _pskCredentialsCallback);
final servient = Servient(clientSecurityProvider: securityProvider)
..addClientFactory(coapClientFactory);

final wot = await servient.start();

Expand Down
55 changes: 35 additions & 20 deletions example/complex_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ final thingDescriptionJson = '''
"href": "/.well-known/core"
},
{
"href": "/hello",
"href": "coap://californium.eclipseprojects.io/obs",
"op": ["observeproperty", "unobserveproperty"]
}
]
Expand Down Expand Up @@ -95,15 +95,25 @@ final thingDescriptionJson = '''
}
''';

final Map<String, BasicCredentials> basicCredentials = {
"urn:test": BasicCredentials("username", "password")
};

Future<BasicCredentials?> basicCredentialsCallback(Uri uri, Form? form) async {
final id = form?.interactionAffordance.thingDescription.identifier;

return basicCredentials[id];
}

Future<void> main() async {
final coapConfig = CoapConfig(blocksize: 64);
final CoapClientFactory coapClientFactory = CoapClientFactory(coapConfig);
final HttpClientFactory httpClientFactory = HttpClientFactory();
final servient = Servient()
final securityProvider = ClientSecurityProvider(
basicCredentialsCallback: basicCredentialsCallback);
final servient = Servient(clientSecurityProvider: securityProvider)
..addClientFactory(coapClientFactory)
..addClientFactory(httpClientFactory)
..addCredentials(
"urn:test", "basic_sc", BasicCredentials("username", "password"));
..addClientFactory(httpClientFactory);
final wot = await servient.start();

final thingDescription = ThingDescription(thingDescriptionJson);
Expand All @@ -123,26 +133,31 @@ Future<void> main() async {

Subscription? subscription;

// TODO(JKRhb): Turn into a "real" observation example.
int observationCounter = 0;
subscription = await consumedThing.observeProperty("status", (data) async {
final value = await data.value();
print(value);
await subscription?.stop();
if (observationCounter++ == 3) {
print("Done! Cancelling subscription.");
await subscription?.stop();
}

if (subscription?.active ?? false) {
final value = await data.value();
print("Received observation data: $value");
}
});

await consumedThing.readProperty("test");

final thingDiscovery = wot.discover(ThingFilter(
url: "https://raw.githubusercontent.com/w3c/wot-testing"
"/b07fa6124bca7796e6ca752a3640fac264d3bcbc/events/2021.03.Online/TDs"
"/Oracle/oracle-Festo_Shared.td.jsonld",
method: DiscoveryMethod.direct));
final thingUri = Uri.parse("https://raw.githubusercontent.com/w3c/wot-testing"
"/b07fa6124bca7796e6ca752a3640fac264d3bcbc/events/2021.03.Online/TDs"
"/Oracle/oracle-Festo_Shared.td.jsonld");

final discoveredThingDescription = await thingDiscovery.next();
thingDiscovery.stop();
final consumedDiscoveredThing = await wot.consume(discoveredThingDescription);
final thingDiscovery =
wot.discover(ThingFilter(url: thingUri, method: DiscoveryMethod.direct));

print("The title of the fetched TD is "
"${consumedDiscoveredThing.thingDescription.title}.");
print("Done!");
await for (final thingDescription in thingDiscovery) {
final consumedDiscoveredThing = await wot.consume(thingDescription);
print("The title of the fetched TD is "
"${consumedDiscoveredThing.thingDescription.title}.");
}
}
20 changes: 19 additions & 1 deletion example/example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ import 'package:dart_wot/dart_wot.dart';

Future<void> main(List<String> args) async {
final CoapClientFactory coapClientFactory = CoapClientFactory();
final servient = Servient()..addClientFactory(coapClientFactory);
final HttpClientFactory httpClientFactory = HttpClientFactory();
final servient = Servient()
..addClientFactory(coapClientFactory)
..addClientFactory(httpClientFactory);
final wot = await servient.start();

final thingDescriptionJson = '''
Expand Down Expand Up @@ -39,4 +42,19 @@ Future<void> main(List<String> args) async {
final status = await consumedThing.readProperty("status");
final value = await status.value();
print(value);

final thingUri = Uri.parse("https://raw.githubusercontent.com/w3c/wot-testing"
"/b07fa6124bca7796e6ca752a3640fac264d3bcbc/events/2021.03.Online/TDs"
"/Oracle/oracle-Festo_Shared.td.jsonld");

final thingDiscovery =
wot.discover(ThingFilter(url: thingUri, method: DiscoveryMethod.direct));

await for (final thingDescription in thingDiscovery) {
final consumedDiscoveredThing = await wot.consume(thingDescription);
print("The title of the fetched TD is "
"${consumedDiscoveredThing.thingDescription.title}.");
}

print("Done!");
}
8 changes: 8 additions & 0 deletions lib/core.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,15 @@
export 'src/core/codecs/content_codec.dart';
export 'src/core/content_serdes.dart';
export 'src/core/credentials/apikey_credentials.dart';
export 'src/core/credentials/basic_credentials.dart';
export 'src/core/credentials/bearer_credentials.dart';
export 'src/core/credentials/credentials.dart';
export 'src/core/credentials/digest_credentials.dart';
export 'src/core/credentials/oauth2_credentials.dart';
export 'src/core/credentials/psk_credentials.dart';
export 'src/core/protocol_interfaces/protocol_client.dart';
export 'src/core/protocol_interfaces/protocol_client_factory.dart';
export 'src/core/protocol_interfaces/protocol_server.dart';
export 'src/core/security_provider.dart';
export 'src/core/servient.dart';
8 changes: 1 addition & 7 deletions lib/definitions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,6 @@
///
/// [spec link]: https://www.w3.org/TR/wot-thing-description11/
export 'src/definitions/credentials/apikey_credentials.dart';
export 'src/definitions/credentials/basic_credentials.dart';
export 'src/definitions/credentials/bearer_credentials.dart';
export 'src/definitions/credentials/credentials.dart';
export 'src/definitions/credentials/digest_credentials.dart';
export 'src/definitions/credentials/oauth2_credentials.dart';
export 'src/definitions/credentials/psk_credentials.dart';
export 'src/definitions/form.dart';
export 'src/definitions/thing_description.dart';
export 'src/definitions/thing_model.dart';
Loading

0 comments on commit d53b900

Please sign in to comment.