Esempio n. 1
0
        public TestServiceLocator()
        {
            var _connectionStringSettings = new ASConfiguration()
            {
                DataProvider     = TestFixture.ProviderName,
                ConnectionString = TestFixture.ConnectionString
            };

            _configFactory = () =>
            {
                return(_connectionStringSettings);
            };
        }
        public JsonNetResult CanConnectDb(string provider, string connectionString)
        {
            ASConfiguration config = new ASConfiguration();

            config.ConnectionString = connectionString;
            config.DataProvider     = provider;
            string connectionResult = _configurationService.CanConnectDatabase(config);

            if (!string.IsNullOrEmpty(connectionResult))
            {
                connectionResult = string.Format(this._resourceManager.GetString("Installer_CannotConnectDatabase"),
                                                 connectionResult);
            }

            return(new JsonNetResult(connectionResult));
        }
Esempio n. 3
0
        public ActionResult TestSMTPConnection(EMailSettingModel model)
        {
            ASConfiguration config = new ASConfiguration();

            config.SMTPDefaultCredentials = model.DefaultCredentials;
            config.SMTPEnableSsl          = model.EnableSsl;
            config.SMTPFromAddress        = model.FromAddress;
            config.SMTPFromDisplayName    = model.FromDisplayName;
            config.SMTPHost     = model.Host;
            config.SMTPName     = model.Name;
            config.SMTPPassword = model.Password;
            config.SMTPPort     = model.Port;
            config.SMTPTimeOut  = model.TimeOut;
            config.SMTPUserName = model.UserName;

            return(new JsonNetResult(_configurationService.CanConnectSMTPServer(config)));
        }
Esempio n. 4
0
        /// <summary>
        /// Check if input database setting is valid and connect database.
        /// </summary>
        /// <param name="settings">Db configuration</param>
        /// <returns>Error message if there is an error while connecting database.
        /// Otherwise returns emtpy string</returns>
        public string CanConnectDatabase(ASConfiguration config)
        {
            var factory = DbProviderFactories.GetFactory(config.DataProvider);

            using (IDbConnection connection = factory.CreateConnection())
            {
                try
                {
                    connection.ConnectionString = config.ConnectionString;
                    connection.Open();
                }
                catch (Exception ex)
                {
                    _logger.Error(ex);
                    return(ex.Message);
                }
            }
            return(string.Empty);
        }
Esempio n. 5
0
        /// <summary>
        /// Checks if input SMTP server setting is valid and can connect SMTP
        /// </summary>
        /// <param name="setting">SMTP configuration</param>
        /// <returns>Error message if there is an error while connecting SMTP Server.
        /// Otherwise returns emtpy string</returns>
        public string CanConnectSMTPServer(ASConfiguration config)
        {
            try
            {
                EMail testMail = new EMail();
                testMail.SmtpClientTimeOut = config.SMTPTimeOut;
                testMail.SmtpPort          = config.SMTPPort;
                testMail.SmtpEnableSsl     = config.SMTPEnableSsl;
                testMail.SmtpUserName      = config.SMTPUserName;
                testMail.SmtpPassword      = config.SMTPPassword;
                testMail.SmtpHostAddress   = config.SMTPHost;
                testMail.FromAddress       = config.SMTPFromAddress;
                testMail.FromName          = config.SMTPFromDisplayName;
                testMail.Body      = Faker.Lorem.Sentence();
                testMail.Subject   = Faker.Lorem.Sentence();
                testMail.Receivers = TestMailReceiver;

                CheckSMTPConnection(config.SMTPHost,
                                    config.SMTPPort,
                                    config.SMTPTimeOut);
                _mailService.SendEMail(testMail);
            }
            catch (AggregateException ae)
            {
                string msg = string.Empty;

                foreach (var e in ae.Flatten().InnerExceptions)
                {
                    msg += e.Message + Environment.NewLine;
                }
                return(msg);
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                return(ex.Message);
            }
            return(string.Empty);
        }
