using Newtonsoft.Json;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Net;
namespace DocumentoCommerciale
{
public class Send
{
public List<Esiti.Esito> SendDC(List<DC.RootObject> dc, string usr, string pwd, string pin, string piva, string tipoincarico)
{
List<Esiti.Esito> esiti = new List<Esiti.Esito> { };
Esiti.Esito emptyesito = new Esiti.Esito { esito = false, idtrx = null, progressivo = null, errori = null };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.Expect100Continue = false;
CookieContainer cookieJar = new CookieContainer();
RestClient client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/portale/web/guest")
{
CookieContainer = cookieJar
};
RestRequest req = new RestRequest(Method.GET);
IRestResponse res = client.Execute(req);
int StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 1" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc) {
esiti.Add(emptyesito);
}
return esiti;
}
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/portale/home?p_p_id=58&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=3&p_p_col_count=4&_58_struts_action=%2Flogin%2Flogin")
{
CookieContainer = cookieJar
};
req = new RestRequest(Method.POST);
req.AddParameter("_58_login", usr);
req.AddParameter("_58_pin", pin);
req.AddParameter("_58_password", pwd);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 2" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc)
{
esiti.Add(emptyesito);
}
return esiti;
}
string p_auth = getBetween(res.Content, "Liferay.authToken = '", "';");
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/dp/api?v=" + unixTime())
{
CookieContainer = cookieJar
};
req = new RestRequest(Method.GET);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 3" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc)
{
esiti.Add(emptyesito);
}
return esiti;
}
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/portale/scelta-utenza-lavoro?p_auth=" + p_auth + "&p_p_id=SceltaUtenzaLavoro_WAR_SceltaUtenzaLavoroportlet&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_SceltaUtenzaLavoro_WAR_SceltaUtenzaLavoroportlet_javax.portlet.action=incarichiAction")
{
CookieContainer = cookieJar
};
req = new RestRequest(Method.POST);
req.AddParameter("sceltaincarico", piva);
req.AddParameter("tipoincaricante", tipoincarico);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 4" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc)
{
esiti.Add(emptyesito);
}
return esiti;
}
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/ser/api/fatture/v1/ul/me/adesione/stato/")
{
CookieContainer = cookieJar
};
req = new RestRequest(Method.GET);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 5" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
foreach (DC.RootObject dctemp in dc)
{
esiti.Add(emptyesito);
}
return esiti;
}
foreach (DC.RootObject item in dc) {
client = new RestClient(@"https://ivaservizi.agenziaentrate.gov.it/ser/api/documenti/v1/doc/documenti/?v=" + unixTime())
{
CookieContainer = cookieJar
};
var settings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented };
var json = JsonConvert.SerializeObject(item, settings);
//Console.WriteLine(json);
req = new RestRequest(Method.POST);
req.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36");
req.AddHeader("x-xss-protection", "1; mode = block");
req.AddHeader("strict-transport-security", "max-age=16070400; includeSubDomains");
req.AddHeader("x-content-type-options", "nosniff");
req.AddHeader("x-frame-options", "deny");
req.AddHeader("content-type", "application/json");
req.AddParameter("application/octet-stream", json, ParameterType.RequestBody);
//req.AddJsonBody(item);
res = client.Execute(req);
StatusCode = (int)res.StatusCode;
if (StatusCode != 200)
{
Esiti.Errore errore = new Esiti.Errore { codice = StatusCode.ToString(), descrizione = "Fase 6 POST JSON" };
emptyesito.errori = new List<Esiti.Errore>();
emptyesito.errori.Add(errore);
esiti.Add(emptyesito);
} else
{
esiti.Add(JsonConvert.DeserializeObject<Esiti.Esito>(res.Content));
}
}
return esiti;
}
static string unixTime()
{
DateTime foo = DateTime.UtcNow;
long unixTime = ((DateTimeOffset)foo).ToUnixTimeMilliseconds();
return unixTime.ToString();
}
static string getBetween(string strSource, string strStart, string strEnd)
{
int Start, End;
if (strSource.Contains(strStart) && strSource.Contains(strEnd))
{
Start = strSource.IndexOf(strStart, 0) + strStart.Length;
End = strSource.IndexOf(strEnd, Start);
return strSource.Substring(Start, End - Start);
}
else
{
return "";
}
}
}
}