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(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 Failure("@todo notecard sending"); } 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; } } } }