Exemplo n.º 1
0
        public async Task <IActionResult> ConfigureJobProvider(int index = 0, int id = 0)
        {
            CreateJob createJob = HttpContext.Session.GetObject <CreateJob>(JOB_STORAGE_KEY);

            if (createJob == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            CreateJobProviderModel model = null;

            Provider provider = await providerRepository.Get(createJob.ProviderIDs[index]);

            Dictionary <int, object> values = new Dictionary <int, object>();

            if (id > 0)
            {
                model    = CreateModel <ModifyJobProviderModel>("Modify Schedule");
                model.ID = id;

                IEnumerable <ProviderInstanceProperty> propertyValues = await providerRepository.GetProviderValues(id);

                foreach (ProviderInstanceProperty propertyValue in propertyValues)
                {
                    object parsedValue = await providerMappingService.GetPresentationValue(propertyValue);

                    values.Add(propertyValue.Property.ID, parsedValue);
                }
            }
            else
            {
                model = CreateModel <CreateJobProviderModel>("Create Schedule");
            }

            model.CurrentIndex = index;
            model.ProviderName = provider.Name;
            model.Properties   = provider.Properties.Select(x => new ProviderPropertyModel(x.Name, x.Description, providerMappingService.GetTemplateFromType(x.Type), values.ContainsKey(x.ID) ? values[x.ID] : null, x.Attributes?.ToDictionary(k => k.Name.ToString(), v => v.Value))).ToList();

            return(View(model));
        }
        public async Task <IActionResult> GetFields(int providerID, int?instanceID)
        {
            try
            {
                Provider provider;
                Dictionary <string, string> propertyValues = new Dictionary <string, string>();
                if (instanceID.HasValue)
                {
                    ProviderInstance providerInstance = await providerRepository.GetInstance(instanceID.Value);

                    provider = providerInstance.Provider;

                    foreach (ProviderInstanceProperty property in providerInstance.Values)
                    {
                        try
                        {
                            object value = await providerMappingService.GetPresentationValue(property);

                            propertyValues.Add(property.Property.TypeName, value?.ToString());
                        }catch { }
                    }
                }
                else
                {
                    provider = await providerRepository.Get(providerID);
                }

                if (provider == null)
                {
                    return(NotFound());
                }

                List <ProviderFieldModel> fields = new List <ProviderFieldModel>();
                foreach (ProviderProperty property in provider.Properties)
                {
                    ProviderFieldModel fieldModel = new ProviderFieldModel();
                    fieldModel.ID    = property.TypeName;
                    fieldModel.Name  = property.Name;
                    fieldModel.Type  = property.Type.ToString().ToLowerInvariant();
                    fieldModel.Value = propertyValues.ContainsKey(property.TypeName) ? propertyValues[property.TypeName] : null;

                    if (property.Attributes.Any(a => a.Name == PropertyAttribute.Password))
                    {
                        fieldModel.Type = "password";
                    }

                    if (property.Type == PropertyType.Authentication && property.Attributes.Any(a => a.Name == PropertyAttribute.GenericParameter))
                    {
                        fieldModel.Type = "dropdown";

                        string genericType = HttpUtility.UrlEncode(property.Attributes.FirstOrDefault(a => a.Name == PropertyAttribute.GenericParameter).Value);
                        fieldModel.DataSource = $"/api/authentication?type={genericType}";
                    }

                    fields.Add(fieldModel);
                }

                return(Ok(fields));
            }
            catch (Exception ex)
            {
                logger.LogError(ex, $"Unable to fetch all fields for provider '{providerID}' (Instance: {instanceID}).");
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }