Skip to content

Commit

Permalink
feat: add Basic Security Scheme
Browse files Browse the repository at this point in the history
  • Loading branch information
JKRhb committed Feb 3, 2022
1 parent 230d31b commit 8a21c16
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 0 deletions.
63 changes: 63 additions & 0 deletions lib/src/definitions/security/basic_security_scheme.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// 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 '../credentials/basic_credentials.dart';
import 'helper_functions.dart';
import 'security_scheme.dart';

/// Basic Authentication security configuration identified by the Vocabulary
/// Term `basic`.
class BasicSecurityScheme extends SecurityScheme {
@override
String get scheme => "basic";

/// Name for query, header, cookie, or uri parameters.
String? name;

/// Specifies the location of security authentication information.
late String in_ = "header";

final List<String> _parsedJsonFields = [];

@override
BasicCredentials? credentials;

/// Constructor.
BasicSecurityScheme(
{String? description,
String? proxy,
this.name,
String? in_,
Map<String, String>? descriptions})
: in_ = in_ ?? "header" {
this.description = description;
this.descriptions.addAll(descriptions ?? {});
}

dynamic _getJsonValue(Map<String, dynamic> json, String key) {
_parsedJsonFields.add(key);
return json[key];
}

/// Creates a [BasicSecurityScheme] from a [json] object.
BasicSecurityScheme.fromJson(Map<String, dynamic> json) {
_parsedJsonFields.addAll(parseSecurityJson(this, json));

final dynamic jsonIn = _getJsonValue(json, "in");
if (jsonIn is String) {
in_ = jsonIn;
_parsedJsonFields.add("in");
}

final dynamic jsonName = _getJsonValue(json, "name");
if (jsonName is String) {
name = jsonName;
_parsedJsonFields.add("name");
}

parseAdditionalFields(additionalFields, json, _parsedJsonFields);
}
}
6 changes: 6 additions & 0 deletions lib/src/definitions/thing_description.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'interaction_affordances/action.dart';
import 'interaction_affordances/event.dart';
import 'interaction_affordances/property.dart';
import 'link.dart';
import 'security/basic_security_scheme.dart';
import 'security/no_security_scheme.dart';
import 'security/security_scheme.dart';
import 'thing_model.dart';
Expand Down Expand Up @@ -218,6 +219,11 @@ class ThingDescription {
if (value is Map<String, dynamic>) {
SecurityScheme securityScheme;
switch (value["scheme"]) {
case "basic":
{
securityScheme = BasicSecurityScheme.fromJson(value);
break;
}
case "nosec":
{
securityScheme = NoSecurityScheme.fromJson(value);
Expand Down
9 changes: 9 additions & 0 deletions test/consumed_thing_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
// SPDX-License-Identifier: BSD-3-Clause

import 'package:dart_wot/dart_wot.dart';
import 'package:dart_wot/src/definitions/security/basic_security_scheme.dart';
import 'package:test/test.dart';

void main() {
Expand All @@ -28,6 +29,10 @@ void main() {
"securityDefinitions": {
"nosec_sc": {
"scheme": "nosec"
},
"basic_sc": {
"scheme": "basic",
"description": "Test"
}
},
"security": "nosec_sc",
Expand Down Expand Up @@ -112,6 +117,10 @@ void main() {
expect(eventAction.titles!["en"], "Overheating");
expect(eventAction.description, "Overheating of this Lamp");
expect(eventAction.descriptions!["en"], "Overheating of this Lamp");

expect(parsedTd.securityDefinitions["basic_sc"] is BasicSecurityScheme,
true);
expect(parsedTd.securityDefinitions["basic_sc"]?.description, "Test");
});
});
}

0 comments on commit 8a21c16

Please sign in to comment.