/* * Created by SharpDevelop. * User: dmacinto * Date: 10/05/11 * Time: 3:04 PM * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using System.Collections.Generic; using System.Net; using System.IO; using System.Text; using Newtonsoft.Json.Linq; using System.Text.RegularExpressions; using System.Runtime.Serialization.Formatters.Binary; using System.Configuration; using System.Security.Cryptography.X509Certificates; using System.Net.Security; using cdrtool; using System.Net.NetworkInformation; using System.Threading; using System.Threading.Tasks; namespace cdrtool { /// /// Darwin specific handling of Login/Logout, Get users, Get PDF etc. /// public class WebRoutines { public WebRoutines() { } public static bool Login(string user, string pswd, ref string token, ref CookieContainer cookiejar, WebProxy proxy) { byte[] webResp = null; //LOGIN : https://portal.sip.rogers.com/en -> https://portal.sip.rogers.com/api/auth/login bool success = Web.MakeRequest( "GET", "http://portal.sip.rogers.com/en", true, ref token, ref webResp, ref cookiejar) ; if (!success) { Logger.Log(5, "Login0 FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } else { Logger.Log(3, "Success initial login page."); webResp = null; try { //Logger.Log(6, "{\"username\":\"" + cdrtool.username + "\",\"password\":\"" + cdrtool.password + "\",\"accountGuid\":null,\"rememberMe\":false}"); success = Web.MakeRequest( "POST", "https://portal.sip.rogers.com/api/auth/login", //String.Format("{\"username\":\"{0}\",\"password\":\"{1}\",\"accountGuid\":null,\"rememberMe\":false}",user,pswd), "{\"username\":\"" + cdrtool.username + "\",\"password\":\"" + cdrtool.password + "\",\"accountGuid\":null,\"rememberMe\":false}", true, ref webResp, ref cookiejar); } catch (Exception e) { Logger.Log(1, "Web Authentication Error {0}", e.Message); } //MFA - delay is handled in Gmail.GetMail routine using cdrtool.mfa_delay in seconds. try { Task task = Gmail.GetMail(); cdrtool.mfa = task.Result; } catch (Exception e) { Console.WriteLine("Gmail fault {0}", e.Message); } if (cdrtool.mfa == "") { success = false; Logger.Log(0, "No valid MFA code received in allotted time."); } else { Logger.Log(5, "Login Stage 2, using code={0}", cdrtool.mfa); try { success = Web.MakeRequest( "POST", "https://portal.sip.rogers.com/api/auth/login", //String.Format("{\"username\":\"{0}\",\"password\":\"{1}\",\"accountGuid\":null,\"rememberMe\":false}",user,pswd), "{\"username\":\"" + cdrtool.username + "\",\"password\":\"" + cdrtool.password + "\",\"code\":\"" + cdrtool.mfa + "\",\"rememberMe\":false}", true, ref webResp, ref cookiejar); } catch (Exception e) { Logger.Log(5, "Stage2 fault {0}", e.Message); } } //-MFA if (success) { //Console.WriteLine("{0}", Encoding.ASCII.GetString(webResp) ); dynamic jResp = JObject.Parse(Encoding.ASCII.GetString(webResp)); token = jResp.account.user.token; Logger.Log(5, "Token=[{0}]", token); Logger.Log(0, "{0} is logged in for {1}", jResp.account.displayName, jResp.account.company.name); cdrtool.company = jResp.account.company.name; } else { Logger.Log(5, "Login FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } } return success; } public static bool GetGUIDs(string token, ref string wfr_guid, ref string ch_guid, ref string act_guid, ref string co_guid, ref string did_guid, ref string year, ref string mtd, ref CookieContainer cookiejar, WebProxy proxyObject) { byte[] webResp = null; bool isJSON = true; bool success = Web.MakeRequest( "GET", "https://portal.sip.rogers.com/api/accounts/user-accounts", isJSON, ref token, ref webResp, ref cookiejar); if (success) { Logger.Log(3, "Success: user-accounts"); } else { Logger.Log(5, "USERACCT FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } // /api/workflows/landing-page-entries if (success) { webResp = null; success = Web.MakeRequest( "GET", "https://portal.sip.rogers.com/api/workflows/landing-page-entries", isJSON, ref token, ref webResp, ref cookiejar); if (success) { //wfr_guid = getWFRguid(response4[1].ToString()); /* [[{"label":"APP.CALL_REPORTING.LABEL","description":"APP.GETTING_STARTED.REPORTING.DESCRIPTION","entries":[{"label":"APP.GETTING_STARTED.SERVICE_GRAPH.LABEL","description":"APP.GETTING_STARTED.SERVICE_GRAPH.DESCRIPTION","image":null,"icon":"insights","workflow":{"sharing":{},"guid":"89644421-7163-46b5-8757-e627a58a5eac","workflowRoutes":[{"guid":"63180702-08db-4bef-b3d6-865bfe497fe3"}]}},{"label":"APP.GETTING_STARTED.CALL_HISTORY.LABEL","description":"APP.GETTING_STARTED.CALL_HISTORY.DESCRIPTION","image":null,"icon":"download_for_offline","workflow":{"sharing":{},"guid":"4328117a-297e-4df2-ba5d-178daa793a16","workflowRoutes":[{"guid":"318024c2-bd1f-4d4e-9e00-7039e0c04998"}]}},{"label":"APP.GETTING_STARTED.VIEW_PEER_INVENTORY.LABEL","description":"APP.GETTING_STARTED.VIEW_PEER_INVENTORY.DESCRIPTION","image":"","icon":"summarize","workflow":{"sharing":{},"guid":"ae6cc939-f4ba-4287-80b9-d45567609f00","workflowRoutes":[{"guid":"0a8a8a1e-1eb2-4104-a3a9-80307864eb16"}]}}]}]] */ dynamic jResp = JArray.Parse(Encoding.ASCII.GetString(webResp)); foreach (dynamic jEntry in jResp[0].entries) { // APP.GETTING_STARTED.CALL_HISTORY.LABEL // Console.WriteLine("{0}",jEntry.label); if (jEntry.label == "APP.GETTING_STARTED.CALL_HISTORY.LABEL") { wfr_guid = jEntry.workflow.workflowRoutes[0].guid; Logger.Log(5, " wfr_guid=[{0}]", wfr_guid); } } Logger.Log(3, "Success wrf_guid"); } else { Logger.Log(5, "WFRGUID FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } } if (success) { webResp = null; success = Web.MakeRequest( "GET", "https://portal.sip.rogers.com/api/workflows/routes/" + wfr_guid, isJSON, ref token, ref webResp, ref cookiejar); if (success) { //ch_guid = getCHguid(response5[1].ToString()); dynamic jResp = JObject.Parse(Encoding.ASCII.GetString(webResp)); ch_guid = jResp.layout.contents[0].guid; Logger.Log(5, " ch_guid=[{0}]", ch_guid); Logger.Log(3, "Success ch_guid"); } else { Logger.Log(5, "CHGUID FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } } if (success) { webResp = null; success = Web.MakeRequest( "GET", "https://portal.sip.rogers.com/api/panels/" + ch_guid, isJSON, ref token, ref webResp, ref cookiejar); if (success) { //act_guid = getACTguid(response6[1].ToString()); dynamic jResp = JObject.Parse(Encoding.ASCII.GetString(webResp)); act_guid = jResp.variables.callHistoryList.route.path.parts[0].path; // path : "/actions/5dd6b3da-0422-4b7f-b405-6b4c3bf4126e/call-history" act_guid = act_guid.Split('/')[2]; Logger.Log(5, " act_guid=[{0}]", act_guid); Logger.Log(3, "Success act_guid"); } else { Logger.Log(5, "ACTGUID FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } } if (success) { webResp = null; success = Web.MakeRequest( "GET", "https://portal.sip.rogers.com/api/actions/" + act_guid + "/call-history-locations", isJSON, ref token, ref webResp, ref cookiejar); if (success) { //co_guid = getCOguid(response7[1].ToString()); dynamic jResp = JArray.Parse(Encoding.ASCII.GetString(webResp)); co_guid = jResp[0].companyGuid; Logger.Log(5, " co_guid=[{0}]", co_guid); Logger.Log(3, "Success co_guid"); } else { Logger.Log(5, "COGUID FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } } if (success) { webResp = null; success = Web.MakeRequest( "POST", "https://portal.sip.rogers.com/api/actions/" + act_guid + "/call-history", "{\"type\":\"links\",\"monthsBack\":\"12\",\"companyGuid\":\"" + co_guid + "\",\"excludeCurrentMonth\":\"false\"}", isJSON, token, ref webResp, ref cookiejar); if (success) { //did_guid = getDIDguid(response8[1].ToString()); //Console.WriteLine(response8[1].ToString()); dynamic jResp = JArray.Parse(Encoding.ASCII.GetString(webResp)); did_guid = jResp[0].didSourceGuid; Logger.Log(5, " did_guid=[{0}]", did_guid); foreach (dynamic jEntry in jResp) { if (jEntry.type == "history-mtd") { mtd = jEntry.month; year = jEntry.year; //Logger.Log(3, "MTD={0} YEAR={1}", mtd, year); //Logger.Log(0, "Initiating CDR pull..."); success = true; break; } } Logger.Log(3, "Success did_guid"); Logger.Log(5, "MTD={0} YEAR={1}", mtd, year); } else { Logger.Log(5, "DIDGUID FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } } return success; } public static bool GetMTDFile( string dirpath, string filename, string token, ref string act_guid, ref string co_guid, ref string did_guid, ref string year, ref string mtd, ref CookieContainer cookiejar, WebProxy proxyObject) { byte[] webResp = null; bool isJSON = true; string link = ""; Logger.Log(1, "Requesting MTD for {0}/{1}", year, int.Parse(mtd)+1 ); // months are 0..11 for some weird reason bool success = Web.MakeRequest( "POST", "https://portal.sip.rogers.com/api/actions/" + act_guid + "/call-history", //{"type":"history-mtd","didSourceGuid":"5fa38eb4-1320-446f-a7d3-44169d68e850","companyGuid":"4fc11004-4c19-4601-a84c-ddca282d0f39","month":10,"year":2022} "{\"type\":\"history-mtd\",\"didSourceGuid\":\"" + did_guid + "\",\"companyGuid\":\"" + co_guid + "\",\"month\":" + mtd + ",\"year\":" + year + "}", isJSON, ref webResp, ref cookiejar); if (!success) { Logger.Log(5, "MTDFILE FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } else { link = Encoding.ASCII.GetString(webResp); link = link.Substring(1,link.Length-2); Logger.Log(3,"File Link is:{0}",link); Logger.Log(0, "File Name is:{0}", link.Split('/')[6]); if ( filename == "" ) { filename = link.Split('/')[6]; //FEB2023, was [2] before URI changed } Logger.Log(5, "Filename is:{0}", filename); //next operation is NOT JSON !!! isJSON = false; Logger.Log(1, "...starting file GET"); webResp = null; success = Web.MakeRequest( "GET", /* "https://portal.sip.rogers.com/api/" + link, */ //FEB2023 link, isJSON, ref token, ref webResp, ref cookiejar); if ( success ) { Logger.Log(1, "File Downloaded!"); //Save CDR to file string fileName = dirpath + filename ; Logger.Log(0, " assigned filename: {0}", fileName); //byte[] csv = ObjectToByteArray(response10[1]); Logger.Log(0, " file size: {0}", webResp.Length ); StreamWriter file = new StreamWriter(fileName); file.BaseStream.Write(webResp,0,webResp.Length); file.Close(); Logger.Log(" file saved."); //void Upload_stream(MemoryStream ms, string filename, string host, int port, string username, string password) if (cdrtool.sftp) // are we uploading to SFTP server { Logger.Log(0, " Initiating SFTP upload..."); try { using (var ms = new MemoryStream(webResp)) { try { sftp.Upload_stream(ms, cdrtool.ssh_path + fileName, cdrtool.ssh_host, cdrtool.ssh_port, cdrtool.ssh_user, cdrtool.ssh_pass); } catch (Exception e) { Logger.Log(0, "SFTP Upload Exception: {0}:{1}", e.Message, e.InnerException.Message); } /* try { ms.Close(); } catch (Exception e) { Logger.Log(0, "SFTP Stream Close Exception: {0}:{1}", e.Message, e.InnerException.Message); } */ Logger.Log(" uploaded."); } } catch (Exception e) { Logger.Log(0, "SFTP Upload Exception: {0}:{1}", e.Message, e.InnerException.Message); } } } webResp = null; } return success; } public static bool GetCDRHistoryFile(string dirpath, string filename, int offset, string token, ref string act_guid, ref string co_guid, ref string did_guid, ref string year, ref string mtd, ref CookieContainer cookiejar, WebProxy proxyObject) { byte[] webResp = null; bool isJSON = true; string link = ""; bool success = false; if (int.Parse(mtd) == 0) // if currently January, check last Dec's CDR complete file. { mtd = "12"; // FEB20223 equiv to Jan - 1 = Dec year = (int.Parse(year) - 1).ToString(); } Logger.Log(1, "Requesting history for {0}/{1}", year, (int.Parse(mtd) - offset + 1)); //months are 0..11 for some weird reason // call-history-4596-2025-11.csv //string historyfile = dirpath + link.Split('/')[6]; //FEB2023, was [2] before uri changed string historyfile = dirpath + "call-history-4596-" + year + "-" + mtd + ".csv"; // JAN2026 no longer using short filename, we must rebuild if (File.Exists(historyfile)) { Logger.Log(0, "...skip last month's CDR History as it exists ({0})", historyfile); return true; } else { // success = Web.MakeRequest( "POST", "https://portal.sip.rogers.com/api/actions/" + act_guid + "/call-history", //{"type":"history-mtd","didSourceGuid":"5fa38eb4-1320-446f-a7d3-44169d68e850","companyGuid":"4fc11004-4c19-4601-a84c-ddca282d0f39","month":10,"year":2022} "{\"type\":\"history\",\"didSourceGuid\":\"" + did_guid + "\",\"companyGuid\":\"" + co_guid + "\",\"month\":" + (int.Parse(mtd) - cdrtool.prevMonOffset).ToString() + ",\"year\":" + year + "}", isJSON, ref webResp, ref cookiejar); if (success) { link = Encoding.ASCII.GetString(webResp); link = link.Substring(1, link.Length - 2); Logger.Log(3, "File Link is:{0}", link); Logger.Log(0, "File Name is:{0}", link.Split('/')[6]); } else { Logger.Log(5, "HISTORY FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); return success; } // webResp = null; Logger.Log(1, " starting history file GET"); success = Web.MakeRequest( "GET", /* "https://portal.sip.rogers.com/api/" + link, */ //FEB2023 link, !isJSON, // not JSON "", // do NOT use a Token here, not Auth required. ref webResp, ref cookiejar); if ( success ) { Logger.Log(1, "File2 Downloaded!"); //Console.WriteLine(response12[1].ToString()); //Save CDR to file Logger.Log(0, " assigned filename: {0}", historyfile); Logger.Log(0, " file size: {0}", webResp.Length); StreamWriter file = new StreamWriter(historyfile); file.BaseStream.Write(webResp, 0, webResp.Length); file.Close(); if (cdrtool.sftp) // are we uploading to SFTP server { MemoryStream ms = new MemoryStream(webResp); sftp.Upload_stream(ms, cdrtool.ssh_path + historyfile, cdrtool.ssh_host, cdrtool.ssh_port, cdrtool.ssh_user, cdrtool.ssh_pass); ms.Close(); } } webResp = null; } //end of if exists check return success; } /* public static bool Login2 ( string user, string pswd, ref CookieContainer cookiejar, WebProxy proxy ) { //object[] response = {}; byte[] webResp = null; bool success = false; TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1)); long time = (long) t.TotalSeconds * 1000; cdrtool.token = ""; string wfr_guid = ""; string ch_guid = ""; string act_guid = ""; string co_guid = ""; string did_guid = ""; string link = ""; //LOGIN : https://portal.sip.rogers.com/en -> https://portal.sip.rogers.com/api/auth/login success = Web.MakeRequest( "GET", "http://portal.sip.rogers.com/en", true, ref token, ref webResp, ref cookiejar ); if ( success ) { Logger.Log(3,"Success Login0"); } else { Logger.Log(5, "Login0 FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } webResp = null; success = Web.MakeRequest( "POST", "https://portal.sip.rogers.com/api/auth/login", //String.Format("{\"username\":\"{0}\",\"password\":\"{1}\",\"accountGuid\":null,\"rememberMe\":false}",user,pswd), "{\"username\":\"" + cdrtool.username + "\",\"password\":\"" + cdrtool.password + "\",\"accountGuid\":null,\"rememberMe\":false}", true, token, ref webResp, ref cookiejar ); if ( success ) { //Console.WriteLine("{0}", Encoding.ASCII.GetString(webResp) ); dynamic jResp = JObject.Parse(Encoding.ASCII.GetString(webResp)); cdrtool.token = jResp.account.user.token; Logger.Log(5, "Token=[{0}]", cdrtool.token); Logger.Log(0, "{0} is logged in for {1}", jResp.account.displayName, jResp.account.company.name); } else { Logger.Log(5,"Login1 FAIL{0}:{1}:{2}", Encoding.ASCII.GetString(webResp)); } /* object[] response1 = { }; //2022 cdrtool.token = ""; response1 = Web.MakeRequest( "POST", true, //changed from false DWMM "https://portal.sip.rogers.com/api/auth/login", //String.Format("{\"username\":\"{0}\",\"password\":\"{1}\",\"accountGuid\":null,\"rememberMe\":false}",user,pswd), "{\"username\":\"" + cdrtool.username + "\",\"password\":\"" + cdrtool.password + "\",\"accountGuid\":null,\"rememberMe\":false}", ref cookiejar, proxy); if ((bool)response1[0]) { //cdrtool.token = getToken(response1[1].ToString()); dynamic jResp = JObject.Parse(response1[1].ToString()); cdrtool.token = jResp.account.user.token; Logger.Log(5, "Token=[{0}]", cdrtool.token); Logger.Log(0, "{0} is logged in for {1}", jResp.account.displayName, jResp.account.company.name); success = true; } else { Logger.Log(5, "Login1 FAIL{0}:{1}:{2}", response1); success = false; } /// object[] response3 = {}; if ( success ) { Logger.Log(5,"Success Login2"); response3 = Web.MakeRequest( "GET", false, "https://portal.sip.rogers.com/api/accounts/user-accounts", "", ref cookiejar, proxy ); if ( (bool)response3[0] ) { Logger.Log(3,"Success Login3"); success = true; } else { Logger.Log(5,"Login3 FAIL{0}:{1}:{2}",response3); success = false; } } // /api/workflows/landing-page-entries object[] response4 = {}; if ( success ) { Logger.Log(5,"Success Login3"); response4 = Web.MakeRequest( "GET", false, "https://portal.sip.rogers.com/api/workflows/landing-page-entries", "", ref cookiejar, proxy ); if ( (bool)response4[0] ) { //wfr_guid = getWFRguid(response4[1].ToString()); // [[{"label":"APP.CALL_REPORTING.LABEL","description":"APP.GETTING_STARTED.REPORTING.DESCRIPTION","entries":[{"label":"APP.GETTING_STARTED.SERVICE_GRAPH.LABEL","description":"APP.GETTING_STARTED.SERVICE_GRAPH.DESCRIPTION","image":null,"icon":"insights","workflow":{"sharing":{},"guid":"89644421-7163-46b5-8757-e627a58a5eac","workflowRoutes":[{"guid":"63180702-08db-4bef-b3d6-865bfe497fe3"}]}},{"label":"APP.GETTING_STARTED.CALL_HISTORY.LABEL","description":"APP.GETTING_STARTED.CALL_HISTORY.DESCRIPTION","image":null,"icon":"download_for_offline","workflow":{"sharing":{},"guid":"4328117a-297e-4df2-ba5d-178daa793a16","workflowRoutes":[{"guid":"318024c2-bd1f-4d4e-9e00-7039e0c04998"}]}},{"label":"APP.GETTING_STARTED.VIEW_PEER_INVENTORY.LABEL","description":"APP.GETTING_STARTED.VIEW_PEER_INVENTORY.DESCRIPTION","image":"","icon":"summarize","workflow":{"sharing":{},"guid":"ae6cc939-f4ba-4287-80b9-d45567609f00","workflowRoutes":[{"guid":"0a8a8a1e-1eb2-4104-a3a9-80307864eb16"}]}}]}]] dynamic jResp = JArray.Parse(response4[1].ToString()); foreach ( dynamic jEntry in jResp[0].entries) { // APP.GETTING_STARTED.CALL_HISTORY.LABEL // Console.WriteLine("{0}",jEntry.label); if ( jEntry.label == "APP.GETTING_STARTED.CALL_HISTORY.LABEL") { wfr_guid = jEntry.workflow.workflowRoutes[0].guid; Logger.Log(5, " wfr_guid=[{0}]", wfr_guid); } } Logger.Log(3,"Success Login4"); success = true; } else { Logger.Log(5,"Login4 FAIL{0}:{1}:{2}",response4); success = false; } } object[] response5 = {}; if ( success ) { Logger.Log(5,"Success Login4"); response5 = Web.MakeRequest( "GET", false, "https://portal.sip.rogers.com/api/workflows/routes/" + wfr_guid, "", ref cookiejar, proxy ); if ( (bool)response5[0] ) { //ch_guid = getCHguid(response5[1].ToString()); dynamic jResp = JObject.Parse(response5[1].ToString()); ch_guid = jResp.layout.contents[0].guid; Logger.Log(5, " ch_guid=[{0}]", ch_guid); Logger.Log(3,"Success Login5"); success = true; } else { Logger.Log(5,"Login5 FAIL{0}:{1}:{2}",response5); success = false; } } object[] response6 = {}; if ( success ) { Logger.Log(5,"Success Login5"); response6 = Web.MakeRequest( "GET", false, "https://portal.sip.rogers.com/api/panels/" + ch_guid, "", ref cookiejar, proxy ); if ( (bool)response6[0] ) { //act_guid = getACTguid(response6[1].ToString()); dynamic jResp = JObject.Parse(response6[1].ToString()); act_guid = jResp.variables.callHistoryList.route.path.parts[0].path; // path : "/actions/5dd6b3da-0422-4b7f-b405-6b4c3bf4126e/call-history" act_guid = act_guid.Split('/')[2]; Logger.Log(5, " act_guid=[{0}]", act_guid); Logger.Log(3,"Success Login6"); success = true; } else { Logger.Log(5,"Login6 FAIL{0}:{1}:{2}",response6); success = false; } } object[] response7 = {}; if ( success ) { Logger.Log(5,"Success Login6"); response7 = Web.MakeRequest( "GET", false, "https://portal.sip.rogers.com/api/actions/" + act_guid + "/call-history-locations", "", ref cookiejar, proxy ); if ( (bool)response7[0] ) { //co_guid = getCOguid(response7[1].ToString()); dynamic jResp = JArray.Parse(response7[1].ToString()); co_guid = jResp[0].companyGuid; Logger.Log(5, " co_guid=[{0}]", co_guid); Logger.Log(3,"Success Login7"); success = true; } else { Logger.Log(5,"Login7 FAIL{0}:{1}:{2}",response7); success = false; } } string mtd = ""; string year = ""; object[] response8 = {}; if ( success ) { Logger.Log(5,"Success Login7"); response8 = Web.MakeRequest( "POST", true, //changed from false DWMM "https://portal.sip.rogers.com/api/actions/" + act_guid + "/call-history", "{\"type\":\"links\",\"monthsBack\":\"12\",\"companyGuid\":\"" + co_guid + "\",\"excludeCurrentMonth\":\"false\"}", ref cookiejar, proxy ); if ( (bool)response8[0] ) { //did_guid = getDIDguid(response8[1].ToString()); //Console.WriteLine(response8[1].ToString()); dynamic jResp = JArray.Parse(response8[1].ToString()); did_guid = jResp[0].didSourceGuid; Logger.Log(5, " did_guid=[{0}]", did_guid); foreach (dynamic jEntry in jResp) { if (jEntry.type == "history-mtd") { mtd = jEntry.month; year = jEntry.year; Logger.Log(3, "MTD={0} YEAR={1}", mtd, year); Logger.Log(0, "Initiating CDR pull..."); success = true; break; } } Logger.Log(3,"Success Login8"); success = true; } else { Logger.Log(5,"Login8 FAIL{0}:{1}:{2}",response8); success = false; } } object[] response9 = {}; if ( success ) { Logger.Log(5,"Success Login8"); Logger.Log(1, "Requesting MTD for {0}/{1}", year, int.Parse(mtd)+1 ); // months are 0..11 for some weird reason response9 = Web.MakeRequest( "POST", true, //changed from false DWMM "https://portal.sip.rogers.com/api/actions/" + act_guid + "/call-history", //{"type":"history-mtd","didSourceGuid":"5fa38eb4-1320-446f-a7d3-44169d68e850","companyGuid":"4fc11004-4c19-4601-a84c-ddca282d0f39","month":10,"year":2022} "{\"type\":\"history-mtd\",\"didSourceGuid\":\"" + did_guid + "\",\"companyGuid\":\"" + co_guid + "\",\"month\":" + mtd + ",\"year\":" + year + "}", ref cookiejar, proxy ); if ( (bool)response9[0] ) { link = response9[1].ToString(); link = link.Substring(1,link.Length-2); Logger.Log(0,"File Link is:{0}",link); Logger.Log(3,"Success Login9"); success = true; } else { Logger.Log(5,"Login8 FAIL{0}:{1}:{2}",response9); success = false; } } string storage = cdrtool.token; cdrtool.token = ""; object[] response10 = {}; if ( success ) { Logger.Log(5,"Success Login9"); Logger.Log(1,"...starting file GET"); response10 = Web.MakeRequest( "GET", false, "https://portal.sip.rogers.com/api/" + link, "", ref cookiejar, proxy ); if ( (bool)response10[0] ) { Logger.Log(5,"Success Login10"); Logger.Log(1,"File Downloaded!"); //Console.WriteLine(response10[1].ToString()); success = true; //Save CDR to file string fileName = "CURRENT.csv"; //fileName = link.Split('/')[2]; fileName = cdrtool.dirpath + fileName; Logger.Log(0," assigned filename: {0}",fileName); byte[] csv = ObjectToByteArray(response10[1]); Logger.Log(0," file size: {0}",csv.Length-29); //formatter adds crap at beginning (29) and end (1) to be able to recreate. StreamWriter file = new StreamWriter(fileName); file.BaseStream.Write(csv,29,csv.Length-30); file.Close(); } } cdrtool.token = storage; // history file check if (cdrtool.checkPrevMonth) { if ( int.Parse(mtd) == 1) // if currently January, check last Dec's CDR complete file. { mtd = "13"; // gets decremented in the call string below year = (int.Parse(year)-1).ToString(); } object[] response11 = {}; if ( success ) { Logger.Log(5,"Success Login10"); Logger.Log(1, "Requesting history for {0}/{1}",year, (int.Parse(mtd) - cdrtool.prevMonOffset + 1) ); //months are 0..11 for some weird reason response11 = Web.MakeRequest( "POST", true, //changed from false DWMM "https://portal.sip.rogers.com/api/actions/" + act_guid + "/call-history", //{"type":"history-mtd","didSourceGuid":"5fa38eb4-1320-446f-a7d3-44169d68e850","companyGuid":"4fc11004-4c19-4601-a84c-ddca282d0f39","month":10,"year":2022} "{\"type\":\"history\",\"didSourceGuid\":\"" + did_guid + "\",\"companyGuid\":\"" + co_guid + "\",\"month\":" + (int.Parse(mtd)-cdrtool.prevMonOffset).ToString() + ",\"year\":" + year + "}", ref cookiejar, proxy ); if ( (bool)response11[0] ) { link = response11[1].ToString(); link = link.Substring(1,link.Length-2); Logger.Log(0,"File Link is:{0}",link); Logger.Log(3,"Success Login11"); success = true; } else { Logger.Log(5,"Login11 FAIL{0}:{1}:{2}",response11); success = false; } } if (File.Exists(cdrtool.dirpath+link.Split('/')[2])) { Logger.Log(0,"...previous month's CDR History already exists ({0}) ...skipping",cdrtool.dirpath+link.Split('/')[2] ); } else { cdrtool.token = ""; object[] response12 = {}; if ( (bool)response11[0] ) { Logger.Log(5,"Success Login11"); Logger.Log(1,"starting file2 GET"); response12 = Web.MakeRequest( "GET", false, "https://portal.sip.rogers.com/api/" + link, "", ref cookiejar, proxy ); if ( (bool)response12[0] ) { Logger.Log(3,"Success Login12"); Logger.Log(1,"File2 Downloaded!"); //Console.WriteLine(response12[1].ToString()); success = true; //Save CDR to file string fileName = "History.csv"; fileName = link.Split('/')[2]; fileName = cdrtool.dirpath + fileName; Logger.Log(0," assigned filename: {0}",fileName); byte[] csv = ObjectToByteArray(response12[1]); Logger.Log(0," file size: {0}",csv.Length-29); //formatter adds crap at beginning (29) and end (1) to be able to recreate. StreamWriter file = new StreamWriter(fileName); file.BaseStream.Write(csv,29,csv.Length-30); file.Close(); } } } //end of if exists check cdrtool.checkPrevMonth = false; } cdrtool.token = storage; return success; } */ public static bool Logout ( string token, ref CookieContainer cookiejar, ref WebProxy proxy ) { byte[] ignore = null; bool success = Web.MakeRequest( "POST", "https://portal.sip.rogers.com/api/auth/logout", "{ \"JSON\" : \"True\"}", true, // isJSON token, ref ignore, // don't care about the return stream ref cookiejar ); if ( success ) { Logger.Log(0,"Logout successful."); } return success; } /* public static string getToken ( string json ) { string token; //"token":"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50R3VpZCI6ImNhMzgzZDViLWMyYzktNGU1My04NWQ3LWY1MTYwZjdlYjU0ZSIsImNvbXBhbnlHdWlkIjoiNGZjMTEwMDQtNGMxOS00NjAxLWE4NGMtZGRjYTI4MmQwZjM5IiwidXNlckd1aWQiOiIyNmZlYzk5OC1jZTMyLWMyMGEtODYxYi1lOTNmYTJmYWM1MDEiLCJpYXQiOjE2Njc5NTc4ODQsImV4cCI6MTY2Nzk1ODc4NH0.SeJJVcOJJk5vOhOznCiPmZFhQwl4bAJ7odJbFa1OVDGtoOEKD_CCV9kdTWMxWITj8v3zJJLJHnkhFAO1QU7llA"},"company" //"token":"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2N ... 3zJJLJHnkhFAO1QU7llA"},"company" Match m = Regex.Match(json, @"{""account"".*?""token"":""(.+?)""},""company"""); // we're hunting for the "token":"flkajdlkahfkjdsahfka" if ( ( !m.Success ) ) { Logger.Log(0,"Token not found!"); return ""; } else { token = m.Groups[1].Value.ToString(); Logger.Log(3,"Token={0}",token); } return token; } public static string getCustomer ( string json ) { string name; //company":{"guid":"4fc11004-4c19-4601-a84c-ddca282d0f39","name":"Hydro Ottawa Limited 4596"}},"expiresIn Match m = Regex.Match(json, @"{""guid"".*?""name"":""(.+?)""}},""expiresIn"""); // we're hunting for the "token":"flkajdlkahfkjdsahfka" if ( ( !m.Success ) ) { Logger.Log(0,"Customer name not found!"); return ""; } else { name = m.Groups[1].Value.ToString(); Logger.Log(3,"Customer={0}",name); } return name; } public static string getWFRguid ( string json ) { string guid; //{.*HISTORY.DESCRIPTION.*workflowRoutes\":\[{"guid\":\"(.+)\"}.*VIEW_PEER_INVENTORY Match m = Regex.Match(json, @"{.*CALL_HISTORY.DESCRIPTION.*?workflowRoutes"":.{""guid"":""(.+?)""}.}"); // we're looking for "workflowRoutes":[{"guid":"318024c2-bd1f-4d4e-9e00-7039e0c04998"}]}},{"label": if ( ( !m.Success ) ) { Logger.Log(0,"wfr_guid not found!"); return ""; } else { guid = m.Groups[1].Value.ToString(); Logger.Log(2," wfr_guid={0}",guid); } return guid; } public static string getCHguid ( string json ) { string guid; // layout":{"direction":"column","contents":[{"component":"panel","guid":"ff2b74bb-bd68-46ff-9609-2f180378cceb","definition":false}]},"variables":{},"dialogs":{},"routeName":"call-history" Match m = Regex.Match(json, @"{.*component"":""panel"",""guid"":""(.+?)"",""definition"); // we're looking for "guid":[{"guid":"ff2b74bb-bd68-46ff-9609-2f180378cceb", if ( ( !m.Success ) ) { Logger.Log(0,"ch_guid not found!"); return ""; } else { guid = m.Groups[1].Value.ToString(); Logger.Log(2," ch_guid={0}",guid); } return guid; } public static string getACTguid ( string json ) { string guid; // layout":{"direction":"column","contents":[{"component":"panel","guid":"ff2b74bb-bd68-46ff-9609-2f180378cceb","definition":false}]},"variables":{},"dialogs":{},"routeName":"call-history" Match m = Regex.Match(json, @"{.*actions/(.*?)/call-history"); // we're looking for "guid":[{"guid":"ff2b74bb-bd68-46ff-9609-2f180378cceb", if ( ( !m.Success ) ) { Logger.Log(0,"act_guid not found!"); return ""; } else { guid = m.Groups[1].Value.ToString(); Logger.Log(2," act_guid={0}",guid); } return guid; } public static string getCOguid ( string json ) { string guid; // layout":{"direction":"column","contents":[{"component":"panel","guid":"ff2b74bb-bd68-46ff-9609-2f180378cceb","definition":false}]},"variables":{},"dialogs":{},"routeName":"call-history" Match m = Regex.Match(json, @"{.*companyGuid"":""(.*?)"",""clientId"); // we're looking for "guid":[{"guid":"ff2b74bb-bd68-46ff-9609-2f180378cceb", if ( ( !m.Success ) ) { Logger.Log(0,"co_guid not found!"); return ""; } else { guid = m.Groups[1].Value.ToString(); Logger.Log(2," co_guid={0}",guid); } return guid; } public static string getDIDguid ( string json ) { string guid; // "type":"history-mtd","didSourceGuid":"5fa38eb4-1320-446f-a7d3-44169d68e850"},{"timePeriod":"2022- Match m = Regex.Match(json, @"{.*didSourceGuid"":""(.*?)""},{""timePeriod"); if ( ( !m.Success ) ) { Logger.Log(0,"did_guid not found!"); return ""; } else { guid = m.Groups[1].Value.ToString(); Logger.Log(2," did_guid={0}",guid); } return guid; } */ // Convert an object to a byte array public static byte[] ObjectToByteArray(object obj) { BinaryFormatter bf = new BinaryFormatter(); using (var ms = new MemoryStream()) { bf.Serialize(ms, obj); //byte[] b = (byte[]) (object) bf.Deserialize(ms); return ms.ToArray(); //return b; } } } }