feat(admin): added backend for admin pages
This commit is contained in:
parent
54cfc05b88
commit
56ea7fb7f0
26 changed files with 662 additions and 42 deletions
|
|
@ -49,19 +49,87 @@ public class AuthService : IAuthService
|
|||
|
||||
var session = await _sessionRepo.GetUserSession(sessionToken);
|
||||
|
||||
if (session == null)
|
||||
if (session == null) //session doesn't exist
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (session.ExpiresOn < DateTime.Now)
|
||||
else if (session.ExpiresOn < DateTime.Now) //session has timed out
|
||||
{
|
||||
await _sessionRepo.DeleteSession(sessionToken);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
else //session exists and hasn't timed out
|
||||
{
|
||||
await _sessionRepo.RefreshSessionExpiry(sessionToken);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> IsAdmin(string sessionToken)
|
||||
{
|
||||
var session = await _sessionRepo.GetUserSession(sessionToken);
|
||||
|
||||
if (session == null)
|
||||
{
|
||||
throw new SessionNotFoundException();
|
||||
}
|
||||
|
||||
return session.Login.IsAdmin;
|
||||
}
|
||||
|
||||
public async Task<UserLoginDTO[]> GetLogins()
|
||||
{
|
||||
var logins = await _loginRepo.GetUserLogins();
|
||||
|
||||
var loginDTOs = new List<UserLoginDTO>();
|
||||
|
||||
foreach (var login in logins)
|
||||
{
|
||||
loginDTOs.Add(new UserLoginDTO(login));
|
||||
}
|
||||
|
||||
return loginDTOs.ToArray();
|
||||
}
|
||||
|
||||
public async Task<UserLoginDTO> GetLogin(string username)
|
||||
{
|
||||
var login = await _loginRepo.GetUserLogin(username);
|
||||
|
||||
return new UserLoginDTO(login);
|
||||
}
|
||||
|
||||
public async Task<UserLoginDTO> CreateLogin(string username, string password)
|
||||
{
|
||||
var hashedPassword = BCrypt.Net.BCrypt.HashPassword(password);
|
||||
|
||||
var newLogin = await _loginRepo.CreateLogin(username, hashedPassword, false);
|
||||
|
||||
return new UserLoginDTO(newLogin);
|
||||
}
|
||||
|
||||
public async Task UpdateLoginOwnPassword(string username, string newPassword, string oldPassword)
|
||||
{
|
||||
var login = await _loginRepo.GetUserLogin(username);
|
||||
|
||||
if (!BCrypt.Net.BCrypt.Verify(oldPassword, login.HashedPassword))
|
||||
{
|
||||
throw new LoginFailedException();
|
||||
}
|
||||
|
||||
await UpdateLoginPassword(username, newPassword);
|
||||
}
|
||||
|
||||
public async Task UpdateLoginPassword(string username, string newPassword)
|
||||
{
|
||||
var hashedNewPassword = BCrypt.Net.BCrypt.HashPassword(newPassword);
|
||||
|
||||
await _loginRepo.ChangeUserPassword(username, hashedNewPassword);
|
||||
}
|
||||
|
||||
public async Task<UserLoginDTO> DeleteLogin(string username)
|
||||
{
|
||||
var deletedLogin = await _loginRepo.DeleteLogin(username);
|
||||
|
||||
return new UserLoginDTO(deletedLogin);
|
||||
}
|
||||
}
|
||||
|
|
@ -6,4 +6,11 @@ public interface IAuthService
|
|||
{
|
||||
public Task<UserSessionDTO> AuthenticateUser(string username, string password);
|
||||
public Task<bool> IsAuthenticated(string? sessionToken);
|
||||
public Task<bool> IsAdmin(string sessionToken);
|
||||
public Task<UserLoginDTO[]> GetLogins();
|
||||
public Task<UserLoginDTO> GetLogin(string username);
|
||||
public Task<UserLoginDTO> CreateLogin(string username, string password);
|
||||
public Task UpdateLoginOwnPassword(string username, string newPassword, string oldPassword);
|
||||
public Task UpdateLoginPassword(string username, string newPassword);
|
||||
public Task<UserLoginDTO> DeleteLogin(string username);
|
||||
}
|
||||
|
|
@ -7,4 +7,8 @@ namespace JellyGlass.Services;
|
|||
public interface IServerService
|
||||
{
|
||||
public Task<ServerDTO[]> GetServers();
|
||||
public Task<ServerDTO> GetServerByID(int id);
|
||||
public Task<ServerDTO> CreateServer(string owner, string url, string apiToken);
|
||||
public Task<ServerDTO> UpdateServer(int id, string owner, string url, string apiToken);
|
||||
public Task<ServerDTO> DeleteServer(int id);
|
||||
}
|
||||
|
|
@ -28,11 +28,9 @@ public class ServerService : IServerService
|
|||
{
|
||||
_logger.LogInformation($"ID for server {client.InstanceUrl} is {client.ID}");
|
||||
|
||||
var dto = new ServerDTO();
|
||||
var server = servers.First(s => s.Url == client.InstanceUrl);
|
||||
dto.Id = client.ID;
|
||||
dto.Url = client.InstanceUrl;
|
||||
dto.Owner = server.Owner;
|
||||
var dto = new ServerDTO(server);
|
||||
dto.JellyfinServerID = client.ID;
|
||||
|
||||
dtos.Add(dto);
|
||||
}
|
||||
|
|
@ -51,17 +49,31 @@ public class ServerService : IServerService
|
|||
return dtos.ToArray();
|
||||
}
|
||||
|
||||
public async Task<ServerDTO[]> GetServers2()
|
||||
public async Task<ServerDTO> GetServerByID(int id)
|
||||
{
|
||||
var servers = await _repository.GetServers();
|
||||
var server = await _repository.GetServerById(id);
|
||||
|
||||
var dtos = new List<ServerDTO>();
|
||||
return new ServerDTO(server);
|
||||
}
|
||||
|
||||
foreach (var s in servers)
|
||||
{
|
||||
dtos.Add(new ServerDTO(s));
|
||||
}
|
||||
public async Task<ServerDTO> CreateServer(string owner, string url, string apiToken)
|
||||
{
|
||||
var newServer = await _repository.CreateServer(owner, url, apiToken);
|
||||
|
||||
return dtos.ToArray();
|
||||
return new ServerDTO(newServer);
|
||||
}
|
||||
|
||||
public async Task<ServerDTO> UpdateServer(int id, string owner, string url, string apiToken)
|
||||
{
|
||||
var updatedServer = await _repository.UpdateServer(id, owner, url, apiToken);
|
||||
|
||||
return new ServerDTO(updatedServer);
|
||||
}
|
||||
|
||||
public async Task<ServerDTO> DeleteServer(int id)
|
||||
{
|
||||
var deletedServer = await _repository.DeleteServer(id);
|
||||
|
||||
return new ServerDTO(deletedServer);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue