1
0
mirror of https://github.com/bitwarden/server.git synced 2025-05-22 20:11:04 -05:00
bitwarden/bitwarden_license/src/Portal/Models/SsoConfigEditViewModel.cs
2020-10-08 13:49:05 -04:00

118 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text.Json;
using Bit.Core;
using Bit.Core.Enums;
using Bit.Core.Models.Data;
using Bit.Core.Models.Table;
using Bit.Core.Services;
using Bit.Core.Sso;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Mvc.Rendering;
namespace Bit.Portal.Models
{
public class SsoConfigEditViewModel
{
public SsoConfigEditViewModel() { }
public SsoConfigEditViewModel(SsoConfig ssoConfig, Guid organizationId,
II18nService i18nService, GlobalSettings globalSettings)
{
if (ssoConfig != null)
{
Id = ssoConfig.Id;
Enabled = ssoConfig.Enabled;
}
SsoConfigurationData configurationData;
if (!string.IsNullOrWhiteSpace(ssoConfig?.Data))
{
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};
configurationData = JsonSerializer.Deserialize<SsoConfigurationData>(ssoConfig.Data, options);
}
else
{
configurationData = new SsoConfigurationData();
}
Data = new SsoConfigDataViewModel(configurationData, globalSettings, organizationId);
BuildLists(i18nService);
}
public long Id { get; set; }
[Display(Name = "Enabled")]
public bool Enabled { get; set; }
public SsoConfigDataViewModel Data { get; set; }
public List<SelectListItem> ConfigTypes { get; set; }
public List<SelectListItem> SpNameIdFormats { get; set; }
public List<SelectListItem> BindingTypes { get; set; }
public List<SelectListItem> SigningBehaviors { get; set; }
public List<SelectListItem> SigningAlgorithms { get; set; }
public List<SelectListItem> RedirectBehaviors { get; set; }
public SsoConfig ToSsoConfig(Guid organizationId)
{
return ToSsoConfig(new SsoConfig { OrganizationId = organizationId });
}
public SsoConfig ToSsoConfig(SsoConfig existingConfig)
{
existingConfig.Enabled = Enabled;
var configurationData = Data.ToConfigurationData();
existingConfig.Data = JsonSerializer.Serialize(configurationData, new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
});
return existingConfig;
}
public void BuildLists(II18nService i18nService)
{
ConfigTypes = Enum.GetNames(typeof(SsoType))
.Select(configType => new SelectListItem
{
Value = configType,
Text = i18nService.T(configType),
}).ToList();
SpNameIdFormats = Enum.GetNames(typeof(Saml2NameIdFormat))
.Select(nameIdFormat => new SelectListItem
{
Value = nameIdFormat,
Text = i18nService.T(nameIdFormat),
}).ToList();
BindingTypes = Enum.GetNames(typeof(Saml2BindingType))
.Select(bindingType => new SelectListItem
{
Value = bindingType,
Text = i18nService.T(bindingType),
}).ToList();
SigningBehaviors = Enum.GetNames(typeof(Saml2SigningBehavior))
.Select(behavior => new SelectListItem
{
Value = behavior,
Text = i18nService.T(behavior),
}).ToList();
SigningAlgorithms = SamlSigningAlgorithms.GetEnumerable().Select(a =>
new SelectListItem(a, a)).ToList();
RedirectBehaviors = Enum.GetNames(typeof(OpenIdConnectRedirectBehavior))
.Select(behavior => new SelectListItem
{
Value = behavior,
Text = i18nService.T(behavior),
}).ToList();
}
}
}