diff --git a/build.cake b/build.cake index aaa176d..247357f 100644 --- a/build.cake +++ b/build.cake @@ -4,14 +4,16 @@ void RunTargetInContainer(string target, string arguments, params string[] includeEnvironmentVariables) { var cwd = MakeAbsolute(Directory("./")); - var env = includeEnvironmentVariables.ToDictionary(key => key, key => EnvironmentVariable(key)); + var env = includeEnvironmentVariables + .Select(key => new { Key = key, Value = EnvironmentVariable(key) }) + .ToArray(); var missingEnv = env.Where(x => string.IsNullOrEmpty(x.Value)).ToList(); if (missingEnv.Any()) { throw new Exception($"The following environment variables are required to be set: {string.Join(", ", missingEnv.Select(x => x.Key))}"); } - var settings = new DockerRunSettings + var settings = new DockerContainerRunSettings { Volume = new string[] { $"{cwd}:/artifacts"}, Workdir = "/artifacts", diff --git a/src/CloudMQTT.Client.Tests/WhenGettingUsers.cs b/src/CloudMQTT.Client.Tests/WhenGettingUsers.cs index e257f76..03db166 100644 --- a/src/CloudMQTT.Client.Tests/WhenGettingUsers.cs +++ b/src/CloudMQTT.Client.Tests/WhenGettingUsers.cs @@ -33,9 +33,10 @@ public async Task ItShouldCreateAndDeleteUserSuccessfully() var expectedRule = new Rule { + RuleType = RuleType.Topic, Read = true, - Topic = "test", - Username = expectedUser.Username, + Pattern = "test", + User = expectedUser.Username, Write = true, }; diff --git a/src/CloudMQTT.Client/ICloudMqttApi.cs b/src/CloudMQTT.Client/ICloudMqttApi.cs index ccf7527..a203b22 100644 --- a/src/CloudMQTT.Client/ICloudMqttApi.cs +++ b/src/CloudMQTT.Client/ICloudMqttApi.cs @@ -25,7 +25,7 @@ public interface ICloudMqttApi Task DeleteUser([Path]string username); [Get("acl")] - Task> GetRules(); + Task GetRules(); [Post("acl")] [Header("Content-Type", "application/json")] diff --git a/src/CloudMQTT.Client/Rule.cs b/src/CloudMQTT.Client/Rule.cs index 403dbff..9a5d28b 100644 --- a/src/CloudMQTT.Client/Rule.cs +++ b/src/CloudMQTT.Client/Rule.cs @@ -1,11 +1,14 @@ +using Newtonsoft.Json; + namespace CloudMQTT.Client { public class Rule { - public string Username { get; set; } - public string Topic { get; set; } + [JsonProperty("type")] + public RuleType RuleType { get; set; } + public string User { get; set; } + public string Pattern { get; set; } public bool Read { get; set; } public bool Write { get; set; } - } } diff --git a/src/CloudMQTT.Client/RuleReference.cs b/src/CloudMQTT.Client/RuleReference.cs index 15642f5..781298c 100644 --- a/src/CloudMQTT.Client/RuleReference.cs +++ b/src/CloudMQTT.Client/RuleReference.cs @@ -1,14 +1,19 @@ +using Newtonsoft.Json; + namespace CloudMQTT.Client { public class RuleReference { - public string Username { get; set; } - public string Topic { get; set; } + [JsonProperty("type")] + public RuleType RuleType { get; set; } + public string User { get; set; } + public string Pattern { get; set; } public static implicit operator RuleReference(Rule rule) => new RuleReference() { - Topic = rule.Topic, - Username = rule.Username, + RuleType = rule.RuleType, + Pattern = rule.Pattern, + User = rule.User, }; } } diff --git a/src/CloudMQTT.Client/RuleType.cs b/src/CloudMQTT.Client/RuleType.cs new file mode 100644 index 0000000..5f62b2c --- /dev/null +++ b/src/CloudMQTT.Client/RuleType.cs @@ -0,0 +1,16 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.Runtime.Serialization; + +namespace CloudMQTT.Client +{ + [JsonConverter(typeof(StringEnumConverter))] + public enum RuleType + { + [EnumMember(Value = "topic")] + Topic, + + [EnumMember(Value = "pattern")] + Pattern + } +} diff --git a/src/CloudMQTT.Client/RulesResponse.cs b/src/CloudMQTT.Client/RulesResponse.cs new file mode 100644 index 0000000..a820f40 --- /dev/null +++ b/src/CloudMQTT.Client/RulesResponse.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace CloudMQTT.Client +{ + public class RulesResponse + { + public List Items { get; set; } + } +} diff --git a/src/CloudMQTT.Client/UserRule.cs b/src/CloudMQTT.Client/UserRule.cs index 3d2607c..59400ac 100644 --- a/src/CloudMQTT.Client/UserRule.cs +++ b/src/CloudMQTT.Client/UserRule.cs @@ -1,14 +1,17 @@ +using Newtonsoft.Json; + namespace CloudMQTT.Client { public class UserRule { - public string Topic { get; set; } + [JsonProperty("topic")] + public string Pattern { get; set; } public bool Read { get; set; } public bool Write { get; set; } public static implicit operator UserRule(Rule rule) => new UserRule { - Topic = rule.Topic, + Pattern = rule.Pattern, Read = rule.Read, Write = rule.Write, };