57 lines
2.4 KiB
C#
57 lines
2.4 KiB
C#
using System;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Text;
|
|
|
|
namespace Kreta.Core.CustomAttributes
|
|
{
|
|
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter)]
|
|
public class EmailAddressExtendedAttribute : DataTypeAttribute
|
|
{
|
|
public bool IsNullValid { get; }
|
|
|
|
public bool IsEmptyValid { get; }
|
|
|
|
//NOTE: A beépített EmailAddressAttribute a null-t valid true-nak, az üres string-et valid false-nak veszi alapból, ezért ezek a default értékek itt is!
|
|
public EmailAddressExtendedAttribute(bool isNullValid = true, bool isEmptyValid = false) : base(DataType.EmailAddress)
|
|
{
|
|
IsNullValid = isNullValid;
|
|
IsEmptyValid = isEmptyValid;
|
|
}
|
|
|
|
public override bool IsValid(object value)
|
|
{
|
|
//NOTE: Null esetében, az IsNullValid property értékétől függően térünk vissza, hogy valid-e vagy sem!
|
|
if (value == null)
|
|
{
|
|
return IsNullValid;
|
|
}
|
|
|
|
string valueAsString = value as string;
|
|
|
|
//NOTE: Ha nem sikerül string-é alakítani a nem null value-t, akkor rossz a value típusa, ezért nem lesz valid!
|
|
if (valueAsString == null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//NOTE: Üres string esetében, az IsEmptyValid property értékétől függően térünk vissza, hogy valid-e vagy sem!
|
|
if (valueAsString == string.Empty)
|
|
{
|
|
return IsEmptyValid;
|
|
}
|
|
|
|
//NOTE: Azért encode-oljuk ISO-8859-8-ra, mert ezzel kiszedjük az ékezeteket(és az esetleges egyéb nem engedélyezett karaktereket) a valueAsString-ből.
|
|
// Ha az encode-olás utáni string nem egyezik meg az eredeti valueAsString-el, akkor volt benne ékezet(vagy egyéb nem engedélyezett karakter) és nem valid az email cím!
|
|
byte[] tempByteArray = Encoding.GetEncoding(Constants.EncodingName.ISO_8859_8).GetBytes(valueAsString);
|
|
string encodedString = Encoding.UTF8.GetString(tempByteArray);
|
|
if (!encodedString.Equals(valueAsString))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//NOTE: Végül levalidáljuk a beépített EmailAddressAttribute validációjával!
|
|
bool result = new EmailAddressAttribute().IsValid(valueAsString);
|
|
return result;
|
|
}
|
|
}
|
|
}
|