Implemented /v2/NotificationConnector/*
This commit is contained in:
parent
0ced3a7dd9
commit
2651a0c53b
@ -1,5 +1,6 @@
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using Tranga.NotificationConnectors;
|
||||||
|
|
||||||
namespace Tranga.Server;
|
namespace Tranga.Server;
|
||||||
|
|
||||||
@ -7,31 +8,125 @@ public partial class Server
|
|||||||
{
|
{
|
||||||
private ValueTuple<HttpStatusCode, object?> GetV2NotificationConnector(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> GetV2NotificationConnector(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotImplemented, "Not Implemented");
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, notificationConnectors);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> GetV2NotificationConnectorTypes(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> GetV2NotificationConnectorTypes(GroupCollection groups, Dictionary<string, string> requestParameters)
|
||||||
{
|
{
|
||||||
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotImplemented, "Not Implemented");
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK,
|
||||||
|
Enum.GetValues<NotificationConnectors.NotificationConnector.NotificationConnectorType>().ToDictionary(b => (byte)b, b => Enum.GetName(b)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> GetV2NotificationConnectorType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> GetV2NotificationConnectorType(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 NotificationConnector.NotificationConnectorType notificationConnectorType))
|
||||||
|
{
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"NotificationType {groups[1].Value} does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(notificationConnectors.All(nc => nc.notificationConnectorType != notificationConnectorType))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"NotificationType {Enum.GetName(notificationConnectorType)} not configured.");
|
||||||
|
else
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, notificationConnectors.First(nc => nc.notificationConnectorType != notificationConnectorType));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> PostV2NotificationConnectorType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> PostV2NotificationConnectorType(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 NotificationConnector.NotificationConnectorType notificationConnectorType))
|
||||||
|
{
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"NotificationType {groups[1].Value} does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
string? url;
|
||||||
|
switch (notificationConnectorType)
|
||||||
|
{
|
||||||
|
case NotificationConnector.NotificationConnectorType.Gotify:
|
||||||
|
if(!requestParameters.TryGetValue("url", out url))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'url' missing.");
|
||||||
|
if(!requestParameters.TryGetValue("appToken", out string? appToken))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'appToken' missing.");
|
||||||
|
Gotify gotify = new (this, url, appToken);
|
||||||
|
this.notificationConnectors.RemoveWhere(nc =>
|
||||||
|
nc.notificationConnectorType == NotificationConnector.NotificationConnectorType.Gotify);
|
||||||
|
this.notificationConnectors.Add(gotify);
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, gotify);
|
||||||
|
case NotificationConnector.NotificationConnectorType.LunaSea:
|
||||||
|
if(!requestParameters.TryGetValue("webhook", out string? webhook))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'webhook' missing.");
|
||||||
|
LunaSea lunaSea = new (this, webhook);
|
||||||
|
this.notificationConnectors.RemoveWhere(nc =>
|
||||||
|
nc.notificationConnectorType == NotificationConnector.NotificationConnectorType.LunaSea);
|
||||||
|
this.notificationConnectors.Add(lunaSea);
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, lunaSea);
|
||||||
|
case NotificationConnector.NotificationConnectorType.Ntfy:
|
||||||
|
if(!requestParameters.TryGetValue("url", out url))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'url' missing.");
|
||||||
|
if(!requestParameters.TryGetValue("auth", out string? auth))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'auth' missing.");
|
||||||
|
Ntfy ntfy = new(this, url, auth);
|
||||||
|
this.notificationConnectors.RemoveWhere(nc =>
|
||||||
|
nc.notificationConnectorType == NotificationConnector.NotificationConnectorType.Ntfy);
|
||||||
|
this.notificationConnectors.Add(ntfy);
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, ntfy);
|
||||||
|
default:
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.MethodNotAllowed, $"NotificationType {Enum.GetName(notificationConnectorType)} is not supported.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> PostV2NotificationConnectorTypeTest(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> PostV2NotificationConnectorTypeTest(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 NotificationConnector.NotificationConnectorType notificationConnectorType))
|
||||||
|
{
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"NotificationType {groups[1].Value} does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
string? url;
|
||||||
|
switch (notificationConnectorType)
|
||||||
|
{
|
||||||
|
case NotificationConnector.NotificationConnectorType.Gotify:
|
||||||
|
if(!requestParameters.TryGetValue("url", out url))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'url' missing.");
|
||||||
|
if(!requestParameters.TryGetValue("appToken", out string? appToken))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'appToken' missing.");
|
||||||
|
Gotify gotify = new (this, url, appToken);
|
||||||
|
gotify.SendNotification("Tranga Test", "It was successful :3");
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, gotify);
|
||||||
|
case NotificationConnector.NotificationConnectorType.LunaSea:
|
||||||
|
if(!requestParameters.TryGetValue("webhook", out string? webhook))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'webhook' missing.");
|
||||||
|
LunaSea lunaSea = new (this, webhook);
|
||||||
|
lunaSea.SendNotification("Tranga Test", "It was successful :3");
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, lunaSea);
|
||||||
|
case NotificationConnector.NotificationConnectorType.Ntfy:
|
||||||
|
if(!requestParameters.TryGetValue("url", out url))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'url' missing.");
|
||||||
|
if(!requestParameters.TryGetValue("auth", out string? auth))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotAcceptable, "Parameter 'auth' missing.");
|
||||||
|
Ntfy ntfy = new(this, url, auth);
|
||||||
|
ntfy.SendNotification("Tranga Test", "It was successful :3");
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, ntfy);
|
||||||
|
default:
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.MethodNotAllowed, $"NotificationType {Enum.GetName(notificationConnectorType)} is not supported.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ValueTuple<HttpStatusCode, object?> DeleteV2NotificationConnectorType(GroupCollection groups, Dictionary<string, string> requestParameters)
|
private ValueTuple<HttpStatusCode, object?> DeleteV2NotificationConnectorType(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 NotificationConnector.NotificationConnectorType notificationConnectorType))
|
||||||
|
{
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"NotificationType {groups[1].Value} does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(notificationConnectors.All(nc => nc.notificationConnectorType != notificationConnectorType))
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.NotFound, $"NotificationType {Enum.GetName(notificationConnectorType)} not configured.");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
notificationConnectors.Remove(notificationConnectors.First(nc => nc.notificationConnectorType != notificationConnectorType));
|
||||||
|
return new ValueTuple<HttpStatusCode, object?>(HttpStatusCode.OK, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -784,6 +784,7 @@ Returns the configured Notification-Connector of the specified Type.
|
|||||||
| StatusCode | Meaning |
|
| StatusCode | Meaning |
|
||||||
|------------|---------------------------------------|
|
|------------|---------------------------------------|
|
||||||
| 404 | Library Connector Type does not exist |
|
| 404 | Library Connector Type does not exist |
|
||||||
|
| 500 | Parsing Error |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### <sub>![POST](https://img.shields.io/badge/POST-00f)</sub> `/v2/NotificationConnector/<Type>`
|
### <sub>![POST](https://img.shields.io/badge/POST-00f)</sub> `/v2/NotificationConnector/<Type>`
|
||||||
@ -825,6 +826,7 @@ Creates a Notification-Connector of the specified Type.
|
|||||||
| StatusCode | Meaning |
|
| StatusCode | Meaning |
|
||||||
|------------|--------------------------------------------|
|
|------------|--------------------------------------------|
|
||||||
| 404 | Notification Connector Type does not exist |
|
| 404 | Notification Connector Type does not exist |
|
||||||
|
| 406 | Missing Parameter |
|
||||||
| 500 | Parsing Error |
|
| 500 | Parsing Error |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@ -866,7 +868,7 @@ Tests a Notification-Connector of the specified Type.
|
|||||||
|------------|--------------------------------------------|
|
|------------|--------------------------------------------|
|
||||||
| 200 | Test successful |
|
| 200 | Test successful |
|
||||||
| 404 | Notification Connector Type does not exist |
|
| 404 | Notification Connector Type does not exist |
|
||||||
| 408 | Test failed |
|
| 406 | Missing Parameter |
|
||||||
| 500 | Parsing Error |
|
| 500 | Parsing Error |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user