Example #1
0
        public async Task <VBSession> CreateAsync(VBUser user, int inForumId = 0, int inThreadId = 0, string location = "", int styleId = 0, int languageId = 0, bool saveChanges = true)
        {
            var context = contextAccessor.HttpContext;
            var session = new VBSession()
            {
                SessionHash    = GenerateHash(),
                IdHash         = GenerateIdHash(),
                IsBot          = false,
                UserId         = user.Id,
                UserAgent      = GetUserAgent(),
                LoggedInRaw    = user.Id > 0 ? 1 : 0,
                InForumId      = inForumId,
                InThreadId     = inThreadId,
                Location       = location,
                StyleId        = styleId,
                LanguageId     = languageId,
                Host           = GetClientIpAddress().ToString(),
                LastActivity   = DateTime.UtcNow,
                ApiAccessToken = ""
            };

            await CreateAsync(session);

            return(session);
        }
Example #2
0
        public async Task <VBSession> CreateAsync(VBSession session, bool saveChanges = true)
        {
            await db.Sessions.AddAsync(session);

            if (saveChanges)
            {
                await db.SaveChangesAsync();
            }
            return(session);
        }
Example #3
0
        public async Task <VBSession> GetCurrentAsync()
        {
            if (currentSession != null)
            {
                return(currentSession);
            }

            // ToDo: Consistent using the new prefix in ManualForumSettings instead of guessing the cookie
            string sessionCookie = GetCookieWithoutPrefix(sessionHashCookieName);

            currentSession = await GetAsync(sessionCookie, updateLastActivity : true);

            if (currentSession != null)
            {
                return(currentSession);
            }

            var cookieUser = GetUserFromCookiePasswordAsync().Result;

            // No session detected: User must be a guest
            if (cookieUser == null)
            {
                currentSession = await CreateGuestSessionAsync();

                int cnt = db.SaveChanges();
                return(currentSession);
            }

            // Cleanup old sessions that were invalid due to cookie timeout
            // ToDo: Document raw query
            int cookieTimeoutSpan       = GetCookieTimeoutSpam();
            int deletedOldSessionsCount = await db.Database.ExecuteSqlRawAsync($"delete from session where userid = {cookieUser.Id} and lastactivity < {cookieTimeoutSpan}");

            currentSession = await CreateAsync(cookieUser, location : contextAccessor.HttpContext.Request.Path);

            // ToDo: Set cookie for TLD when using subdomains (default is current subdomain if used)
            var context       = contextAccessor.HttpContext;
            var cookieOptions = new CookieOptions()
            {
                Expires = DateTime.Now.Add(settingsManager.GetCommonSettings().CookieTimeout)
            };

            context.Response.Cookies.Append($"{vbConfig.CookiePrefix}{sessionHashCookieName}", currentSession.SessionHash, cookieOptions);

            return(currentSession);
        }
        /// <summary>
        /// Get post visibilitys by user so that moderators can see deleted posts. If isModerator is null, this method checks wherever the user is global mod
        /// </summary>
        public async Task <List <VBPostVisibleState> > GetPostVisibleStatesAsync(VBSession session, bool?isModerator = false)
        {
            var postVisibilitys = new List <VBPostVisibleState> {
                VBPostVisibleState.Visible
            };

            if (session.LoggedIn)
            {
                if (!isModerator.HasValue)
                {
                    // ToDo: Check forum mod permission
                    isModerator = await userManager.IsGlobalModeratorAsync(session.User);
                }

                if (isModerator.Value)
                {
                    postVisibilitys.Add(VBPostVisibleState.Deleted);
                }
            }
            return(postVisibilitys);
        }
Example #5
0
        static void WarmUpManagers(VBThreadManager threadManager, VBSessionManager sessionManager, VBSettingsManager settingsManager, VBForumManager forumManager, VBUserManager userManager, VBThread thread, VBUser user, VBSession session)
        {
            var managerThread = threadManager.GetThreadAsync(thread.Id, writeable: true).Result;
            var replys        = threadManager.GetReplysAsync(thread.Id, start: 0, count: 1).Result;
            var settings      = settingsManager.GetCommonSettings();

            if (session != null)
            {
                // Do not update last activity since we're not in a http context => No request path avaliable
                var managerSession = sessionManager.GetAsync(session.SessionHash, updateLastActivity: false).Result;
            }

            if (user != null)
            {
                var forum = forumManager.GetCategoriesWhereUserCanAsync(user.UserGroup).Result;
                var randomUserFromManager = userManager.GetUserAsync(user.Id).Result;
            }
        }