Implement /v2/LibraryConnector/*
This commit is contained in:
parent
a56555eee4
commit
0ced3a7dd9
@ -35,7 +35,8 @@ public partial class Server
|
|||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> GetV2JobTypes(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> GetV2JobTypes(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, Enum.GetNames(typeof(Job.JobType)));
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK,
|
||||||
|
Enum.GetValues<Job.JobType>().ToDictionary(b => (byte)b, b => Enum.GetName(b)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> PostV2JobCreateType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> PostV2JobCreateType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
@ -43,7 +44,7 @@ public partial class Server
|
|||||||
if (groups.Count < 1 ||
|
if (groups.Count < 1 ||
|
||||||
!Enum.TryParse(groups[1].Value, true, out Job.JobType jobType))
|
!Enum.TryParse(groups[1].Value, true, out Job.JobType jobType))
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"Manga with ID: '{groups[1].Value}' does not exist.");
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"JobType {groups[1].Value} does not exist.");
|
||||||
}
|
}
|
||||||
|
|
||||||
string? mangaId;
|
string? mangaId;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using Tranga.LibraryConnectors;
|
||||||
|
|
||||||
namespace Tranga.Server;
|
namespace Tranga.Server;
|
||||||
|
|
||||||
@ -7,31 +8,113 @@ public partial class Server
|
|||||||
{
|
{
|
||||||
private ValueTuple<HttpStatusCode, object?> GetV2LibraryConnector(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> GetV2LibraryConnector(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotImplemented, "Not Implemented");
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, libraryConnectors);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> GetV2LibraryConnectorTypes(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> GetV2LibraryConnectorTypes(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotImplemented, "Not Implemented");
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK,
|
||||||
|
Enum.GetValues<LibraryConnector.LibraryType>().ToDictionary(b => (byte)b, b => Enum.GetName(b)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> GetV2LibraryConnectorType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> GetV2LibraryConnectorType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotImplemented, "Not Implemented");
|
if (groups.Count < 1 ||
|
||||||
|
!Enum.TryParse(groups[1].Value, true, out LibraryConnector.LibraryType libraryType))
|
||||||
|
{
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"LibraryType {groups[1].Value} does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(libraryConnectors.All(lc => lc.libraryType != libraryType))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"LibraryType {Enum.GetName(libraryType)} not configured.");
|
||||||
|
else
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, libraryConnectors.First(lc => lc.libraryType == libraryType));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> PostV2LibraryConnectorType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> PostV2LibraryConnectorType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotImplemented, "Not Implemented");
|
if (groups.Count < 1 ||
|
||||||
|
!Enum.TryParse(groups[1].Value, true, out LibraryConnector.LibraryType libraryType))
|
||||||
|
{
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"LibraryType {groups[1].Value} does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!requestParameters.TryGetValue("URL", out string? url))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'url' missing.");
|
||||||
|
|
||||||
|
switch (libraryType)
|
||||||
|
{
|
||||||
|
case LibraryConnector.LibraryType.Kavita:
|
||||||
|
if(!requestParameters.TryGetValue("username", out string? username))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'username' missing.");
|
||||||
|
if(!requestParameters.TryGetValue("password", out string? password))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'password' missing.");
|
||||||
|
Kavita kavita = new (this, url, username, password);
|
||||||
|
libraryConnectors.RemoveWhere(lc => lc.libraryType == LibraryConnector.LibraryType.Kavita);
|
||||||
|
libraryConnectors.Add(kavita);
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, kavita);
|
||||||
|
case LibraryConnector.LibraryType.Komga:
|
||||||
|
if(!requestParameters.TryGetValue("auth", out string? auth))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'auth' missing.");
|
||||||
|
Komga komga = new (this, url, auth);
|
||||||
|
libraryConnectors.RemoveWhere(lc => lc.libraryType == LibraryConnector.LibraryType.Komga);
|
||||||
|
libraryConnectors.Add(komga);
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, komga);
|
||||||
|
default: return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.MethodNotAllowed, $"LibraryType {Enum.GetName(libraryType)} is not supported.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> PostV2LibraryConnectorTypeTest(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> PostV2LibraryConnectorTypeTest(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotImplemented, "Not Implemented");
|
if (groups.Count < 1 ||
|
||||||
|
!Enum.TryParse(groups[1].Value, true, out LibraryConnector.LibraryType libraryType))
|
||||||
|
{
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"LibraryType {groups[1].Value} does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!requestParameters.TryGetValue("URL", out string? url))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'url' missing.");
|
||||||
|
|
||||||
|
switch (libraryType)
|
||||||
|
{
|
||||||
|
case LibraryConnector.LibraryType.Kavita:
|
||||||
|
if(!requestParameters.TryGetValue("username", out string? username))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'username' missing.");
|
||||||
|
if(!requestParameters.TryGetValue("password", out string? password))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'password' missing.");
|
||||||
|
Kavita kavita = new (this, url, username, password);
|
||||||
|
return kavita.Test() switch
|
||||||
|
{
|
||||||
|
true => new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, kavita),
|
||||||
|
_ => new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.FailedDependency, kavita)
|
||||||
|
};
|
||||||
|
case LibraryConnector.LibraryType.Komga:
|
||||||
|
if(!requestParameters.TryGetValue("auth", out string? auth))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'auth' missing.");
|
||||||
|
Komga komga = new (this, url, auth);
|
||||||
|
return komga.Test() switch
|
||||||
|
{
|
||||||
|
true => new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, komga),
|
||||||
|
_ => new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.FailedDependency, komga)
|
||||||
|
};
|
||||||
|
default: return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.MethodNotAllowed, $"LibraryType {Enum.GetName(libraryType)} is not supported.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> DeleteV2LibraryConnectorType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> DeleteV2LibraryConnectorType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotImplemented, "Not Implemented");
|
if (groups.Count < 1 ||
|
||||||
|
!Enum.TryParse(groups[1].Value, true, out LibraryConnector.LibraryType libraryType))
|
||||||
|
{
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"LibraryType {groups[1].Value} does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(libraryConnectors.All(lc => lc.libraryType != libraryType))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"LibraryType {Enum.GetName(libraryType)} not configured.");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
libraryConnectors.Remove(libraryConnectors.First(lc => lc.libraryType == libraryType));
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -640,9 +640,9 @@ Returns the Library-Connector for the specified Type.
|
|||||||
|
|
||||||
[LibraryConnector](Types.md#libraryconnector)
|
[LibraryConnector](Types.md#libraryconnector)
|
||||||
|
|
||||||
| StatusCode | Meaning |
|
| StatusCode | Meaning |
|
||||||
|------------|---------------------------------------|
|
|------------|----------------------------------------------------|
|
||||||
| 404 | Library Connector Type does not exist |
|
| 404 | Library Connector of specified Type does not exist |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### <sub>![POST](https://img.shields.io/badge/POST-00f)</sub> `/v2/LibraryConnector/<Type>`
|
### <sub>![POST](https://img.shields.io/badge/POST-00f)</sub> `/v2/LibraryConnector/<Type>`
|
||||||
@ -681,6 +681,7 @@ Creates a Library-Connector of the specified Type.
|
|||||||
| StatusCode | Meaning |
|
| StatusCode | Meaning |
|
||||||
|------------|----------------------------------|
|
|------------|----------------------------------|
|
||||||
| 404 | Library Connector does not exist |
|
| 404 | Library Connector does not exist |
|
||||||
|
| 406 | Missing Parameter |
|
||||||
| 500 | Parsing Error |
|
| 500 | Parsing Error |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@ -715,12 +716,13 @@ Tests a Library-Connector of the specified Type.
|
|||||||
<details>
|
<details>
|
||||||
<summary>Returns</summary>
|
<summary>Returns</summary>
|
||||||
|
|
||||||
| StatusCode | Meaning |
|
| StatusCode | Meaning |
|
||||||
|------------|---------------------------------------|
|
|------------|------------------------------------|
|
||||||
| 200 | Test successful |
|
| 200 | Test successful |
|
||||||
| 404 | Library Connector Type does not exist |
|
| 404 | Library Connector does not exist |
|
||||||
| 408 | Test failed |
|
| 406 | Missing Parameter |
|
||||||
| 500 | Parsing Error |
|
| 424 | Test failed |
|
||||||
|
| 500 | Parsing Error |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### <sub>![DELETE](https://img.shields.io/badge/DELETE-f00)</sub> `/v2/LibraryConnector/<Type>`
|
### <sub>![DELETE](https://img.shields.io/badge/DELETE-f00)</sub> `/v2/LibraryConnector/<Type>`
|
||||||
|
Loading…
Reference in New Issue
Block a user