private void ApplyDefaults(ref GigyaSettingsModel model, IGigyaModuleSettings settings) { if (string.IsNullOrEmpty(model.Language.Code)) { model.Language.Code = Core.Constants.Languages.Auto; } }
private GigyaSettingsModel Map(IGigyaModuleSettings settings) { var user = UmbracoContext.Application.Services.UserService.GetByUsername(User.Identity.Name); var language = new GigyaLanguageModel(); language.Code = string.IsNullOrEmpty(settings.Language) || settings.Language == Core.Constants.Languages.Auto || GigyaLanguageHelper.Languages.ContainsKey(settings.Language) ? settings.Language : Core.Constants.Languages.Other; settings.DataCenter = Core.Connector.Helpers.GigyaSettingsHelper.MapOldDataCenter(settings.DataCenter); var model = new GigyaSettingsModel { CanViewApplicationSecret = (user.UserType.Name == Constants.UserTypes.Admin) || User.IsInRole(Constants.Roles.GigyaAdmin), Id = Convert.ToInt32(settings.Id), ApiKey = settings.ApiKey, ApplicationKey = settings.ApplicationKey, Language = language, LanguageFallback = new GigyaLanguageModel { Code = settings.LanguageFallback }, LanguageOther = language.Code == Core.Constants.Languages.Other ? settings.Language : string.Empty, DebugMode = settings.DebugMode, DataCenter = string.IsNullOrEmpty(settings.DataCenter) || Core.Constants.DataCenter.DataCenters.Contains(settings.DataCenter) ? settings.DataCenter : Core.Constants.DataCenter.Other, DataCenterOther = settings.DataCenter, EnableRaas = settings.EnableRaas, RedirectUrl = settings.RedirectUrl, LogoutUrl = settings.LogoutUrl, GlobalParameters = settings.GlobalParameters, SessionTimeout = settings.SessionTimeout, SessionProvider = settings.SessionProvider }; var mappingFields = !string.IsNullOrEmpty(settings.MappingFields) ? JsonConvert.DeserializeObject <List <MappingField> >(settings.MappingFields) : new List <MappingField>(); AddMappingField(Constants.GigyaFields.Email, Constants.CmsFields.Email, ref mappingFields, true); AddMappingField(Constants.GigyaFields.FirstName, Constants.CmsFields.Name, ref mappingFields, true); AddMappingField(Constants.GigyaFields.UserId, Constants.CmsFields.Username, ref mappingFields, true); // required fields first model.MappingFields = mappingFields.OrderByDescending(i => i.Required).ThenBy(i => i.CmsFieldName).ToList(); // check if authorised to view application secret if (model.CanViewApplicationSecret && !string.IsNullOrEmpty(settings.ApplicationSecret) && Encryptor.IsConfigured) { var key = TryDecryptApplicationSecret(settings.ApplicationSecret, false); if (!string.IsNullOrEmpty(key)) { model.ApplicationSecretMasked = StringHelper.MaskInput(key, "*", 2, 2); } } return(model); }
public GigyaSettingsResponseModel Save(GigyaSettingsModel model) { var response = new GigyaSettingsResponseModel(); if (!ModelState.IsValid) { var errorList = ModelState.Values.SelectMany(m => m.Errors) .Select(e => e.ErrorMessage) .ToList(); response.Error = string.Join(" ", errorList); _logger.Error(response.Error); return(response); } var settingsHelper = new Umbraco.Module.v621.Helpers.GigyaSettingsHelper(); if (model.Inherited && model.Id > 0) { settingsHelper.Delete(model.Id); response.Success = true; // return global settings to refresh client var globalData = settingsHelper.Get(model.Id); var globalModel = GetModel(model.Id, globalData); response.Settings = globalModel; return(response); } var settings = settingsHelper.GetRaw(model.Id); // update all fields settings.ApiKey = model.ApiKey; settings.DebugMode = model.DebugMode; settings.ApplicationKey = model.ApplicationKey; settings.DataCenter = !string.IsNullOrEmpty(model.DataCenter) && model.DataCenter != Core.Constants.DataCenter.Other ? model.DataCenter : model.DataCenterOther; settings.EnableRaas = model.EnableRaas; settings.GlobalParameters = model.GlobalParameters; settings.Language = !string.IsNullOrEmpty(model.Language.Code) && model.Language.Code != Core.Constants.Languages.Other ? model.Language.Code : model.LanguageOther; settings.LanguageFallback = model.LanguageFallback.Code; settings.MappingFields = JsonConvert.SerializeObject(model.MappingFields); settings.RedirectUrl = model.RedirectUrl; settings.LogoutUrl = model.LogoutUrl; settings.SessionTimeout = model.SessionTimeout; // application secret that we will use to validate the settings - store this in a separate var as it's unencrypted string plainTextApplicationSecret = string.Empty; // check if user can view application secret if (!string.IsNullOrEmpty(model.ApplicationSecret)) { plainTextApplicationSecret = model.ApplicationSecret; var canViewApplicationSecret = (UmbracoUser.UserType.Name == Constants.UserTypes.Admin) || User.IsInRole(Constants.Roles.GigyaAdmin); if (canViewApplicationSecret) { if (!Encryptor.IsConfigured) { response.Error = "Encryption key not specified. Refer to installation guide."; _logger.Error(response.Error); return(response); } settings.ApplicationSecret = Encryptor.Encrypt(model.ApplicationSecret); } } if (string.IsNullOrEmpty(plainTextApplicationSecret) && Encryptor.IsConfigured && !string.IsNullOrEmpty(settings.ApplicationSecret)) { plainTextApplicationSecret = TryDecryptApplicationSecret(settings.ApplicationSecret, false); if (string.IsNullOrEmpty(plainTextApplicationSecret)) { response.Error = "Application Secret could not be decrypted. Please re-enter it."; _logger.Error(response.Error); return(response); } } var mappedSettings = Map(settings); mappedSettings.ApplicationSecret = plainTextApplicationSecret; try { // validate input settingsHelper.Validate(mappedSettings); } catch (Exception e) { _logger.Error(e.Message); response.Error = e.Message; return(response); } // verify settings are correct var apiHelper = new GigyaApiHelper(settingsHelper, _logger); var testResponse = apiHelper.VerifySettings(mappedSettings, plainTextApplicationSecret); if (testResponse.GetErrorCode() != 0) { var gigyaErrorDetail = testResponse.GetString("errorDetails", string.Empty); var message = testResponse.GetErrorMessage(); if (!string.IsNullOrEmpty(gigyaErrorDetail)) { message = string.Concat(message, ". ", gigyaErrorDetail); } response.Error = message; return(response); } settingsHelper.Save(settings); response.Success = true; return(response); }