< Summary

Information
Class: OzonOrdersWeb.Areas.Identity.Pages.Account.LogoutModel
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Identity/Pages/Account/Logout.cshtml.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 36
Coverable lines: 36
Total lines: 93
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 26
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
get_CurrentUser()100%210%
get_UserRoles()100%210%
get_UserIpAddress()100%210%
get_UserAgent()100%210%
get_SessionStartTime()100%210%
OnGetAsync()0%210140%
OnPostAsync()0%156120%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Areas/Identity/Pages/Account/Logout.cshtml.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3#nullable disable
 4
 5using System;
 6using System.Linq;
 7using System.Threading.Tasks;
 8using Microsoft.AspNetCore.Authorization;
 9using Microsoft.AspNetCore.Identity;
 10using Microsoft.AspNetCore.Mvc;
 11using Microsoft.AspNetCore.Mvc.RazorPages;
 12using Microsoft.Extensions.Logging;
 13using OzonRepositories.Context.Identity;
 14
 15namespace OzonOrdersWeb.Areas.Identity.Pages.Account
 16{
 17    [Authorize]
 18    public class LogoutModel : PageModel
 19    {
 20        private readonly SignInManager<CustomIdentityUser> _signInManager;
 21        private readonly UserManager<CustomIdentityUser> _userManager;
 22        private readonly ILogger<LogoutModel> _logger;
 23
 024        public LogoutModel(
 025            SignInManager<CustomIdentityUser> signInManager,
 026            UserManager<CustomIdentityUser> userManager,
 027            ILogger<LogoutModel> logger)
 28        {
 029            _signInManager = signInManager;
 030            _userManager = userManager;
 031            _logger = logger;
 032        }
 33
 034        public CustomIdentityUser CurrentUser { get; set; }
 035        public string[] UserRoles { get; set; }
 036        public string UserIpAddress { get; set; }
 037        public string UserAgent { get; set; }
 038        public DateTime? SessionStartTime { get; set; }
 39
 40        public async Task<IActionResult> OnGetAsync()
 41        {
 042            if (User.Identity?.IsAuthenticated == true)
 43            {
 044                CurrentUser = await _userManager.GetUserAsync(User);
 045                if (CurrentUser != null)
 46                {
 047                    UserRoles = (await _userManager.GetRolesAsync(CurrentUser)).ToArray();
 048                    UserIpAddress = HttpContext.Connection.RemoteIpAddress?.ToString() ?? "Неизвестен";
 049                    UserAgent = HttpContext.Request.Headers["User-Agent"].ToString();
 50
 51                    // Пытаемся получить время начала сессии из cookie или устанавливаем текущее время
 052                    if (HttpContext.Request.Cookies.TryGetValue("SessionStartTime", out var sessionStartStr))
 53                    {
 054                        if (DateTime.TryParse(sessionStartStr, out var sessionStart))
 55                        {
 056                            SessionStartTime = sessionStart;
 57                        }
 58                    }
 59                    else
 60                    {
 061                        SessionStartTime = DateTime.Now;
 62                    }
 63                }
 64            }
 065            return Page();
 066        }
 67
 68        public async Task<IActionResult> OnPostAsync(string returnUrl = null)
 69        {
 070            if (User.Identity?.IsAuthenticated == true)
 71            {
 072                var user = await _userManager.GetUserAsync(User);
 073                var userName = user?.UserName ?? "Unknown";
 074                var userId = user?.Id;
 75
 76                // Access cache is managed per-request; no cache invalidation needed on logout.
 077                await _signInManager.SignOutAsync();
 078                _logger.LogInformation("Пользователь {UserName} вышел из системы.", userName);
 079            }
 80
 081            if (returnUrl != null)
 82            {
 083                return LocalRedirect(returnUrl);
 84            }
 85            else
 86            {
 87                // This needs to be a redirect so that the browser performs a new
 88                // request and the identity for the user gets updated.
 089                return RedirectToPage();
 90            }
 091        }
 92    }
 93}