// (c) Copyright Ascensio System SIA 2010-2022 // // This program is a free software product. // You can redistribute it and/or modify it under the terms // of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software // Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended // to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of // any third-party rights. // // This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see // the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html // // You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021. // // The interactive user interfaces in modified source and object code versions of the Program must // display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3. // // Pursuant to Section 7(b) of the License you must retain the original Product logo when // distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under // trademark law for use of our trademarks. // // All the Product's GUI elements, including illustrations and icon sets, as well as technical writing // content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode namespace ASC.Core.Users; /// /// [Serializable] public sealed class UserInfo : IDirectRecipient, ICloneable, IMapFrom { public UserInfo() { Status = EmployeeStatus.Active; ActivationStatus = EmployeeActivationStatus.NotActivated; LastModified = DateTime.UtcNow; } /// ID /// System.Guid, System public Guid Id { get; set; } /// First name /// System.String, System public string FirstName { get; set; } /// Last name /// System.String, System public string LastName { get; set; } /// Username /// System.String, System public string UserName { get; set; } /// Birthday /// System.Nullable{System.DateTime}, System public DateTime? BirthDate { get; set; } /// Sex (male or female) /// System.Nullable{System.Boolean}, System public bool? Sex { get; set; } /// Status /// ASC.Core.Users.EmployeeStatus, ASC.Core.Common public EmployeeStatus Status { get; set; } /// Activation status /// ASC.Core.Users.EmployeeActivationStatus, ASC.Core.Common public EmployeeActivationStatus ActivationStatus { get; set; } /// The date and time when the user account was terminated /// System.Nullable{System.DateTime}, System public DateTime? TerminatedDate { get; set; } /// Title /// System.String, System public string Title { get; set; } /// Registration date /// System.Nullable{System.DateTime}, System public DateTime? WorkFromDate { get; set; } /// Email /// System.String, System public string Email { get; set; } private string _contacts; /// List of contacts in the string format /// System.String, System public string Contacts { get => _contacts; set { _contacts = value; ContactsFromString(_contacts); } } /// List of contacts /// System.Collections.Generic.List{System.String}, System.Collections.Generic public List ContactsList { get; set; } /// Location /// System.String, System public string Location { get; set; } /// Notes /// System.String, System public string Notes { get; set; } /// Specifies if the user account was removed or not /// System.Boolean, System public bool Removed { get; set; } /// Last modified date /// System.DateTime, System public DateTime LastModified { get; set; } /// Tenant /// System.Int32, System public int Tenant { get; set; } /// Spceifies if the user is active or not /// System.Boolean, System public bool IsActive => ActivationStatus.HasFlag(EmployeeActivationStatus.Activated); /// Language /// System.String, System public string CultureName { get; set; } /// Mobile phone /// System.String, System public string MobilePhone { get; set; } /// Mobile phone activation status /// ASC.Core.Users.MobilePhoneActivationStatus, ASC.Core.Common public MobilePhoneActivationStatus MobilePhoneActivationStatus { get; set; } /// LDAP user identificator /// System.String, System public string Sid { get; set; } // LDAP user identificator /// LDAP user quota attribute /// System.Int64, System public long LdapQouta { get; set; } // LDAP user quota attribute /// SSO SAML user identificator /// System.String, System public string SsoNameId { get; set; } // SSO SAML user identificator /// SSO SAML user session identificator /// System.String, System public string SsoSessionId { get; set; } // SSO SAML user session identificator /// Creation date /// System.DateTime, System public DateTime CreateDate { get; set; } public override string ToString() { return $"{FirstName} {LastName}".Trim(); } public override int GetHashCode() { return Id.GetHashCode(); } public override bool Equals(object obj) { return obj is UserInfo ui && Id.Equals(ui.Id); } public bool Equals(UserInfo obj) { return obj != null && Id.Equals(obj.Id); } public CultureInfo GetCulture() { return string.IsNullOrEmpty(CultureName) ? CultureInfo.CurrentCulture : CultureInfo.GetCultureInfo(CultureName); } string[] IDirectRecipient.Addresses => !string.IsNullOrEmpty(Email) ? new[] { Email } : Array.Empty(); public bool CheckActivation => !IsActive; /*if user already active we don't need activation*/ string IRecipient.ID => Id.ToString(); string IRecipient.Name => ToString(); public object Clone() { return MemberwiseClone(); } internal string ContactsToString() { if (ContactsList == null || ContactsList.Count == 0) { return null; } var sBuilder = new StringBuilder(); foreach (var contact in ContactsList) { sBuilder.Append($"{contact}|"); } return sBuilder.ToString(); } internal UserInfo ContactsFromString(string contacts) { if (string.IsNullOrEmpty(contacts)) { return this; } if (ContactsList == null) { ContactsList = new List(); } else { ContactsList.Clear(); } ContactsList.AddRange(contacts.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries)); return this; } }