123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- using InABox.Core;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml;
- namespace InABox.API
- {
- public class ASPSMSProvider : ISMSProvider
- {
- private static int aspPort = 5061;
- private static string aspHost = "xml3.aspsms.com";
- private static string aspUrl = "/xmlsvr.asp";
- private static HttpClient httpClient;
- public SMSProviderType ProviderType => SMSProviderType.ASPSMS;
- public TwoFactorAuthenticationType TwoFactorAuthenticationType => TwoFactorAuthenticationType.SMS;
- public string UserKey { get; set; }
- public string Password { get; set; }
-
- public ASPSMSProvider(string userKey, string password)
- {
- UserKey = userKey;
- Password = password;
- }
- static ASPSMSProvider()
- {
- httpClient = new HttpClient();
- }
- private Dictionary<string, string> ReadASPResponse(HttpResponseMessage response)
- {
- var xmlReader = XmlReader.Create(response.Content.ReadAsStream());
- var results = new Dictionary<string, string>();
- if (xmlReader.ReadToFollowing("aspsms"))
- {
- if (!xmlReader.Read())
- {
- return results;
- }
- while (true)
- {
- switch (xmlReader.NodeType)
- {
- case XmlNodeType.Element:
- var name = xmlReader.Name;
- if(name == "DeliveryNotification")
- {
- xmlReader.Skip();
- }
- else
- {
- results[xmlReader.Name] = xmlReader.ReadElementContentAsString();
- }
- break;
- default:
- if (!xmlReader.Read())
- {
- return results;
- }
- break;
- }
- }
- }
- return results;
- }
- public bool SendMessage(string recipient, string message)
- {
- try
- {
- var outputStream = new MemoryStream();
- var xmlTextWriter = XmlWriter.Create(outputStream);
- xmlTextWriter.WriteStartDocument();
- xmlTextWriter.WriteStartElement("aspsms");
- xmlTextWriter.WriteStartElement("Userkey");
- xmlTextWriter.WriteString(UserKey);
- xmlTextWriter.WriteEndElement();
- xmlTextWriter.WriteStartElement("Password");
- xmlTextWriter.WriteString(Password);
- xmlTextWriter.WriteEndElement();
- xmlTextWriter.WriteStartElement("Recipient");
- xmlTextWriter.WriteStartElement("PhoneNumber");
- xmlTextWriter.WriteString(recipient);
- xmlTextWriter.WriteEndElement();
- xmlTextWriter.WriteEndElement();
- xmlTextWriter.WriteStartElement("MessageData");
- xmlTextWriter.WriteString(message);
- xmlTextWriter.WriteEndElement();
- xmlTextWriter.WriteStartElement("Action");
- xmlTextWriter.WriteString("SendTextSMS");
- xmlTextWriter.WriteEndElement();
- xmlTextWriter.WriteEndElement();
- xmlTextWriter.WriteEndDocument();
- xmlTextWriter.Flush();
- outputStream.Position = 0;
- var content = new StreamContent(outputStream);
- var task = httpClient.PostAsync($"http://{aspHost}:{aspPort}{aspUrl}", content);
- task.Wait();
- var results = ReadASPResponse(task.Result);
- var errorCode = results.GetValueOrDefault("ErrorCode") ?? "1";
- if(errorCode != "1")
- {
- Logger.Send(LogType.Information, "", $"Error while sending SMS code: {results.GetValueOrDefault("ErrorDescription", "Unknown Error")}");
- return false;
- }
- return true;
- }
- catch(Exception e)
- {
- Logger.Send(LogType.Information, "", $"Error while sending SMS code: {CoreUtils.FormatException(e)}");
- return false;
- }
- }
- }
- }
|