2using System.Collections.Generic;
3using System.Security.Cryptography.X509Certificates;
4using System.Threading.Tasks;
6using System.Windows.Controls;
15 private readonly Dictionary<string, X509Certificate2> certificates =
new Dictionary<string, X509Certificate2>();
16 private string[] serviceTokens =
null;
17 private string[] deviceTokens =
null;
18 private string[] userTokens =
null;
19 private string nodeId =
string.Empty;
20 private string sourceId =
string.Empty;
21 private string partition =
string.Empty;
29 public string[] ServiceTokens
31 get => this.serviceTokens;
32 set => this.serviceTokens = value;
36 public string[] DeviceTokens
38 get => this.deviceTokens;
39 set => this.deviceTokens = value;
43 public string[] UserTokens
45 get => this.userTokens;
46 set => this.userTokens = value;
49 [DefaultValueStringEmpty]
53 set => this.nodeId = value;
56 [DefaultValueStringEmpty]
57 public string SourceId
60 set => this.sourceId = value;
63 [DefaultValueStringEmpty]
64 public string Partition
66 get => this.partition;
67 set => this.partition = value;
75 return !
string.IsNullOrEmpty(this.nodeId) || !
string.IsNullOrEmpty(this.sourceId) || !
string.IsNullOrEmpty(this.partition);
81 return new ThingReference(this.nodeId, this.sourceId, this.partition);
84 protected void AddNodeInfo(StackPanel Details)
88 if (!
string.IsNullOrEmpty(this.NodeId))
89 this.AddKeyValue(Details,
"Node ID", this.NodeId);
91 if (!
string.IsNullOrEmpty(this.SourceId))
92 this.AddKeyValue(Details,
"Source ID", this.SourceId);
94 if (!
string.IsNullOrEmpty(this.Partition))
95 this.AddKeyValue(Details,
"Partition", this.Partition);
99 protected void AddTokens(StackPanel Details,
ProvisioningClient Client, RoutedEventHandler OnYes, RoutedEventHandler OnNo)
101 this.AddTokens(Details, Client, this.ServiceTokens, OnYes, OnNo, OperationRange.ServiceToken);
102 this.AddTokens(Details, Client, this.UserTokens, OnYes, OnNo, OperationRange.UserToken);
103 this.AddTokens(Details, Client, this.DeviceTokens, OnYes, OnNo, OperationRange.DeviceToken);
106 private void AddTokens(StackPanel Details,
ProvisioningClient Client,
string[] Tokens, RoutedEventHandler OnYes, RoutedEventHandler OnNo, OperationRange Range)
108 if (!(Tokens is
null))
110 X509Certificate2 Certificate;
112 foreach (
string Token
in Tokens)
114 lock (this.certificates)
116 if (!this.certificates.TryGetValue(Token, out Certificate))
120 if (!(Certificate is
null))
121 this.AddToken(Details, Token, Certificate, OnYes, OnNo, Range);
128 string Token2 = (string)e.State;
130 lock (this.certificates)
132 this.certificates[Token2] = e.Certificate;
137 this.AddToken(Details, Token2, e.Certificate, OnYes, OnNo, Range);
138 return Task.CompletedTask;
142 return Task.CompletedTask;
150 private void AddToken(StackPanel Details,
string Token, X509Certificate2 Certificate, RoutedEventHandler OnYes, RoutedEventHandler OnNo, OperationRange Range)
154 if (!Certificate.Verify())
157 Details.Children.Add(Button =
new Button()
159 Margin =
new Thickness(0, 6, 0, 6),
160 Content =
"Yes, for " + Certificate.FriendlyName,
161 Tag =
new object[] { Token, Range }
164 Button.Click += OnYes;
166 Details.Children.Add(Button =
new Button()
168 Margin =
new Thickness(0, 6, 0, 6),
169 Content =
"No, for " + Certificate.FriendlyName,
170 Tag =
new object[] { Token, Range }
173 Button.Click += OnNo;
Interaction logic for xaml
Implements an XMPP provisioning client interface.
Task GetCertificate(string Token, EventHandlerAsync< CertificateEventArgs > Callback, object State)
Gets the certificate the corresponds to a token. This certificate can be used to identify services,...
Contains a reference to a thing