Esempio n. 6
0
        public void Install()
        {
            if (_configurationFactory() == null)
            {
                return;
            }

            lock (_lockObj)
            {
                this._schedulerService.Stop();
                using (IDbContext _dbContext = this._dbContextFactory.Create())
                {
                    _dbContext.AuditLoggingEnabled      = false;
                    _dbContext.AutoDetectChangesEnabled = false;
                    _dbContext.ValidateOnSaveEnabled    = false;
                    ASConfiguration config = _configurationFactory();

                    Stopwatch sw = Stopwatch.StartNew();

                    try
                    {
                        _database.ExecuteNonQuery("DeleteAllData", CommandType.StoredProcedure, null);
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex);
                    }

                    DataGenerator dataGenerator = new DataGenerator(this.IsDemo);
                    //String Resources
                    _dbContext.Set <StringResource>().AddRange(dataGenerator.GenerateStringResources());

                    #region Setting Definitions

                    SettingDefinition appSettingDef = new SettingDefinition()
                    {
                        Name        = "AppSetting",
                        Description = "Application Settings in Name-Value structure." +
                                      " Contains simple settings just as <appSettings> in web.config.",
                        Field1         = "Name",
                        Field2         = "Value",
                        Field3         = "Comment",
                        FieldRequired1 = true,
                        FieldRequired2 = true,
                        FieldRequired3 = false
                    };
                    _dbContext.Set <SettingDefinition>().Add(appSettingDef);
                    SettingDefinition urlAddressSettingDef = new SettingDefinition()
                    {
                        Name           = "UrlAddress",
                        Description    = "Contains URL addresses to be used in the application in Name-Addres structure",
                        Field1         = "Name",
                        Field2         = "Address",
                        Field3         = "Comment",
                        FieldRequired1 = true,
                        FieldRequired2 = true,
                        FieldRequired3 = false
                    };
                    _dbContext.Set <SettingDefinition>().Add(urlAddressSettingDef);
                    SettingDefinition eMailAddressSettingDef = new SettingDefinition()
                    {
                        Name           = "EMailAddress",
                        Description    = "Contains E-Mail addresses to be used in the application in Name-Addres structure",
                        Field1         = "Name",
                        Field2         = "Address",
                        Field3         = "Comment",
                        FieldRequired1 = true,
                        FieldRequired2 = true,
                        FieldRequired3 = false
                    };
                    _dbContext.Set <SettingDefinition>().Add(eMailAddressSettingDef);
                    SettingDefinition htmlTemplateSettingDef = new SettingDefinition()
                    {
                        Name        = "HTMLTemplate",
                        Description = "HTML Templates to be used in the application.For now , it is used" +
                                      " to generate user e-mails from templates however in future this setting" +
                                      " can be used for other purposes as well.",
                        Field1         = "Name",
                        Field2         = "Subject",
                        Field3         = "BodyFilePath",
                        Field4         = "Comment",
                        FieldRequired1 = true,
                        FieldRequired2 = true,
                        FieldRequired3 = true,
                        FieldRequired4 = false
                    };
                    _dbContext.Set <SettingDefinition>().Add(htmlTemplateSettingDef);
                    SettingDefinition emailSettingDef = new SettingDefinition()
                    {
                        Name        = "EMailSetting",
                        Description = "E-Mail/SMTP settings that are used in the application.Provides user to manage " +
                                      "SMTP settings at run time and even store and use multiple SMTP settings in the " +
                                      " application.Differen e-mail settings can be used to send different types of e-mails",
                        Field1           = "Name",
                        Field2           = "Host",
                        Field3           = "Port",
                        Field4           = "TimeOut",
                        Field5           = "EnableSsl",
                        Field6           = "DefaultCredentials",
                        Field7           = "UserName",
                        Field8           = "Password",
                        Field9           = "FromDisplayName",
                        Field10          = "FromAddress",
                        Field11          = "Comment",
                        FieldRequired1   = true,
                        FieldRequired2   = true,
                        FieldRequired3   = true,
                        FieldRequired4   = true,
                        FieldRequired5   = true,
                        FieldRequired6   = true,
                        FieldRequired7   = true,
                        FieldRequired8   = true,
                        FieldRequired9   = true,
                        FieldRequired10  = true,
                        FieldRequired11  = false,
                        FieldInputType3  = FormInputType.DigitOnly,
                        FieldInputType5  = FormInputType.Checkbox,
                        FieldInputType6  = FormInputType.Checkbox,
                        FieldInputType8  = FormInputType.Password,
                        FieldInputType10 = FormInputType.Email
                    };
                    _dbContext.Set <SettingDefinition>().Add(emailSettingDef);
                    SettingDefinition membershipSettingDef = new SettingDefinition()
                    {
                        Name             = "MembershipSetting",
                        Description      = "Settings that are related with users and roles and other membership management",
                        Field1           = "Name",
                        Field2           = "PasswordResetTokenExpireTimeInHours",
                        Field3           = "LastActivityTimeUpdateIntervalInSeconds",
                        Field4           = "CookieValidationIntervalInMinutes",
                        Field5           = "RequireUniqueEmailForUsers",
                        Field6           = "AllowOnlyAlphanumericUserNames",
                        Field7           = "RequireDigitInPassword",
                        Field8           = "MinimumPasswordRequiredLength",
                        Field9           = "RequireLowercaseInPassword",
                        Field10          = "RequireNonLetterOrDigitInPassword",
                        Field11          = "RequireUppercaseInPassword",
                        Field12          = "Comment",
                        FieldRequired1   = true,
                        FieldRequired2   = true,
                        FieldRequired3   = true,
                        FieldRequired4   = true,
                        FieldRequired5   = true,
                        FieldRequired6   = true,
                        FieldRequired7   = true,
                        FieldRequired8   = true,
                        FieldRequired9   = true,
                        FieldRequired10  = true,
                        FieldRequired11  = true,
                        FieldRequired12  = false,
                        FieldInputType1  = FormInputType.Text,
                        FieldInputType2  = FormInputType.DigitOnly,
                        FieldInputType3  = FormInputType.DigitOnly,
                        FieldInputType4  = FormInputType.DigitOnly,
                        FieldInputType5  = FormInputType.Checkbox,
                        FieldInputType6  = FormInputType.Checkbox,
                        FieldInputType7  = FormInputType.Checkbox,
                        FieldInputType8  = FormInputType.DigitOnly,
                        FieldInputType9  = FormInputType.Checkbox,
                        FieldInputType10 = FormInputType.Checkbox,
                        FieldInputType11 = FormInputType.Checkbox,
                        FieldInputType12 = FormInputType.MultiLine
                    };
                    _dbContext.Set <SettingDefinition>().Add(membershipSettingDef);
                    _dbContext.SaveChanges();

                    #endregion Setting Definitions

                    #region Setting Values

                    SettingValue settingVal = new SettingValue()
                    {
                        Field1 = "ApplicationDefaultTitle",
                        Field2 = "AS.Admin",
                        Field3 = "Default page title to be used in HTML <title></title> tag",
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "MetaDescription",
                        Field2 = "AS.Admin MVC.NET Admin Panel",
                        Field3 = "HTML meta description. Will be place in  <meta name='description'>",
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "MetaKeywords",
                        Field2 = "AS.Admin,Back office,Admin Screens",
                        Field3 = "HTML meta keywords. Will be place in  <meta name='keywords'>",
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "IsDemo",
                        Field2 = config.IsDemo.ToString(),
                        Field3 = "Indicates if current application is demo or not.If application is DEMO ," +
                                 " some actions are restricted for security purposes.",
                        IsHiddenFromUser    = true,
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1              = "RecaptchaPublickey",
                        Field2              = config.RecaptchaPublicKey,
                        Field3              = "Public API Key for recaptcha component.",
                        IsHiddenFromUser    = true,
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1              = "RecaptchaPrivateKey",
                        Field2              = config.RecaptchaPrivateKey,
                        Field3              = "Private API Key for recaptcha component.",
                        IsHiddenFromUser    = true,
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1              = "GooglePlusClientId",
                        Field2              = config.GooglePlusClientId,
                        Field3              = "Google Plust OAuth Client ID",
                        IsHiddenFromUser    = true,
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1              = "GooglePlusClientSecret",
                        Field2              = config.GooglePlusClientSecret,
                        Field3              = "Google Plust OAuth Client Secret",
                        IsHiddenFromUser    = true,
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "RecaptchaDisplayCount",
                        Field2 = "3",
                        Field3 = "Invalid trial limit to activate captcha verification.",
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "DbQueryLogEnable",
                        Field2 = "False",
                        Field3 = "Flag for enabling/disabling entity framework command logging. Note that, " +
                                 "Command Logging (Interceptor Logging) really slows down the application. " +
                                 "Therefore,it is suggested to keep disabled unless it is really needed to " +
                                 "log entity framework db commands.",
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "BundlingEnabled",
                        Field2 = bool.TrueString,
                        Field3 = "Flag for enabling/disabling bundling&minification of resource files.",
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "RequestLoggingEnabled",
                        Field2 = bool.TrueString,
                        Field3 = "Flat for enabling/disabling HTTP request logging",
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "MinLogLevel",
                        Field2 = "Debug",
                        Field3 = "Minimum Logging Level",
                        SettingDefinitionID = appSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "IPCountryQueryUrl",
                        Field2 = "http://ip-api.com/json/{{ip}}",
                        Field3 = "URL that we use for fetching country of the client by the ip adress." +
                                 "API key must also be provided at 'Configuration' step when application run for the first time",
                        SettingDefinitionID = urlAddressSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "RecaptchaUrl",
                        Field2 = "https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}&remoteip={2}",
                        Field3 = "Recaptcha validation url",
                        SettingDefinitionID = urlAddressSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "PingUrl",
                        Field2 = "http://asadmindemo.com/Ping",
                        Field3 = "Ping url of our application",
                        SettingDefinitionID = urlAddressSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "SmtpConnectionTestEmailAddress",
                        Field2 = "*****@*****.**",
                        Field3 = "Test e-mail address to test SMTP connectivity",
                        SettingDefinitionID = eMailAddressSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "AdminEmailAddress",
                        Field2 = "*****@*****.**",
                        Field3 = "Admin e-mail address",
                        SettingDefinitionID = eMailAddressSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "ForgotPassword",
                        Field2 = "[AS.Admin]Please Reset Your Password",
                        Field3 = @"Templates\ForgotPassword.html",
                        Field4 = "HTML template of 'Forgot My Password' flow. This template is sent as e-mail " +
                                 "to the user.",
                        SettingDefinitionID = htmlTemplateSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);
                    settingVal = new SettingValue()
                    {
                        Field1 = "NewUser",
                        Field2 = "[AS.Admin]Your User Info",
                        Field3 = @"Templates\NewUser.html",
                        Field4 = "HTML template of 'New User'. This template is sent as e-mail to the user.",
                        SettingDefinitionID = htmlTemplateSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);

                    settingVal = new SettingValue()
                    {
                        Field1              = config.SMTPName,
                        Field2              = config.SMTPHost,
                        Field3              = config.SMTPPort.ToString(),
                        Field4              = config.SMTPTimeOut.ToString(),
                        Field5              = config.SMTPEnableSsl.ToString(),
                        Field6              = config.SMTPDefaultCredentials.ToString(),
                        Field7              = config.SMTPUserName,
                        Field8              = config.SMTPPassword,
                        Field9              = config.SMTPFromDisplayName,
                        Field10             = config.SMTPFromAddress,
                        Field11             = string.Empty,
                        SettingDefinitionID = emailSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);

                    settingVal = new SettingValue()
                    {
                        Field1              = "MembershipSettings",
                        Field2              = "24",
                        Field3              = "60",
                        Field4              = "60",
                        Field5              = bool.TrueString,
                        Field6              = bool.FalseString,
                        Field7              = bool.FalseString,
                        Field8              = "4",
                        Field9              = bool.FalseString,
                        Field10             = bool.FalseString,
                        Field11             = bool.FalseString,
                        Field12             = string.Empty,
                        SettingDefinitionID = membershipSettingDef.Id
                    };
                    _dbContext.Set <SettingValue>().Add(settingVal);

                    #endregion Setting Values

                    #region Scheduled Jobs

                    JobDefinition jobDef = new JobDefinition();
                    jobDef.JobStatus   = JobStatus.Queued;
                    jobDef.JobTypeName = "AS.Jobs.MailSendingJob, AS.Jobs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
                    jobDef.Name        = "Mail Job";
                    jobDef.RunInterval = 5; //Every 5 seconds
                    jobDef.Comment     = "Asynchronous job that is executed to send pending e-mails to the receivers.";
                    jobDef.CreatedBy   = "Installer";
                    _dbContext.Set <JobDefinition>().Add(jobDef);

                    if (IsDemo)
                    {
                        jobDef             = new JobDefinition();
                        jobDef.JobStatus   = JobStatus.Queued;
                        jobDef.JobTypeName = "AS.Jobs.DemoResetJob, AS.Jobs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
                        jobDef.Name        = "Demo Environment Reset Job";
                        jobDef.RunInterval = 120 * 60;//Every 2 hours
                        jobDef.CreatedBy   = "Installer";
                        jobDef.Comment     = "Asynchronous job that is executed to reset demo application test data";
                        _dbContext.Set <JobDefinition>().Add(jobDef);
                    }
                    jobDef             = new JobDefinition();
                    jobDef.JobStatus   = JobStatus.Queued;
                    jobDef.JobTypeName = "AS.Jobs.PingJob, AS.Jobs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
                    jobDef.Name        = "Ping Job";
                    jobDef.RunInterval = 60;//Every 1 minute
                    jobDef.CreatedBy   = "Installer";
                    jobDef.Comment     = "Asynchronous job that is executed to ping our own application to keep it up and running";
                    _dbContext.Set <JobDefinition>().Add(jobDef);

                    #endregion Scheduled Jobs

                    // E-Mails
                    _dbContext.Set <EMail>().AddRange(dataGenerator.GenerateEMails());
                    //Roles
                    _dbContext.Set <ASRole>().AddRange(dataGenerator.GenerateRoles());
                    // Users
                    _dbContext.Set <ASUser>().AddRange(dataGenerator.GenerateUsers());
                    _dbContext.SaveChanges();

                    List <int> roleIdList = new List <int>(_dbContext.Set <ASRole>().Select(a => a.Id));
                    List <int> userIdList = new List <int>(_dbContext.Set <ASUser>().Select(a => a.Id));

                    //User Roles
                    _dbContext.Set <ASUserRole>().AddRange(dataGenerator.GenerateUserRoles(roleIdList, userIdList));
                    // UserActivities
                    _dbContext.Set <UserActivity>().AddRange(dataGenerator.GenerateActivities(userIdList));
                    // Notifications
                    _dbContext.Set <Notification>().AddRange(dataGenerator.GenerateNotifications(userIdList));

                    _dbContext.SaveChanges();
                    this._schedulerService.Initialize();

                    sw.Stop();
                    _logger.Warn(string.Format("Installer service took {0} seconds to install", sw.ElapsedMilliseconds / 1000));
                }
            }
        }
