using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Extensions;
namespace Umbraco.Cms.Core.Models.ContentEditing;
///
/// Represents the data used to invite a user
///
[DataContract(Name = "user", Namespace = "")]
public class UserInvite : EntityBasic, IValidatableObject
{
[DataMember(Name = "userGroups")]
[Required]
public IEnumerable UserGroups { get; set; } = null!;
[DataMember(Name = "email", IsRequired = true)]
[Required]
[EmailAddress]
public string Email { get; set; } = null!;
[DataMember(Name = "username")]
public string? Username { get; set; }
[DataMember(Name = "message")]
public string? Message { get; set; }
public IEnumerable Validate(ValidationContext validationContext)
{
if (UserGroups.Any() == false)
{
yield return new ValidationResult(
"A user must be assigned to at least one group",
new[] { nameof(UserGroups) });
}
IOptionsSnapshot securitySettings =
validationContext.GetRequiredService>();
if (securitySettings.Value.UsernameIsEmail == false && Username.IsNullOrWhiteSpace())
{
yield return new ValidationResult("A username cannot be empty", new[] { nameof(Username) });
}
}
}