Skip to content

Commit d027ca8

Browse files
authored
Merge pull request #80 from eclipse-thingweb/security-provider
feat!: simplify credentials callback usage
2 parents f3e39bf + 5caeedf commit d027ca8

21 files changed

+164
-170
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ To do so, a Thing Description JSON string is first parsed and turned into a
4646
import 'package:dart_wot/dart_wot.dart';
4747
4848
Future<void> main(List<String> args) async {
49-
final CoapClientFactory coapClientFactory = CoapClientFactory(null);
49+
final CoapClientFactory coapClientFactory = CoapClientFactory();
5050
final servient = Servient()..addClientFactory(coapClientFactory);
5151
final wot = await servient.start();
5252

example/coaps_readproperty.dart

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,12 @@ PskCredentials? _pskCredentialsCallback(
3030

3131
Future<void> main(List<String> args) async {
3232
final CoapClientFactory coapClientFactory = CoapClientFactory(
33-
CoapConfig(
33+
coapConfig: const CoapConfig(
3434
dtlsCiphers: 'PSK-AES128-CCM8',
3535
),
36+
pskCredentialsCallback: _pskCredentialsCallback,
3637
);
37-
final securityProvider =
38-
ClientSecurityProvider(pskCredentialsCallback: _pskCredentialsCallback);
39-
final servient = Servient(clientSecurityProvider: securityProvider)
40-
..addClientFactory(coapClientFactory);
38+
final servient = Servient()..addClientFactory(coapClientFactory);
4139

4240
final wot = await servient.start();
4341

example/complex_example.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,13 @@ Future<BasicCredentials?> basicCredentialsCallback(
112112
}
113113

114114
Future<void> main() async {
115-
final coapConfig = CoapConfig(blocksize: 64);
116-
final CoapClientFactory coapClientFactory = CoapClientFactory(coapConfig);
117-
final HttpClientFactory httpClientFactory = HttpClientFactory();
118-
final securityProvider = ClientSecurityProvider(
119-
basicCredentialsCallback: basicCredentialsCallback,
115+
const coapConfig = CoapConfig(blocksize: 64);
116+
final CoapClientFactory coapClientFactory = CoapClientFactory(
117+
coapConfig: coapConfig,
120118
);
121-
final servient = Servient(clientSecurityProvider: securityProvider)
119+
final HttpClientFactory httpClientFactory =
120+
HttpClientFactory(basicCredentialsCallback: basicCredentialsCallback);
121+
final servient = Servient()
122122
..addClientFactory(coapClientFactory)
123123
..addClientFactory(httpClientFactory);
124124
final wot = await servient.start();

example/example.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,10 @@ Future<BasicCredentials?> basicCredentialsCallback(
2424

2525
Future<void> main(List<String> args) async {
2626
final CoapClientFactory coapClientFactory = CoapClientFactory();
27-
final HttpClientFactory httpClientFactory = HttpClientFactory();
27+
final HttpClientFactory httpClientFactory =
28+
HttpClientFactory(basicCredentialsCallback: basicCredentialsCallback);
2829
final MqttClientFactory mqttClientFactory = MqttClientFactory();
29-
final servient = Servient(
30-
clientSecurityProvider: ClientSecurityProvider(
31-
basicCredentialsCallback: basicCredentialsCallback,
32-
),
33-
)
30+
final servient = Servient()
3431
..addClientFactory(coapClientFactory)
3532
..addClientFactory(httpClientFactory)
3633
..addClientFactory(mqttClientFactory);

example/http_basic_authentication.dart

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,9 @@ Future<BasicCredentials?> basicCredentialsCallback(
6868
/// Illustrates the usage of both the basic and the automatic security scheme,
6969
/// with a server supporting basic authentication.
7070
Future<void> main(List<String> args) async {
71-
final HttpClientFactory httpClientFactory = HttpClientFactory();
72-
final securityProvider = ClientSecurityProvider(
73-
basicCredentialsCallback: basicCredentialsCallback,
74-
);
75-
final servient = Servient(clientSecurityProvider: securityProvider)
76-
..addClientFactory(httpClientFactory);
71+
final HttpClientFactory httpClientFactory =
72+
HttpClientFactory(basicCredentialsCallback: basicCredentialsCallback);
73+
final servient = Servient()..addClientFactory(httpClientFactory);
7774
final wot = await servient.start();
7875

7976
final thingDescription = ThingDescription(thingDescriptionJson);

lib/core.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ export 'src/core/credentials/ace_credentials.dart';
1717
export 'src/core/credentials/apikey_credentials.dart';
1818
export 'src/core/credentials/basic_credentials.dart';
1919
export 'src/core/credentials/bearer_credentials.dart';
20+
export 'src/core/credentials/callbacks.dart';
2021
export 'src/core/credentials/credentials.dart';
2122
export 'src/core/credentials/digest_credentials.dart';
2223
export 'src/core/credentials/oauth2_credentials.dart';
2324
export 'src/core/credentials/psk_credentials.dart';
2425
export 'src/core/protocol_interfaces/protocol_client.dart';
2526
export 'src/core/protocol_interfaces/protocol_client_factory.dart';
2627
export 'src/core/protocol_interfaces/protocol_server.dart';
27-
export 'src/core/security_provider.dart';
2828
export 'src/core/servient.dart';

lib/src/binding_coap/coap_client.dart

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ import 'package:dcaf/dcaf.dart';
1313

1414
import '../core/content.dart';
1515
import '../core/credentials/ace_credentials.dart';
16+
import '../core/credentials/callbacks.dart';
1617
import '../core/credentials/psk_credentials.dart';
1718
import '../core/protocol_interfaces/protocol_client.dart';
18-
import '../core/security_provider.dart';
1919
import '../definitions/form.dart';
2020
import '../definitions/operation_type.dart';
2121
import '../scripting_api/subscription.dart';
@@ -52,11 +52,10 @@ class _InternalCoapConfig extends CoapConfigDefault {
5252

5353
coap.PskCredentialsCallback? _createPskCallback(
5454
Uri uri,
55-
Form? form,
56-
ClientSecurityProvider? clientSecurityProvider,
57-
) {
55+
Form? form, {
56+
ClientPskCallback? pskCredentialsCallback,
57+
}) {
5858
final usesPskScheme = form?.usesPskScheme ?? false;
59-
final pskCredentialsCallback = clientSecurityProvider?.pskCredentialsCallback;
6059

6160
if (!usesPskScheme || pskCredentialsCallback == null) {
6261
return null;
@@ -82,11 +81,19 @@ coap.PskCredentialsCallback? _createPskCallback(
8281
/// A [ProtocolClient] for the Constrained Application Protocol (CoAP).
8382
final class CoapClient implements ProtocolClient {
8483
/// Creates a new [CoapClient] based on an optional [CoapConfig].
85-
CoapClient([this._coapConfig, this._clientSecurityProvider]);
84+
CoapClient({
85+
CoapConfig? coapConfig,
86+
ClientPskCallback? pskCredentialsCallback,
87+
AceSecurityCallback? aceSecurityCallback,
88+
}) : _pskCredentialsCallback = pskCredentialsCallback,
89+
_aceSecurityCallback = aceSecurityCallback,
90+
_coapConfig = coapConfig;
8691

8792
final CoapConfig? _coapConfig;
8893

89-
final ClientSecurityProvider? _clientSecurityProvider;
94+
final ClientPskCallback? _pskCredentialsCallback;
95+
96+
final AceSecurityCallback? _aceSecurityCallback;
9097

9198
Future<coap.CoapRequest> _createRequest(
9299
coap.RequestMethod requestMethod,
@@ -153,9 +160,12 @@ final class CoapClient implements ProtocolClient {
153160
}) async {
154161
final coapClient = coap.CoapClient(
155162
uri,
156-
config: _InternalCoapConfig(_coapConfig ?? CoapConfig()),
157-
pskCredentialsCallback:
158-
_createPskCallback(uri, form, _clientSecurityProvider),
163+
config: _InternalCoapConfig(_coapConfig ?? const CoapConfig()),
164+
pskCredentialsCallback: _createPskCallback(
165+
uri,
166+
form,
167+
pskCredentialsCallback: _pskCredentialsCallback,
168+
),
159169
);
160170

161171
final request = await _createRequest(
@@ -169,8 +179,7 @@ final class CoapClient implements ProtocolClient {
169179
);
170180

171181
final creationHint = await _obtainAceCreationHintFromForm(form);
172-
final aceCredentialsCallback =
173-
_clientSecurityProvider?.aceCredentialsCallback;
182+
final aceCredentialsCallback = _aceSecurityCallback;
174183

175184
final coap.CoapResponse response;
176185

@@ -236,7 +245,7 @@ final class CoapClient implements ProtocolClient {
236245

237246
final coapClient = coap.CoapClient(
238247
creationHintUri,
239-
config: _InternalCoapConfig(_coapConfig ?? CoapConfig()),
248+
config: _InternalCoapConfig(_coapConfig ?? const CoapConfig()),
240249
);
241250

242251
final response = await coapClient.send(request);
@@ -421,7 +430,7 @@ final class CoapClient implements ProtocolClient {
421430

422431
final coapClient = coap.CoapClient(
423432
form.resolvedHref,
424-
config: _InternalCoapConfig(_coapConfig ?? CoapConfig()),
433+
config: _InternalCoapConfig(_coapConfig ?? const CoapConfig()),
425434
);
426435

427436
if (subprotocol == CoapSubprotocol.observe) {

lib/src/binding_coap/coap_client_factory.dart

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,43 @@
44
//
55
// SPDX-License-Identifier: BSD-3-Clause
66

7+
import '../core/credentials/callbacks.dart';
78
import '../core/protocol_interfaces/protocol_client.dart';
89
import '../core/protocol_interfaces/protocol_client_factory.dart';
9-
import '../core/security_provider.dart';
1010
import 'coap_client.dart';
1111
import 'coap_config.dart';
1212

1313
/// A [ProtocolClientFactory] that produces CoAP clients.
1414
final class CoapClientFactory implements ProtocolClientFactory {
1515
/// Creates a new [CoapClientFactory] based on an optional [CoapConfig].
16-
CoapClientFactory([this.coapConfig]);
17-
18-
@override
19-
Set<String> get schemes => {'coap', 'coaps'};
16+
CoapClientFactory({
17+
this.coapConfig,
18+
ClientPskCallback? pskCredentialsCallback,
19+
AceSecurityCallback? aceSecurityCallback,
20+
}) : _pskCredentialsCallback = pskCredentialsCallback,
21+
_aceSecurityCallback = aceSecurityCallback;
2022

2123
/// The [CoapConfig] used to configure new clients.
2224
final CoapConfig? coapConfig;
2325

26+
final ClientPskCallback? _pskCredentialsCallback;
27+
28+
final AceSecurityCallback? _aceSecurityCallback;
29+
30+
@override
31+
Set<String> get schemes => {'coap', 'coaps'};
32+
2433
@override
2534
bool destroy() {
2635
return true;
2736
}
2837

2938
@override
30-
ProtocolClient createClient([
31-
ClientSecurityProvider? clientSecurityProvider,
32-
]) =>
33-
CoapClient(coapConfig, clientSecurityProvider);
39+
ProtocolClient createClient() => CoapClient(
40+
coapConfig: coapConfig,
41+
pskCredentialsCallback: _pskCredentialsCallback,
42+
aceSecurityCallback: _aceSecurityCallback,
43+
);
3444

3545
@override
3646
bool init() {

lib/src/binding_coap/coap_config.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@
66

77
import 'dart:typed_data';
88

9+
import 'package:meta/meta.dart';
10+
911
/// Allows for configuring the behavior of CoAP clients and servers.
12+
@immutable
1013
class CoapConfig {
1114
/// Creates a new [CoapConfig] object.
12-
CoapConfig({
15+
const CoapConfig({
1316
this.port = 5683,
1417
this.securePort = 5684,
1518
this.blocksize,

lib/src/binding_coap/coap_server.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
//
55
// SPDX-License-Identifier: BSD-3-Clause
66

7+
import '../core/credentials/callbacks.dart';
78
import '../core/protocol_interfaces/protocol_server.dart';
8-
import '../core/security_provider.dart';
99
import '../scripting_api/exposed_thing.dart';
1010
import 'coap_config.dart';
1111

0 commit comments

Comments
 (0)