Esempio n. 7
0
        public ActionResult EditEMailSettings(EMailSettingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            try
            {
                ASConfiguration config = new ASConfiguration();
                config.SMTPDefaultCredentials = model.DefaultCredentials;
                config.SMTPEnableSsl          = model.EnableSsl;
                config.SMTPFromAddress        = model.FromAddress;
                config.SMTPFromDisplayName    = model.FromDisplayName;
                config.SMTPHost     = model.Host;
                config.SMTPName     = model.Name;
                config.SMTPPassword = model.Password;
                config.SMTPPort     = model.Port;
                config.SMTPTimeOut  = model.TimeOut;
                config.SMTPUserName = model.UserName;

                string result = _configurationService.CanConnectSMTPServer(config);

                if (!string.IsNullOrEmpty(result))
                {
                    throw new ASException(result);
                }

                SettingValue value = (SettingValue)model;

                if (model.Id > 0)
                {
                    SettingValue dbValue = _settingService.GetSettingValueById(model.Id);

                    if (dbValue.IsHiddenFromUser)
                    {
                        throw new ASException(this._resourceManager.GetString("ErrorMessage_UnableToUpdate"));
                    }

                    value.SettingDefinitionID = dbValue.SettingDefinitionID;
                    value.CreatedBy           = dbValue.CreatedBy;
                    value.CreatedOn           = dbValue.CreatedOn;
                    _settingService.UpdateSettingValue(value);

                    TempData["ResultType"]    = MessageType.Success;
                    TempData["ResultMessage"] = this._resourceManager.GetString("Resources.SettingValueUpdateSuccess");
                }
                else
                {
                    value.SettingDefinitionID = _settingService.GetSettingDefinitionByName("EMailSetting").Id;
                    _settingService.AddSettingValue(value);
                    TempData["ResultType"]    = MessageType.Success;
                    TempData["ResultMessage"] = this._resourceManager.GetString("SettingValueUpdateSuccess");
                }
                _cacheService.Clear();

                TempData["ResultModel"] = model;
                return(RedirectToAction("Result", "Shared"));
            }
            catch (ASException ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
            }

            return(View(model));
        }
Esempio n. 8
0
 /// <summary>
 /// Saves config to a file
 /// </summary>
 /// <param name="settings"></param>
 public void SaveConfig(ASConfiguration config)
 {
     config.SymmetricKey = this._encryptionProvider.GenerateKey();
     config.SMTPPassword = this._encryptionProvider.Encrypt(config.SMTPPassword, config.SymmetricKey);
     this._configurationStorageManager.Save(config);
 }