public async Task <IActionResult> Index()
        {
            var quotes = await _quoteApiClient.GetQuotes();

            var isMod = false;

            if (User.Identity.IsAuthenticated)
            {
                isMod = _modService.IsUserModerator(User.Identity.Name);
            }

            var userSubmittedQuotes = quotes.Quotes.Select(q => new UserSubmittedQuote
            {
                QuoteId          = q.QuoteId,
                QuoteText        = q.QuoteText,
                CreatedBy        = q.CreatedBy,
                Disabled         = q.Disabled,
                EditedBy         = q.LastEditedBy,
                EditedAt         = q.EditedAt,
                ShowEditOrDelete = isMod || (User.Identity.IsAuthenticated &&
                                             q.CreatedBy.ToLower() == User.Identity.Name.ToLower())
            }).ToList();

            var quoteViewModels = new QuoteViewModel
            {
                UserSubmittedQuotes = userSubmittedQuotes,
                IsMod = isMod
            };

            return(View(quoteViewModels));
        }
        public async Task <IActionResult> List()
        {
            LoggedInTwitchUser twitchUser = null;

            ViewBag.UserIsMod = User.Identity.IsAuthenticated;

            if (User.Identity.IsAuthenticated)
            {
                var username = User.FindFirst(c => c.Type == TwitchAuthenticationConstants.Claims.DisplayName)
                               ?.Value;

                var userVips = await _vipApiClient.GetUserVipCount(new GetUserVipCountRequest
                {
                    Username = username
                });

                twitchUser = new LoggedInTwitchUser
                {
                    Username = username,
                    IsMod    = _modService.IsUserModerator(username),
                    Vips     = userVips?.Vips ?? 0
                };

                ViewBag.UserIsMod = twitchUser?.IsMod ?? false;
                ViewBag.Username  = twitchUser?.Username ?? string.Empty;
            }

            var allCurrentSongRequests = await _playlistApiClient.GetAllCurrentSongRequests();

            var playlistModel = new PlaylistViewModel
            {
                TwitchUser = twitchUser
            };

            if (allCurrentSongRequests != null)
            {
                playlistModel.CurrentSong = allCurrentSongRequests.CurrentSong;
                playlistModel.RegularList = allCurrentSongRequests.RegularList
                                            .Where(r => r.songRequestId != allCurrentSongRequests.CurrentSong.songRequestId).ToArray();
                playlistModel.VipList = allCurrentSongRequests.VipList
                                        .Where(r => r.songRequestId != allCurrentSongRequests.CurrentSong.songRequestId).ToArray();
            }

            ViewBag.UserHasVip = User.Identity.IsAuthenticated && (_vipApiClient.DoesUserHaveVip(
                                                                       new DoesUserHaveVipRequestModel
            {
                Username = User.Identity.Name.ToLower()
            })?.Result?.HasVip ?? false);

            var playlistTask = await _playlistApiClient.IsPlaylistOpen();

            ViewBag.IsPlaylistOpen = playlistTask == PlaylistState.Open;

            return(View(playlistModel));
        }
        public async Task <IViewComponentResult> InvokeAsync()
        {
            var isUserMod = (HttpContext?.User?.Identity?.IsAuthenticated ?? false) &&
                            _modService.IsUserModerator(User.Identity.Name);

            // Get the current page so we can redirect the user back here after login/logout
            // TODO: Consider if the page we are returning to will attempt to auto login or anything similar
            var currentPage = HttpContext.Request.Path;

            return(View(new NavigationViewModel
            {
                IsBroadcasterOnline = true,
                LoginLogoutRedirect = currentPage,
                UserIsMod = isUserMod
            }));
        }