public async Task <bool> HasPrivateMessagePermissions(int userId)
        {
            var usr = new AuthenticatedUserExpanded(await GetAuthenticatedUserById(userId));

            usr.AllPermissions = await GetPermissions(userId);

            return(usr.HasPrivateMessagePermissions);
        }
 public _ForumDisplayPartialModel(int forumId, HashSet <ForumTree> tree, string dateFormat, bool showTitle, AuthenticatedUserExpanded authenticatedUser, bool showLastSeparator, string language)
 {
     DateFormat        = dateFormat;
     ShowTitle         = showTitle;
     AuthenticatedUser = authenticatedUser;
     Tree              = tree;
     Categories        = GetChildrenForums(forumId).Where(f => f.ForumType == ForumType.Category);
     SubForums         = GetChildrenForums(forumId).Where(f => f.ForumType == ForumType.SubForum);
     ShowLastSeparator = showLastSeparator;
     Language          = language;
 }
 public _TopicDisplayPartialModel(AuthenticatedUserExpanded currentUser, string language, List <TopicDto> topics)
     : this(
         currentUser,
         language,
         new List <TopicGroup>
 {
     new TopicGroup
     {
         TopicType = Utilities.TopicType.Normal,
         Topics = topics
     }
 })
 {
 }
        public async Task <(string Message, bool?IsSuccess)> SendPrivateMessage(int senderId, string senderName, int receiverId, string subject, string text, PageContext pageContext, HttpContext httpContext)
        {
            var lang = GetLanguage();

            try
            {
                var sender = new AuthenticatedUserExpanded(await GetAuthenticatedUserById(senderId))
                {
                    AllPermissions = await GetPermissions(senderId),
                };
                if (!sender.HasPrivateMessagePermissions)
                {
                    return(LanguageProvider.Errors[lang, "SENDER_CANT_SEND_PMS"], false);
                }

                var receiver = new AuthenticatedUserExpanded(await GetAuthenticatedUserById(receiverId))
                {
                    AllPermissions = await GetPermissions(receiverId),
                    Foes           = await GetFoes(receiverId)
                };
                if (!receiver.HasPrivateMessages)
                {
                    return(LanguageProvider.Errors[lang, "RECEIVER_CANT_RECEIVE_PMS"], false);
                }
                if (receiver.Foes?.Contains(senderId) ?? false)
                {
                    return(LanguageProvider.Errors[lang, "ON_RECEIVERS_FOE_LIST"], false);
                }

                var connection = _context.GetDbConnection();

                await connection.ExecuteAsync(
                    @"INSERT INTO phpbb_privmsgs (author_id, to_address, bcc_address, message_subject, message_text, message_time) VALUES (@senderId, @to, '', @subject, @text, @time); 
                      SELECT LAST_INSERT_ID() INTO @inserted_id;
                      INSERT INTO phpbb_privmsgs_to (author_id, msg_id, user_id, folder_id, pm_unread) VALUES (@senderId, @inserted_id, @receiverId, 0, 1); 
                      INSERT INTO phpbb_privmsgs_to (author_id, msg_id, user_id, folder_id, pm_unread) VALUES (@senderId, @inserted_id, @senderId, -1, 0); ",
                    new { senderId, receiverId, to = $"u_{receiverId}", subject, text, time = DateTime.UtcNow.ToUnixTimestamp() }
                    );

                var emailSubject = string.Format(LanguageProvider.Email[receiver.Language !, "NEWPM_SUBJECT_FORMAT"], _config.GetValue <string>("ForumName"));
 public async Task <int?> GetUserRole(AuthenticatedUserExpanded user)
 => (from up in user.AllPermissions ?? new HashSet <AuthenticatedUserExpanded.Permissions>()
     join a in await GetUserRolesLazy()
     on up.AuthRoleId equals a.RoleId
     select up.AuthRoleId as int?).FirstOrDefault();
        public AuthenticatedUserExpanded?ClaimsPrincipalToAuthenticatedUser(ClaimsPrincipal claimsPrincipal)
        {
            var user  = new AuthenticatedUserExpanded();
            var found = false;

            foreach (var claim in claimsPrincipal?.Claims ?? Enumerable.Empty <Claim>())
            {
                switch (claim.Type)
                {
                case nameof(AuthenticatedUserExpanded.UserId):
                    user.UserId = int.Parse(claim.Value);
                    found       = true;
                    break;

                case nameof(AuthenticatedUserExpanded.Username):
                    user.Username = claim.Value;
                    found         = true;
                    break;

                case nameof(AuthenticatedUserExpanded.UsernameClean):
                    user.UsernameClean = claim.Value;
                    found = true;
                    break;

                case nameof(AuthenticatedUserExpanded.UserDateFormat):
                    user.UserDateFormat = claim.Value;
                    found = true;
                    break;

                case nameof(AuthenticatedUserExpanded.UserColor):
                    user.UserColor = claim.Value;
                    found          = true;
                    break;

                case nameof(AuthenticatedUserExpanded.PostEditTime):
                    user.PostEditTime = int.Parse(claim.Value);
                    found             = true;
                    break;

                case nameof(AuthenticatedUserExpanded.UploadLimit):
                    user.UploadLimit = int.Parse(claim.Value);
                    found            = true;
                    break;

                case nameof(AuthenticatedUserExpanded.AllowPM):
                    user.AllowPM = bool.TryParse(claim.Value, out var val) && val;
                    found        = true;
                    break;

                case nameof(AuthenticatedUserExpanded.Style):
                    user.Style = claim.Value;
                    found      = true;
                    break;

                case nameof(AuthenticatedUserExpanded.JumpToUnread):
                    user.JumpToUnread = bool.TryParse(claim.Value, out val) && val;
                    found             = true;
                    break;

                case nameof(AuthenticatedUserExpanded.Language):
                    user.Language = claim.Value;
                    found         = true;
                    break;

                case nameof(AuthenticatedUserExpanded.EmailAddress):
                    user.EmailAddress = claim.Value;
                    found             = true;
                    break;
                }
            }
            return(found ? user : null);
        }
 public _TopicDisplayPartialModel(AuthenticatedUserExpanded currentUser, string language, List <TopicGroup> topicGroups)
 {
     CurrentUser = currentUser;
     Language    = language;
     TopicGroups = topicGroups;
 }