public override async Task <IDisplayResult> UpdateAsync(FacebookSettings settings, BuildEditorContext context) { if (context.GroupId == FacebookConstants.Features.Core) { var user = _httpContextAccessor.HttpContext?.User; if (user == null || !await _authorizationService.AuthorizeAsync(user, Permissions.ManageFacebookApp)) { return(null); } var model = new FacebookSettingsViewModel(); await context.Updater.TryUpdateModelAsync(model, Prefix); if (context.Updater.ModelState.IsValid) { var protector = _dataProtectionProvider.CreateProtector(FacebookConstants.Features.Core); settings.AppId = model.AppId; settings.AppSecret = protector.Protect(model.AppSecret); settings.FBInit = model.FBInit; settings.SdkJs = model.SdkJs; if (!string.IsNullOrWhiteSpace(model.FBInitParams)) { settings.FBInitParams = model.FBInitParams; } settings.Version = model.Version; await _shellHost.ReloadShellContextAsync(_shellSettings); } } return(await EditAsync(settings, context)); }
public override async Task <IViewProviderResult> BuildUpdateAsync(PlatoFacebookSettings settings, IViewProviderContext context) { var model = new FacebookSettingsViewModel(); // Validate model if (!await context.Updater.TryUpdateModelAsync(model)) { return(await BuildEditAsync(settings, context)); } // Update settings if (context.Updater.ModelState.IsValid) { // Encrypt the secret var secret = string.Empty; if (!string.IsNullOrWhiteSpace(model.AppSecret)) { try { secret = _encrypter.Encrypt(model.AppSecret); } catch (Exception e) { if (_logger.IsEnabled(LogLevel.Error)) { _logger.LogError(e, $"There was a problem encrypting the Facebook app secret. {e.Message}"); } } } // Create the model settings = new PlatoFacebookSettings() { AppId = model.AppId, AppSecret = secret, CallbackPath = model.CallbackPath }; // Persist the settings var result = await _facebookSettingsStore.SaveAsync(settings); if (result != null) { // Recycle shell context to ensure changes take effect _platoHost.RecycleShell(_shellSettings); } } return(await BuildEditAsync(settings, context)); }
public async Task <IActionResult> IndexPost(FacebookSettingsViewModel viewModel) { // Ensure we have permission if (!await _authorizationService.AuthorizeAsync(User, Permissions.EditFacebookSettings)) { return(Unauthorized()); } // Execute view providers ProvideUpdateAsync method await _viewProvider.ProvideUpdateAsync(new PlatoFacebookSettings(), this); // Add alert _alerter.Success(T["Settings Updated Successfully!"]); return(RedirectToAction(nameof(Index))); }
public override async Task <IViewProviderResult> BuildUpdateAsync(FacebookSettings settings, IViewProviderContext context) { var model = new FacebookSettingsViewModel(); // Validate model if (!await context.Updater.TryUpdateModelAsync(model)) { return(await BuildEditAsync(settings, context)); } // Update settings if (context.Updater.ModelState.IsValid) { // Encrypt the secret var secret = string.Empty; if (!string.IsNullOrWhiteSpace(model.AppSecret)) { try { var protector = _dataProtectionProvider.CreateProtector(nameof(FacebookOptionsConfiguration)); secret = protector.Protect(model.AppSecret); } catch (Exception e) { _logger.LogError($"There was a problem encrypting the Facebook app secret. {e.Message}"); } } // Create the model settings = new FacebookSettings() { AppId = model.AppId, AppSecret = secret }; // Persist the settings var result = await _facebookSettingsStore.SaveAsync(settings); if (result != null) { // Recycle shell context to ensure changes take effect _platoHost.RecycleShellContext(_shellSettings); } } return(await BuildEditAsync(settings, context)); }