Il metodo in questione consente di automatizzare la procedura di caricamento file in apposite cartelle dell’area riservata del proprio sito Passweb (sezione Documenti)
Metodo da richiamare: PubblicazioneFileInFolder
Url del Webservice: <url-sito>/SiteMethod/SiteMethod.asmx
Il metodo PubblicazioneFileInFolder richiede i seguenti parametri:
La chiave è formata da:
login + separatore + datetime.ticks
La Login deve essere quella dell’utente Wizard di tipo Amministratore o di tipo Utente.
Il separatore da utilizzare è la stringa “#!$”.
DateTime.ticks rappresentano i segni di graduazione della data e dell’ora attuali. Un singolo segno di graduazione rappresenta cento nanosecondi. Questo numero serve per evitare che il metodo del webservice venga richiamato più volte con la stessa chiave.
La chiave deve essere criptata con l’algoritmo Rijndael.
Questo algoritmo dovrà utilizzare come chiave quella indicata sul Wizard alla voce di menù “Sito Preferenze” nel campo “Chiave WebService” (chiave lunga 32 caratteri: se la lunghezza è inferiore verranno aggiunti degli spazi vuoti) , e come vettore la stringa “Versione PSW 001”.
La procedura può generare i seguenti errori:
ATTENZIONE! Le cartelle indicate nel parametro <cartelle> devono essere già presenti nella sezione Documenti dell’Area Riservata del sito.
Se nella cartella è già presente un file con il nome indicato nel parametro <nomeFile>, il file viene sovrascritto.
Il file viene inserito nella cartella come se fosse lo stesso creatore della cartella ad effettuare il suo upload in Area Riservata.
Se per la cartella è stato impostato un Amministratore, diverso dal creatore della cartella, gli viene inviata la notifica di inserimento di un nuovo file.
Di seguito un esempio del codice scritto in C# per pubblicare il file “demo.pdf” nella cartella “cartella\sottocartella”.
CHIAMATA AL WEBSERVICE
string separatore = "#!$";
//Chiave indicata sul Wizard di Passweb in "Sito->Preferenze"
string chiaveWebService = "k!3d4tsjk!3d4tsjk!3d4tsjk!3d4tsj";
SiteMethod proxySiteMethod = new SiteMethod("http://www.sitodemo.passweb.it/SiteMethod/SiteMethod.asmx");
Crypt crypto = new Crypt(chiaveWebService);
string chiaveCriptata = crypto.Encrypt("login" + separatore + DateTime.Now.Ticks.ToString());
string[] folder = new string[] { "CARTELLA", "SOTTOCARTELLA" };
byte[] file = File.ReadAllBytes(@"C:\demo.pdf");
string nomeFile = "demo.pdf";
try
{
proxySiteMethod.PubblicazioneFileInFolder(chiaveCriptata, folder, file, nomeFile);
}
catch (Exception exc)
{
string errore = exc.Message;
}
finally
{
proxySiteMethod.Dispose();
}
CLASSE CRYPT PER CRIPTARE E DECRIPTARE
public class Crypt
{
private const string vettore = "Versione PSW 001";
private SymmetricAlgorithm algoritmoCriptazione;
/// <summary>
/// Costruttore
/// </summary>
/// <param name="_chiave">chiave webservice</param>
public Crypt(string _chiave)
{
algoritmoCriptazione = new RijndaelManaged();
algoritmoCriptazione.Key = ASCIIEncoding.ASCII.GetBytes(_chiave.PadRight(32, ' '));
algoritmoCriptazione.IV = ASCIIEncoding.ASCII.GetBytes(vettore.PadRight(16, ' '));
}
/// <summary>
/// Metodo che cripta il testo con l'algoritmo RijndaelManaged
/// </summary>
/// <param name="_testo">testo da criptare</param>
/// <returns>testo criptato</returns>
public string Encrypt(string _testo)
{
if (_testo == null || _testo.Length == 0)
return "";
//Conversione stringa in vettore di byte
byte[] bytIn = System.Text.ASCIIEncoding.ASCII.GetBytes(_testo);
//Creazione di uno stream in memoria
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//Creazione stream per la criptazione
CryptoStream cs = new CryptoStream(ms, algoritmoCriptazione.CreateEncryptor(),CryptoStreamMode.Write);
//Scrittura nello stream in memoria del testo criptato
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
//Conversione in base 64 in modo da poter usare la stringa criptata ovunque
return System.Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
/// <summary>
/// Metodo che decripta il testo con l'algoritmo RijndaelManaged
/// </summary>
/// <param name="_testo">testo da decriptare</param>
/// <returns>testo decriptato</returns>
public string Decrypt(string _testo)
{
if (_testo == null || _testo.Length == 0)
return "";
//Conversione della stringa in vettore di byte
byte[] bytIn = System.Convert.FromBase64String(_testo);
//Creazione di uno stream in memoria
System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);
//Creazione stream per la decriptazione
CryptoStream cs = new CryptoStream(ms, algoritmoCriptazione.CreateDecryptor(), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
string ret = sr.ReadToEnd();
sr.Close();
cs.Close();
ms.Close();
return ret;
}
}