OPDS Support (#526)
* Added some basic OPDS implementation * Fixed an issue with feed href * More changes * Added library routes and moved user code to a method so we can hack in fixed code without authentication * Images now load on the OPDS reusing our existing Image infrastructure. * Added the ability to download and moved some download code to a dedicated service * Download is working, pagination is implemented. * Refactored libraries to use pagination * Laid foundation for OpenSearch implementation * Fixed up some serialization issues and some old code that wasn't referencing helper methods * Ensure chapters are sorted when we send them over OPDS * OpenSearch implemented * Removed any support for OPDS-PS due to lack of apps supporting it. * Don't distribute development.json nor stats directory on build. * Implemented In Progress feed as well. * Ability to enable OPDS for server. OPDS now accepts initial call as POST in case app uses username/password. * UI now properly renders state for OPDS enablement. Added Collections routes. * Fixed pagination startIndex on OPDS feeds when there is less than 1 page. * Chunky Reader now works. It only accepts UTF-8 encodings * More Chunky fixes * More chunky changes, such a fussy client. * Implemented the ability to have a custom api key assigned to a user and use that api key as your authentication token against OPDS routing. * Implemented the ability to reset your API Key * Fixed favicon not being sent back correctly * Fixed an issue where images wouldn't send on OPDS feed. * Implemented Page streaming and fixed a pagination bug * Hooked in the ability to save progress in Kavita when Page Streaming
This commit is contained in:
parent
2a63e5e9e2
commit
6069d93c38
50 changed files with 2409 additions and 116 deletions
|
|
@ -11,6 +11,7 @@ using API.Extensions;
|
|||
using API.Interfaces;
|
||||
using API.Interfaces.Services;
|
||||
using AutoMapper;
|
||||
using Kavita.Common;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
|
@ -106,6 +107,7 @@ namespace API.Controllers
|
|||
|
||||
var user = _mapper.Map<AppUser>(registerDto);
|
||||
user.UserPreferences ??= new AppUserPreferences();
|
||||
user.ApiKey = HashUtil.ApiKey();
|
||||
|
||||
var result = await _userManager.CreateAsync(user, registerDto.Password);
|
||||
|
||||
|
|
@ -136,6 +138,7 @@ namespace API.Controllers
|
|||
{
|
||||
Username = user.UserName,
|
||||
Token = await _tokenService.CreateToken(user),
|
||||
ApiKey = user.ApiKey,
|
||||
Preferences = _mapper.Map<UserPreferencesDto>(user.UserPreferences)
|
||||
};
|
||||
}
|
||||
|
|
@ -180,6 +183,7 @@ namespace API.Controllers
|
|||
{
|
||||
Username = user.UserName,
|
||||
Token = await _tokenService.CreateToken(user),
|
||||
ApiKey = user.ApiKey,
|
||||
Preferences = _mapper.Map<UserPreferencesDto>(user.UserPreferences)
|
||||
};
|
||||
}
|
||||
|
|
@ -237,5 +241,26 @@ namespace API.Controllers
|
|||
return BadRequest("Something went wrong, unable to update user's roles");
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the API Key assigned with a user
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("reset-api-key")]
|
||||
public async Task<ActionResult<string>> ResetApiKey()
|
||||
{
|
||||
var user = await _unitOfWork.UserRepository.GetUserByUsernameAsync(User.GetUsername());
|
||||
|
||||
user.ApiKey = HashUtil.ApiKey();
|
||||
|
||||
if (_unitOfWork.HasChanges() && await _unitOfWork.CommitAsync())
|
||||
{
|
||||
return Ok(user.ApiKey);
|
||||
}
|
||||
|
||||
await _unitOfWork.RollbackAsync();
|
||||
return BadRequest("Something went wrong, unable to reset key");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue