public CreateCommandDocumentResponse CreateCommandDocument(CreateCommandDocumentRequest request) { var tpl = GetCommandTemplate(request.Command); var checkreq = CheckForMandatoryParameters(tpl, request); if (!checkreq.Success) { return(checkreq); } var checktyp = CheckForCorrectTypes(tpl, request); if (!checktyp.Success) { return(checktyp); } var checkval = CheckForCorrectValues(tpl, request); if (!checkval.Success) { return(checkval); } return(new CreateCommandDocumentResponse() { Success = true, Document = BuildDocument(request) }); }
JObject BuildDocument(CreateCommandDocumentRequest request) { var message = new JObject(); message.Add("command", request.Command); if (request.Body.Count > 0) { message.Add("parameters", request.Body); } var document = new JObject(); document.Add("operation", "remoteManagement"); document.Add("ttl", new DateTimeOffset(DateTime.UtcNow.AddSeconds(request.TTL)).ToUnixTimeSeconds()); document.Add("message", message); return(document); }
private CreateCommandDocumentResponse CheckForCorrectValues(CommandTemplate tpl, CreateCommandDocumentRequest request) { if (tpl.Parameters == null) { return(new CreateCommandDocumentResponse() { Success = true }); } foreach (var item in tpl.Parameters) { if (String.IsNullOrEmpty(item.AcceptedValues)) { continue; } var accepted = item.AcceptedValues.Split(','); var value = request.Body[item.Name]; if (value != null) { if (!AreTypesEqual(value.Type, item.ParameterType)) { return(new CreateCommandDocumentResponse() { Success = false, ErrorText = $"Invalid type for attribute '{item.Name}' in 'parameters' object. '{value.Type}' instead of '{item.ParameterType}'" }); } if (Array.IndexOf(accepted, value.ToString()) == -1) { return(new CreateCommandDocumentResponse() { Success = false, ErrorText = $"Invalid value for attribute '{item.Name}' in 'parameters' object. '{value.ToString()}' instead of '{item.AcceptedValues}'" }); } } } return(new CreateCommandDocumentResponse() { Success = true }); }
private CreateCommandDocumentResponse CheckForCorrectTypes(CommandTemplate tpl, CreateCommandDocumentRequest request) { if (tpl.Parameters == null) { return(new CreateCommandDocumentResponse() { Success = true }); } foreach (var item in tpl.Parameters) { var value = request.Body[item.Name]; if (value != null) { if (!AreTypesEqual(value.Type, item.ParameterType)) { return(new CreateCommandDocumentResponse() { Success = false, ErrorText = $"Invalid type for attribute '{item.Name}' in 'parameters' object. '{value.Type}' instead of '{item.ParameterType}'" }); } } } return(new CreateCommandDocumentResponse() { Success = true }); }
private CreateCommandDocumentResponse CheckForMandatoryParameters(CommandTemplate tpl, CreateCommandDocumentRequest request) { if (tpl.Parameters == null) { return(new CreateCommandDocumentResponse() { Success = true }); } if (request.CheckRequired) { foreach (var item in tpl.Parameters) { if (item.Required) { var value = request.Body[item.Name]; if (value == null) { return new CreateCommandDocumentResponse() { Success = false, ErrorText = $"Required attribute '{item.Name}' in 'parameters' object missing." } } ; } } } return(new CreateCommandDocumentResponse() { Success = true }); }