Skip to content

Commit

Permalink
feat: add ApiKeySecurityScheme and Credentials
Browse files Browse the repository at this point in the history
  • Loading branch information
JKRhb committed Feb 3, 2022
1 parent ef85dd7 commit f48db57
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/definitions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
///
/// [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/credentials.dart';
export 'src/definitions/credentials/digest_credentials.dart';
Expand Down
5 changes: 5 additions & 0 deletions lib/src/core/consumed_thing.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@

import '../../scripting_api.dart' as scripting_api;
import '../../scripting_api.dart' hide ConsumedThing, InteractionOutput;
import '../definitions/credentials/apikey_credentials.dart';
import '../definitions/credentials/basic_credentials.dart';
import '../definitions/credentials/credentials.dart';
import '../definitions/credentials/digest_credentials.dart';
import '../definitions/credentials/psk_credentials.dart';
import '../definitions/data_schema.dart';
import '../definitions/form.dart';
import '../definitions/interaction_affordances/interaction_affordance.dart';
import '../definitions/security/apikey_security_scheme.dart';
import '../definitions/security/basic_security_scheme.dart';
import '../definitions/security/digest_security_scheme.dart';
import '../definitions/security/psk_security_scheme.dart';
Expand Down Expand Up @@ -80,6 +82,9 @@ class ConsumedThing implements scripting_api.ConsumedThing {
} else if (securityDefinition is DigestSecurityScheme &&
credentials is DigestCredentials) {
securityDefinition.credentials = credentials;
} else if (securityDefinition is ApiKeySecurityScheme &&
credentials is ApiKeyCredentials) {
securityDefinition.credentials = credentials;
}
}
}
Expand Down
16 changes: 16 additions & 0 deletions lib/src/definitions/credentials/apikey_credentials.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// 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.dart';

/// [Credentials] used for the `APIKeySecurityScheme`.
class ApiKeyCredentials extends Credentials {
/// The [apiKey] associated with these [ApiKeyCredentials].
String apiKey;

/// Constructor.
ApiKeyCredentials(this.apiKey) : super("apikey");
}
63 changes: 63 additions & 0 deletions lib/src/definitions/security/apikey_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/apikey_credentials.dart';
import 'helper_functions.dart';
import 'security_scheme.dart';

/// API key authentication security configuration identified by the Vocabulary
/// Term `apikey`.
class ApiKeySecurityScheme extends SecurityScheme {
@override
String get scheme => "apikey";

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

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

final List<String> _parsedJsonFields = [];

@override
ApiKeyCredentials? credentials;

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

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

/// Creates a [ApiKeySecurityScheme] from a [json] object.
ApiKeySecurityScheme.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/apikey_security_scheme.dart';
import 'security/basic_security_scheme.dart';
import 'security/digest_security_scheme.dart';
import 'security/no_security_scheme.dart';
Expand Down Expand Up @@ -241,6 +242,11 @@ class ThingDescription {
securityScheme = DigestSecurityScheme.fromJson(value);
break;
}
case "apikey":
{
securityScheme = ApiKeySecurityScheme.fromJson(value);
break;
}
default:
continue;
}
Expand Down

0 comments on commit f48db57

Please sign in to comment.