Risultati ricerca
Indice
Frase completa
Cerca nella pagina
Chiudi
Indice

PUBBLICAZIONE DOCUMENTI IN AREA RISERVATA

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:

  • chiave: chiave criptata contenente la login di un utente del Wizard (sia di tipologia Amministratore che di tipologia Utente)
  • cartelle: array di cartelle che definiscono il percorso della cartella di destinazione a partire dalla radice (la cartella deve essere già presente, non viene creata)
  • file: array di byte del file
  • nomeFile: nome del file, compresa l’estensione

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:

  • Funzionalità non disponibile: se il contratto non prevede chiamate al webservice
  • Chiave ripetuta: se il webservice è stato richiamato più volte con la stessa chiave
  • Chiave errata: se i dati contenuti nella chiave non sono del numero voluto o se le credenziali contenute sono errate
  • Il file è vuoto: se l’array di byte del campo <file> è vuoto
  • Tipologia di file non ammessa: se il file ha estensione .exe
  • Spazio su disco esaurito: se lo spazio su disco previsto da contratto è stato esaurito
  • Indicare almeno una cartella: se l’array di stringhe del campo <cartelle> è vuoto
  • La cartella <cartella> non esiste: se una cartella indicata nell’array non esiste sul sito
  • Indicare il nome del file: se il campo <nomeFile> è vuoto
  • Il nome del file deve includere l’estensione: se il campo <nomeFile> non comprende l’estensione del file

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;

}

}