SecondBot/SecondBotEvents/Commands/StreamAdmin.cs
2022-03-17 21:08:02 +00:00

99 lines
4 KiB
C#

using EmbedIO;
using EmbedIO.Routing;
using EmbedIO.WebApi;
using Newtonsoft.Json;
using OpenMetaverse;
using RestSharp;
using SecondBotEvents.Services;
using System;
namespace SecondBotEvents.Commands
{
public class StreamAdmin : CommandsAPI
{
public StreamAdmin(EventsSecondBot setmaster) : base(setmaster)
{
}
[About("A streamadin command")]
[ReturnHints("True|False")]
[ReturnHintsFailure("Bad reply: ...")]
[ReturnHintsFailure("Endpoint is empty")]
[ReturnHintsFailure("Endpointcode is empty")]
[ReturnHintsFailure("HTTP status code: ...")]
[ReturnHintsFailure("Error: ...")]
[ReturnHintsFailure("Notecard title is to short")]
[ArgHints("endpoint","Text","The end point")]
[ArgHints("endpointcode", "Text", "The end point code")]
[Route(HttpVerbs.Post, "/FetchNextNotecard/{token}")]
public object FetchNextNotecard([FormField] string endpoint, [FormField] string endpointcode, string token)
{
if (AllowToken(token) == false)
{
return Failure("Token not accepted");
}
if (SecondbotHelpers.notempty(endpoint) == false)
{
return Failure("Endpoint is empty", "FetchNextNotecard", new [] { endpoint, endpointcode });
}
if (SecondbotHelpers.notempty(endpointcode) == false)
{
return Failure("Endpointcode is empty", "FetchNextNotecard", new [] { endpoint, endpointcode });
}
string attempt_endpoint = endpoint + "sys.php";
token = SecondbotHelpers.GetSHA1(SecondbotHelpers.UnixTimeNow().ToString() + "NotecardNext" + endpointcode);
var client = new RestClient(attempt_endpoint);
var request = new RestRequest("Notecard/Next", Method.Post);
string unixtime = SecondbotHelpers.UnixTimeNow().ToString();
request.AddParameter("token", token);
request.AddParameter("unixtime", unixtime);
request.AddParameter("method", "Notecard");
request.AddParameter("action", "Next");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
RestResponse endpoint_checks = client.ExecutePostAsync(request).Result;
if (endpoint_checks.StatusCode != System.Net.HttpStatusCode.OK)
{
return Failure("HTTP status code: " + endpoint_checks.StatusCode.ToString(), "FetchNextNotecard", new [] { endpoint, endpointcode });
}
try
{
NotecardEndpoint server_reply = JsonConvert.DeserializeObject<NotecardEndpoint>(endpoint_checks.Content);
if (server_reply.status == false)
{
return Failure("Bad reply: " + server_reply.message, "FetchNextNotecard", new [] { endpoint, endpointcode });
}
if (server_reply.NotecardTitle.Length < 3)
{
return Failure("Notecard title is to short", "FetchNextNotecard", new [] { endpoint, endpointcode });
}
return BasicReply
(
bot.SendNotecard(server_reply.NotecardTitle,
server_reply.NotecardContent,
(UUID)server_reply.AvatarUUID).ToString(),
"FetchNextNotecard",
new [] { endpoint, endpointcode }
);
}
catch (Exception e)
{
return Failure("Error: " + e.Message + "", "FetchNextNotecard", new [] { endpoint, endpointcode });
}
}
public class NotecardEndpoint : BasicEndpoint
{
public string AvatarUUID { get; set; }
public string NotecardTitle { get; set; }
public string NotecardContent { get; set; }
}
public class BasicEndpoint
{
public bool status { get; set; }
public string message { get; set; }
}
}
}