88 lines
3.1 KiB
C#
88 lines
3.1 KiB
C#
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
using SpotifyAPI.Web;
|
|
using System.Web;
|
|
|
|
namespace sotd.Pages;
|
|
|
|
public class UserModel : PageModel
|
|
{
|
|
private readonly ILogger<UserModel> _logger;
|
|
|
|
public UserModel(ILogger<UserModel> logger)
|
|
{
|
|
_logger = logger;
|
|
this.UserNickName = "";
|
|
this.UserName = "";
|
|
}
|
|
|
|
public int userId { get; set; }
|
|
|
|
public string UserName { get; set; }
|
|
|
|
public bool IsSpotifyAuthenticated { get; set; }
|
|
|
|
[BindProperty]
|
|
public string UserNickName { get; set; }
|
|
|
|
public async Task OnGet(int userIndex, [FromServices] SpotifyApiClient spotifyClient)
|
|
{
|
|
using (var dci = DataContext.Instance)
|
|
{
|
|
var user = dci.Users?.Find(userIndex);
|
|
this.UserName = user == null ? string.Empty : (user.Name ?? string.Empty);
|
|
this.UserNickName = user == null ? string.Empty : (user.NickName ?? string.Empty);
|
|
this.userId = userIndex;
|
|
this.IsSpotifyAuthenticated = await spotifyClient.IsUserAuthenticatedAsync(user);
|
|
}
|
|
}
|
|
|
|
public async Task OnPost(int userIndex, [FromServices] SpotifyApiClient spotifyClient)
|
|
{
|
|
using (var dci = DataContext.Instance)
|
|
{
|
|
var user = dci.Users?.Find(userIndex);
|
|
if (user != null)
|
|
{
|
|
user.NickName = this.UserNickName;
|
|
dci.SaveChanges();
|
|
this.UserName = user.Name ?? string.Empty;
|
|
this.IsSpotifyAuthenticated = await spotifyClient.IsUserAuthenticatedAsync(user);
|
|
}
|
|
}
|
|
}
|
|
|
|
public IActionResult OnPostSpotifyLogin(int userIndex, string currentUri, [FromServices] SpotifyApiClient spotifyClient)
|
|
{
|
|
_logger.LogTrace($"Attempting Spotify login for user with id {userIndex}.");
|
|
|
|
var loginRequest = new LoginRequest(
|
|
new Uri(spotifyClient.GetLoginRedirectUri()),
|
|
AppConfiguration.Instance.SpotifyClientId,
|
|
LoginRequest.ResponseType.Code)
|
|
{
|
|
Scope = new[] { Scopes.PlaylistReadPrivate, Scopes.PlaylistReadCollaborative, Scopes.PlaylistModifyPrivate, Scopes.PlaylistModifyPublic, Scopes.UgcImageUpload }
|
|
};
|
|
var redirectUri = loginRequest.ToUri().ToString() + $"&finalRedirect={HttpUtility.UrlEncode($"{Request.Scheme}://{Request.Host}:{Request.Host.Port ?? 80}{Request.Path}")}";
|
|
|
|
return this.Redirect(redirectUri);
|
|
}
|
|
|
|
public async Task OnPostSpotifyLogout(int userIndex, [FromServices] SpotifyApiClient spotifyClient)
|
|
{
|
|
_logger.LogTrace($"Attempting to deauthorize Spotify for user with id {userIndex}.");
|
|
|
|
using (var dci = DataContext.Instance)
|
|
{
|
|
var user = dci.Users?.Find(userIndex);
|
|
if (user != null)
|
|
{
|
|
await spotifyClient.DeAuthorizeUserAsync(user);
|
|
user.NickName = this.UserNickName;
|
|
this.UserName = user.Name ?? string.Empty;
|
|
}
|
|
}
|
|
}
|
|
}
|