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); }
public async Task <VBSession> CreateAsync(VBSession session, bool saveChanges = true) { await db.Sessions.AddAsync(session); if (saveChanges) { await db.SaveChangesAsync(); } return(session); }
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); }
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; } }