183 lines
6.5 KiB
C#
183 lines
6.5 KiB
C#
using System;
|
|
using System.Text;
|
|
using System.Collections.Generic;
|
|
using rockfishCore.Models;
|
|
using rockfishCore.Util;
|
|
|
|
using MailKit.Net.Imap;
|
|
using MailKit.Search;
|
|
using MailKit;
|
|
using MimeKit;
|
|
|
|
|
|
|
|
|
|
namespace rockfishCore.Util
|
|
{
|
|
//Trial Key request handler
|
|
public static class TrialKeyRequestHandler
|
|
{
|
|
//non anonymous return object for array
|
|
//https://stackoverflow.com/a/3202396
|
|
private class retObject
|
|
{
|
|
public string from;
|
|
public string subject;
|
|
public string date;
|
|
public uint uid;
|
|
}
|
|
|
|
//MAILKIT DOCS
|
|
//https://github.com/jstedfast/MailKit#using-mailkit
|
|
|
|
public static dynamic Requests()
|
|
{
|
|
try
|
|
{
|
|
List<retObject> ret = new List<retObject>();
|
|
List<RfMail.rfMailMessage> msgs = RfMail.GetMessages(SearchQuery.SubjectContains("Request for 30 day temporary").And(SearchQuery.NotAnswered).And(SearchQuery.NotDeleted));
|
|
|
|
|
|
foreach (RfMail.rfMailMessage m in msgs)
|
|
{
|
|
ret.Add(new retObject()
|
|
{
|
|
uid = m.uid,
|
|
subject = m.message.Subject,
|
|
date = m.message.Date.LocalDateTime.ToString("g"),
|
|
from = m.message.From.ToString()
|
|
});
|
|
}
|
|
|
|
|
|
return new { ok = 1, requests = ret };
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return new
|
|
{
|
|
error = 1,
|
|
msg = "Error @ TrialKeyRequestHandler->Requests()",
|
|
error_detail = new { message = e.Message, stack = e.StackTrace }
|
|
};
|
|
}
|
|
}//requests
|
|
|
|
|
|
|
|
|
|
public static dynamic GenerateFromRequest(uint uid, LicenseTemplates licenseTemplates, string authUser, rockfishContext ct)
|
|
{
|
|
try
|
|
{
|
|
using (var client = new ImapClient())
|
|
{
|
|
var m = RfMail.GetMessage(uid);
|
|
|
|
string greetingReplySubject = "re: " + m.Subject;
|
|
|
|
//Extract request message fields
|
|
string replyTo = m.From.ToString();
|
|
|
|
//get request message body
|
|
string request = m.TextBody;
|
|
|
|
//Parse request message for deets
|
|
if (string.IsNullOrWhiteSpace(request))
|
|
{
|
|
throw new System.NotSupportedException("TrialKeyRequestHandler->GenerateFromRequest: error text body of request email is empty");
|
|
}
|
|
bool bLite = m.Subject.Contains("AyaNova Lite");
|
|
int nNameStart = request.IndexOf("Name:\r\n") + 7;
|
|
int nNameEnd = request.IndexOf("Company:\r\n");
|
|
int nCompanyStart = nNameEnd + 10;
|
|
int nCompanyEnd = request.IndexOf("Referrer:\r\n");
|
|
string sName = request.Substring(nNameStart, nNameEnd - nNameStart).Trim();
|
|
if (sName.Contains(" "))
|
|
sName = sName.Split(' ')[0];
|
|
string sRegTo = request.Substring(nCompanyStart, nCompanyEnd - nCompanyStart).Trim();
|
|
|
|
//make keycode
|
|
string keyCode = KeyFactory.GetTrialKey(sRegTo, bLite, licenseTemplates, authUser, replyTo, ct);//case 3233
|
|
|
|
//get greeting and subject
|
|
string greeting = string.Empty;
|
|
string keyEmailSubject = string.Empty;
|
|
|
|
if (bLite)
|
|
{
|
|
//No lite trial greeting but text looks ok to just use full trial greeting so going with that
|
|
//(the column is in the DB but there is no UI for it and it's null)
|
|
//greeting = licenseTemplates.LiteTrialGreeting.Replace("[FirstName]", sName);
|
|
greeting = licenseTemplates.FullTrialGreeting.Replace("[FirstName]", sName);
|
|
keyEmailSubject = "AyaNova Lite and all add-ons temporary 30 day Activation key";
|
|
}
|
|
else
|
|
{
|
|
greeting = licenseTemplates.FullTrialGreeting.Replace("[FirstName]", sName);
|
|
keyEmailSubject = "AyaNova and all add-on's temporary 30 day Activation key";
|
|
}
|
|
|
|
return new
|
|
{
|
|
ok = 1,
|
|
uid = uid,
|
|
requestReplyToAddress = replyTo,
|
|
requestFromReplySubject = keyEmailSubject,
|
|
requestKeyIsLite = bLite,
|
|
keycode = keyCode,
|
|
greeting = greeting,
|
|
greetingReplySubject = greetingReplySubject,
|
|
request = request
|
|
};
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
return new
|
|
{
|
|
error = 1,
|
|
ok = 0,
|
|
msg = "Error @ TrialKeyRequestHandler->GenerateFromRequest()",
|
|
error_detail = new { message = e.Message, stack = e.StackTrace }
|
|
};
|
|
}
|
|
}//requests
|
|
|
|
|
|
public static dynamic SendTrialRequestResponse(dtoKeyRequestResponse k)
|
|
{
|
|
try
|
|
{
|
|
//-----------------
|
|
//Send both responses
|
|
|
|
//Send the greeting email
|
|
RfMail.SendMessage("support@ayanova.com", k.requestReplyToAddress, k.greetingReplySubject, k.greeting, true, "MsgType", "TrialRequestGreet");
|
|
|
|
//Send the license key email
|
|
RfMail.SendMessage("support@ayanova.com", k.requestReplyToAddress, k.requestFromReplySubject, k.keycode, true, "MsgType", "TrialRequestKey");
|
|
|
|
// Flag original request message as read and replied
|
|
RfMail.FlagInboxMessageSeenReplied(k.request_email_uid);
|
|
|
|
|
|
//------------------
|
|
return new { ok = 1 };
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return new
|
|
{
|
|
error = 1,
|
|
msg = "Error @ TrialKeyRequestHandler->SendTrialRequestResponse()",
|
|
error_detail = new { message = e.Message, stack = e.StackTrace }
|
|
};
|
|
}
|
|
}//requests
|
|
|
|
|
|
}//eoc
|
|
|
|
}//eons |