Skip to content

Commit 71de51c

Browse files
authored
Merge pull request #1422 from node-opcua/feat/AutoSecurityScheme
feat(core): add support for AutoSecurityScheme #1421
2 parents 813dee6 + 0eb7805 commit 71de51c

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

packages/core/src/thing-description.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,13 @@ export interface NullSchema extends BaseSchema {
134134
type: "null";
135135
}
136136

137-
// TODO AutoSecurityScheme
138137
/**
139138
* @deprecated This type is deprecated and will be removed in a future release.
140139
*/
141140
export type SecurityType =
142141
| NoSecurityScheme
143142
| BasicSecurityScheme
143+
| AutoSecurityScheme
144144
| DigestSecurityScheme
145145
| BearerSecurityScheme
146146
| APIKeySecurityScheme
@@ -165,6 +165,10 @@ export interface BasicSecurityScheme extends SecurityScheme, TDT.BasicSecuritySc
165165
scheme: "basic";
166166
}
167167

168+
export interface AutoSecurityScheme extends SecurityScheme, TDT.AutoSecurityScheme {
169+
scheme: "auto";
170+
}
171+
168172
export interface DigestSecurityScheme extends SecurityScheme, TDT.DigestSecurityScheme {
169173
scheme: "digest";
170174
}

packages/core/test/ClientTest.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,13 @@ import { Subscription } from "rxjs/Subscription";
2727

2828
import Servient from "../src/servient";
2929
import ConsumedThing from "../src/consumed-thing";
30-
import { AllOfSecurityScheme, Form, OneOfSecurityScheme, SecurityScheme } from "../src/thing-description";
30+
import {
31+
AllOfSecurityScheme,
32+
AutoSecurityScheme,
33+
Form,
34+
OneOfSecurityScheme,
35+
SecurityScheme,
36+
} from "../src/thing-description";
3137
import { ProtocolClient, ProtocolClientFactory } from "../src/protocol-interfaces";
3238
import { Content } from "../src/content";
3339
import { ContentSerdes } from "../src/content-serdes";
@@ -1045,4 +1051,27 @@ class WoTClientTest {
10451051
ct.ensureClientSecurity(pc, form);
10461052
}, /Combo SecurityScheme 'combo_without_oneOf_and_without_allof' is invalid/);
10471053
}
1054+
1055+
@test "with auto security scheme selection"() {
1056+
const ct = new ConsumedThing(WoTClientTest.servient);
1057+
ct.securityDefinitions = {
1058+
auto_sc: {
1059+
scheme: "auto",
1060+
},
1061+
};
1062+
ct.security = ["auto_sc"];
1063+
const pc = new TestProtocolClient();
1064+
const form: Form = {
1065+
href: "https://example.com/",
1066+
};
1067+
ct.ensureClientSecurity(pc, form);
1068+
expect(pc.securitySchemes.length).equals(1);
1069+
expect(pc.securitySchemes[0].scheme).equal("auto");
1070+
1071+
if (pc.securitySchemes[0].scheme === "auto") {
1072+
// casting to AutoSecurityScheme should not bother the IDE.
1073+
const autoScheme = pc.securitySchemes[0] as AutoSecurityScheme;
1074+
expect(autoScheme.scheme).to.equal("auto");
1075+
}
1076+
}
10481077
}

0 commit comments

Comments
 (0)