using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; namespace SteamWare { /// /// classe gestione auth dispositivi (new 2014) /// public class devicesAuthProxy { #region area table adapters /// /// TableAdapter devices /// public DS_AuthTableAdapters.AnagDevicesTableAdapter taAnagDev; /// /// TableAdapter Utenti /// public DS_AuthTableAdapters.UtentiTableAdapter taUtenti; /// /// TableAdapter Diritti /// public DS_AuthTableAdapters.DIRITTITableAdapter taDiritti; /// /// TableAdapter permessi /// public DS_AuthTableAdapters.PermessiTableAdapter taPermessi; /// /// TableAdapter funzione /// public DS_AuthTableAdapters.FUNZIONETableAdapter taFunzione; /// /// TableAdapter permessi2fuzione /// public DS_AuthTableAdapters.Permessi2FunzioneTableAdapter taPermessi2Funzione; /// /// init dei table adapters /// protected void initTA() { taAnagDev = new DS_AuthTableAdapters.AnagDevicesTableAdapter(); taUtenti = new DS_AuthTableAdapters.UtentiTableAdapter(); taDiritti = new DS_AuthTableAdapters.DIRITTITableAdapter(); taPermessi = new DS_AuthTableAdapters.PermessiTableAdapter(); taFunzione = new DS_AuthTableAdapters.FUNZIONETableAdapter(); taPermessi2Funzione = new DS_AuthTableAdapters.Permessi2FunzioneTableAdapter(); } /// /// effettua setup dei connection strings da web.config delal singola applicazione /// protected virtual void setupConnectionStringBase() { // connections del db string connString = memLayer.ML.confReadString("DevicesAuthConnectionString"); taAnagDev.Connection.ConnectionString = connString; taUtenti.Connection.ConnectionString = connString; taDiritti.Connection.ConnectionString = connString; taPermessi.Connection.ConnectionString = connString; taFunzione.Connection.ConnectionString = connString; taPermessi2Funzione.Connection.ConnectionString = connString; } #endregion /* Classe che si occupa di: * ---------------------------------------- * 1) gestione username * 2) gestione ruoli da anagrafica * 3) gestione declinazione ruoli in permessi * * in Standard GENERICO */ /// /// Initializes a new instance of the class. /// protected devicesAuthProxy() { initTA(); setupConnectionStringBase(); } /// /// Singleton accesso a devicesAuthProxy (static object) /// public static devicesAuthProxy stObj = new devicesAuthProxy(); #region metodi verifica authKey, email, ... /// /// cifra in MD5 la stringa in chiaro /// /// /// public static string encodeKey(string chiaro) { string answ = chiaro; try { answ = SteamCrypto.EncryptString(chiaro, memLayer.ML.CRS("CodModulo")); } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } return answ; } /// /// decifra la stringa MD5 in chiaro /// /// /// public static string decodeKey(string cifrato) { string answ = cifrato; try { answ = SteamCrypto.DecryptString(cifrato, memLayer.ML.CRS("CodModulo")); } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } return answ; } /// /// verifica una email per appartenenza ad un utente VALIDO dell'elenco /// /// /// public bool checkUserEmail(string email) { bool answ = false; try { answ = taUtenti.getByEmail(email).Rows.Count > 0; } catch (Exception exc) { logger.lg.scriviLog(string.Format("Errore check user email: {0}", exc), tipoLog.EXCEPTION); } return answ; } /// /// verifica una email + AuthKey per appartenenza ad un utente VALIDO dell'elenco /// /// /// /// public bool checkUserEmailAK(string email, string AuthKey) { bool answ = false; int trovati = 0; if (email != "" && AuthKey != "") { string md5UserAuthKey = encodeKey(AuthKey); try { trovati += taUtenti.getByEmailAK(email, md5UserAuthKey).Rows.Count; // se abilitato anche plain controlla pure li... if (memLayer.ML.CRB("enablePlain")) { trovati += taUtenti.getByEmailAK(email, AuthKey).Rows.Count; } } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } answ = trovati > 0; } return answ; } /// /// registra su DB la richiesta di reset della auth key dell'utente ed opzionalmente invia email ad admin /// /// /// opzionale, se != "" invia email all'indirizzo dell'admin x reset public void reqResetAuthKey(string email, string adminEmail) { // registro richiesta di reset KEY... taUtenti.reqAuthKeyReset(email); // se ho email admin... if (adminEmail != "") { // mando email ad admin x reset utente... string oggetto = string.Format("L'utente {0} ha richiesto il reset della sua AuthKey.

Seguire il link seguente per approvare o rifiutare la richiesta", email, memLayer.ML.CRS("baseUrl"), memLayer.ML.CRS("urlGestUtenti")); gestEmail.geAuth.mandaEmail(email, adminEmail, "Richiesta reset AuthKey utente", oggetto); } } /// /// invia email ad utente con url x reset hash password /// /// destinatario /// hashPasswd ATTUALE (in chiaro) /// public void sendEmailResetHashPassword(string email, string hashPasswd, string webAppName) { // se ho email admin... if (email != "") { // calcolo chiave MD5... string md5hashPasswd = encodeKey(hashPasswd); // mando email ad admin x reset utente... string oggetto = string.Format("Hi,

This is an automatic message generated by {3} platform on behalf of platform admin.

Please click on following link (or cut/paste to your preferred browser) to reset your password to {3} login.

Regards.", memLayer.ML.CRS("baseUrl"), HttpUtility.UrlEncode(md5hashPasswd), email, webAppName); gestEmail.geAuth.mandaEmail(memLayer.ML.CRS("_fromEmail"), email, webAppName, oggetto); } } /// /// invia email ad utente con url x enroll /// /// /// chiave (in chiaro) /// nome del sito public void sendEmailAuthKey(string email, string AuthKey, string SiteName) { string body = "Hi,

This is an automatic message generated by {3} platform on behalf of platform admin.

Please click on following link (or cut/paste to your preferred browser) to enable current device to {3} login.

Regards."; string subject = string.Format("AUTH access to {0}", SiteName); sendEmailAuthKey(email, AuthKey, SiteName, subject, body); } /// /// invia email ad utente con url x enroll /// /// /// chiave (in chiaro) /// nome del sito /// chiave (in chiaro) /// body (in formato da completare string.format con 4 parametri che verrano inseriti come i seguenti: /// {0} = baseURL - memLayer.ML.CRS("baseUrl") /// {1} = chaive encoded - HttpUtility.UrlEncode(md5UserAuthKey) /// {2} = email destinatario /// {3} = subject /// {4} = site name /// public void sendEmailAuthKey(string email, string AuthKey, string SiteName, string subject, string body) { // se ho email admin... if (email != "") { // calcolo chiave MD5... string md5UserAuthKey = encodeKey(AuthKey); // mando email ad admin x reset utente... string oggetto = string.Format(body, memLayer.ML.CRS("baseUrl"), HttpUtility.UrlEncode(md5UserAuthKey), email, SiteName); gestEmail.geAuth.mandaEmail(memLayer.ML.CRS("_fromEmail"), email, subject, oggetto); } } /// /// numero massimo auth concesse (se non trovo su conf prendo 1000) /// protected int maxAuth { get { int answ = memLayer.ML.CRI("maxAuth"); if (answ < 0) { answ = 1000; } return answ; } } /// /// effettua enroll del device x l'utente con l'email indicata /// /// /// /// /// /// /// public bool enrollDevice(string UserAuthKey, string IPv4, string DeviceName, string Description, string email) { bool fatto = false; if (numAuth(UserAuthKey, email) > 0) { // calcolo il secret... DateTime adesso = DateTime.Now; string Secret = string.Format("{0}|{1}|{2}", email, DeviceName, adesso); string devSecret = SteamCrypto.EncryptString(Secret, passphrase(memLayer.ML.confReadString("CodModulo"), UserAuthKey)); try { // registro chiave x il device taAnagDev.Insert(devSecret, email, DeviceName, Description, adesso, adesso, IPv4); // se condizione NORMALE (ovvero numAuth < maxAuth, altrimenti NON consuma...) if (numAuth(UserAuthKey, email) <= maxAuth) { // registro "consumo" della authKey (-1 numAuth) taUtenti.recordAuthKeyUse(email); } // salvo il cookie nel browser x 2 anni memLayer.ML.setCookieVal(AuthCookieName, devSecret, DateTime.Now.AddYears(2)); // indico come fatto fatto = true; } catch (Exception exc) { logger.lg.scriviLog(string.Format("Eccezione in fase di enroll devices: parametri{0}UserAuthKey: {1}{0}IPv4: {2}{0}DeviceName: {3}{0}devSecret: {4}{0}email: {5}{0}Description: {6}{0}adesso: {7}{0}eccezione: {8}{0}", Environment.NewLine, UserAuthKey, IPv4, DeviceName, devSecret, email, Description, adesso, exc), tipoLog.EXCEPTION); } } //esce... return fatto; } /// /// restituisce nome cookie di auth (o default...) /// public static string AuthCookieName { get { string answ = "AuthDevice"; try { answ = memLayer.ML.CRS("AuthCookieName"); } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } return answ; } } /// /// genera la passphrase utente a partire dai parametri richiesti /// /// /// /// public string passphrase(string CodMod, string userKey) { return string.Format("{0}#{1}", CodMod, userKey); } /// /// Restituisce il numero di attivazioni rimaste x utente dato email e key /// /// /// /// public int numAuth(string UserAuthKey, string email) { DS_Auth.UtentiRow rowUtenti; int numAuth = 0; try { // decodifica al volo la cifra... rowUtenti = taUtenti.getByEmailAK(email, UserAuthKey)[0]; numAuth = rowUtenti.numAuth; } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } // ritorno return numAuth; } /// /// Restituisce il numero di attivazioni rimaste x utente dato email /// /// /// public int numAuth(string email) { DS_Auth.UtentiRow rowUtenti; int numAuth = 0; try { // decodifica al volo la cifra... rowUtenti = taUtenti.getByEmail(email)[0]; numAuth = rowUtenti.numAuth; } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } // ritorno return numAuth; } /// /// Generazione stringa casuale di caratteri... /// /// /// /// public static string RandomString(int size, bool lowerCase) { StringBuilder builder = new StringBuilder(); Random random = new Random(); char ch; for (int i = 0; i < size; i++) { ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))); builder.Append(ch); } if (lowerCase) return builder.ToString().ToLower(); return builder.ToString(); } #endregion #region area utente /// /// cancella da session l'utente /// public void clearAllUserData() { memLayer.ML.emptySessionVal("USER_NAME"); memLayer.ML.emptySessionVal("email"); memLayer.ML.emptySessionVal("dirittiUtente"); memLayer.ML.emptySessionVal("permessiUtente"); memLayer.ML.emptySessionVal("permessiUtenteWrite"); memLayer.ML.emptySessionVal("rigaUtente"); } /// /// restituisce la tabella diritti da session /// public DS_Auth.DIRITTIDataTable diritti { get { if (memLayer.ML.serializeSession) { return DataSetAdapter.convert(memLayer.ML.dsSessionObj("dirittiUtente")); } else { return (DS_Auth.DIRITTIDataTable)memLayer.ML.objSessionObj("dirittiUtente"); } } set { if (memLayer.ML.serializeSession) { memLayer.ML.setSessionDataTable("dirittiUtente", value); } else { memLayer.ML.setSessionVal("dirittiUtente", value); } } } /// /// tabella dei permessi utente /// public DS_Auth.PermessiDataTable permessi { get { DS_Auth.PermessiDataTable tabPermessi = null; try { if (memLayer.ML.serializeSession) { tabPermessi = DataSetAdapter.convert(memLayer.ML.dsSessionObj("permessiUtente")); } else { tabPermessi = (DS_Auth.PermessiDataTable)memLayer.ML.objSessionObj("permessiUtente"); } } catch (Exception exc) { logger.lg.scriviLog(String.Format("Errore recupero permessi!{0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); } return tabPermessi; } set { if (memLayer.ML.serializeSession) { memLayer.ML.setSessionDataTable("permessiUtente", value); } else { memLayer.ML.setSessionVal("permessiUtente", value); } } } /// /// tabella dei permessi utente di tipo "WRITE" enabled /// public DS_Auth.PermessiDataTable permessiWrite { get { if (memLayer.ML.serializeSession) { return DataSetAdapter.convert(memLayer.ML.dsSessionObj("permessiUtenteWrite")); } else { return (DS_Auth.PermessiDataTable)memLayer.ML.objSessionObj("permessiUtenteWrite"); } } set { if (memLayer.ML.serializeSession) { memLayer.ML.setSessionDataTable("permessiUtenteWrite", value); } else { memLayer.ML.setSessionVal("permessiUtenteWrite", value); } } } /// /// oggetto utente con metodi get/set /// public string utente { get { return memLayer.ML.StringSessionObj("USER_NAME"); } set { memLayer.ML.setSessionVal("USER_NAME", value, true); } } /// /// oggetto email con metodi get/set /// public string email { get { return memLayer.ML.StringSessionObj("email"); } set { memLayer.ML.setSessionVal("email", value, true); } } /// /// oggetto DeviceSecret IN SESSIONE con metodi get/set /// public string DeviceSecret { get { return memLayer.ML.getCookieVal(AuthCookieName); } } /// /// oggetto modulo IN SESSIONE con metodi get/set /// public string modulo { get { return memLayer.ML.CRS("CodModulo"); } } /// /// restituisce i valori della riga utente da db /// public DS_Auth.UtentiRow rigaUtente { get { if (memLayer.ML.serializeSession) { DS_Auth.UtentiDataTable table = DataSetAdapter.convert(memLayer.ML.dsSessionObj("rigaUtente")); return table[0]; } else { return (DS_Auth.UtentiRow)memLayer.ML.objSessionObj("rigaUtente"); } } set { if (memLayer.ML.serializeSession) { memLayer.ML.setSessionDataTable("rigaUtente", value.Table); } else { memLayer.ML.setSessionVal("rigaUtente", value); } } } /// /// restituisce una stringa formattata con cognome e nome /// public string CognomeNome { get { string answ = ""; if (isAuth) { answ = string.Format("{0} {1}", rigaUtente.cognome, rigaUtente.nome); } return answ; } } /// /// è un boolean che indica se in session ci siano user/email e DeviceSecret (cookie) e quindi utente autenticato in precedenza... /// public bool isAuth { get { return ((utente != "" || email != "") && DeviceSecret != ""); } } /// /// conta il numero di permessi utente per la pagina attuale e restituisce true se ne trova almeno 1 /// /// /// public bool isPageEnabled(string pagina) { bool answ = false; try { if (permessi != null) { // verifico ANCHE se ci sia una versione ".aspx" in +... System.Data.DataRow[] righe = permessi.Select(string.Format("URL = '{0}.aspx' OR URL = '{0}'", pagina)); answ = (righe.Length >= 1); } } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } return answ; } /// /// Verifica se l'utente sia noto al sistema... /// /// /// public bool userIsKnown(string _username) { bool answ = false; try { answ = taUtenti.getByEmail(_username).Rows.Count > 0; } catch { } return answ; } /// /// conta il numero di permessi utente per la pagina attuale e restituisce true se ne trova almeno 1 /// /// /// public bool isPageSafe(string pagina) { bool answ = false; try { string _safePages = memLayer.ML.CRS("_safePages"); answ = (_safePages.IndexOf(pagina) >= 0); } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } return answ; } /// /// verifica se il permesso utente per la pagina attuale sia write per almeno 1 diritto assegnato (restituisce true se ne trova almeno 1 con permessi2funzione.readwrite='S') /// /// /// public bool isPageWriteEnabled(string pagina) { bool answ = false; try { if (permessiWrite != null) { System.Data.DataRow[] righe = permessiWrite.Select(string.Format("URL = '{0}.aspx' OR URL = '{0}'", pagina)); answ = (righe.Length >= 1); } } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } return answ; } /// /// Procedura da chiamare DOPO aver messo in session i dati utente/email x caricare gli altri dati /// /// /// public bool startUpUtente(string _username) { bool risultato = false; try { clearAllUserData(); if (_username != "") { utente = _username; email = _username; // !!!HARD CODED, user = email... setupRiga(); setupDirittiPermessi(); setupMappaSito(); setupLingua(); risultato = true; } } catch (Exception exc) { logger.lg.scriviLog(string.Format("Errore in fase di startUpUtente:{0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); } return risultato; } /// /// costruisce la mappa del sito per l'utente /// protected virtual void setupMappaSito() { string _mappa = ""; _mappa += ""; try { // partiamo dai permessi utente di numero "0" (sono intestazioni menù...) DS_Auth.PermessiRow[] vociMenu = (DS_Auth.PermessiRow[])permessi.Select("NUMERO ='0'", "GRUPPO"); foreach (DS_Auth.PermessiRow voce in vociMenu) { _mappa += formattaNodo(voce.NOME, voce.DESCRIZIONE, voce.URL, siteNodeType.startContainer); // per ogni livello riempiamo con i permessi figli DS_Auth.PermessiRow[] pagine = (DS_Auth.PermessiRow[])permessi.Select(string.Format("GRUPPO ='{0}' AND NUMERO > 0", voce.GRUPPO), "NUMERO"); foreach (DS_Auth.PermessiRow pagina in pagine) { _mappa += formattaNodo(pagina.NOME, pagina.DESCRIZIONE, pagina.URL, siteNodeType.leaf); } _mappa += formattaNodo(voce.NOME, voce.DESCRIZIONE, voce.URL, siteNodeType.endContainer); } } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } // salva in session... _mappa += ""; mappaSito = _mappa; } /// /// formatta un nodo in modo corretto dai dati indicati /// /// /// /// /// protected string formattaNodo(string titolo, string descrizione, string url, siteNodeType tipoNodo) { string _out = ""; switch (tipoNodo) { case siteNodeType.startContainer: _out = string.Format("", traduci(titolo), traduci(descrizione), url); break; case siteNodeType.endContainer: _out = ""; break; case siteNodeType.leaf: _out = string.Format("", traduci(titolo), traduci(descrizione), url); break; } return _out; } /// /// ricarica e ri-traduce la mappa sito per l'utente... /// public void ricaricaMappaSito() { memLayer.ML.emptySessionVal("dirittiUtente"); memLayer.ML.emptySessionVal("permessiUtente"); setupDirittiPermessi(); setupMappaSito(); } /// /// wrapper traduzione /// /// /// public string traduci(object lemma) { string answ = ""; if (lemma != null) { if (lemma.ToString() != "") { answ = user_std.UtSn.Traduci(lemma.ToString()); } } else { answ = "--"; } return answ; } /// /// carica la riga dati utente /// protected virtual void setupRiga() { try { rigaUtente = ((DS_Auth.UtentiRow)taUtenti.getByEmail(email).Rows[0]); } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } } /// /// Carica la tabella diritti dell'utente da db e salva in session /// protected virtual void setupDirittiPermessi() { try { diritti = taDiritti.getByUserModulo(utente, modulo); // salvo in session i diritti.. if (diritti.Count > 0) { setPermessiDaDiritti(); } } catch (Exception exc) { logger.lg.scriviLog(string.Format("Errore in fase di setupDirittiPermessi:{0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION); } } /// /// Effettua setup dei permessi una volta salvati i diritti /// protected virtual void setPermessiDaDiritti() { // proseguo coi permessi DS_Auth.PermessiDataTable allPermessi = taPermessi.GetData(); DS_Auth.Permessi2FunzioneDataTable allPerm2Funz = taPermessi2Funzione.GetData(); DS_Auth.PermessiDataTable _permessiUtente = new DS_Auth.PermessiDataTable(); DS_Auth.PermessiDataTable _permessiUtenteWrite = new DS_Auth.PermessiDataTable(); string filtroFunz, filtroPerm, filtroPermWrite; filtroPerm = " COD_PERMESSO IN ("; filtroPermWrite = " COD_PERMESSO IN ("; // filtro i diritti utente x non avere duplicati... Dictionary funzioniUtente = new Dictionary(); foreach (DS_Auth.DIRITTIRow riga in diritti) { try { funzioniUtente.Add(riga.COD_FUNZIONE, riga.COD_FUNZIONE); } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } } foreach (KeyValuePair kvp in funzioniUtente) { filtroFunz = string.Format("COD_FUNZIONE='{0}'", kvp.Value); // recupero le righe dei righe2perm DS_Auth.Permessi2FunzioneRow[] righe_p2f = (DS_Auth.Permessi2FunzioneRow[])allPerm2Funz.Select(filtroFunz); foreach (DS_Auth.Permessi2FunzioneRow riga_p2f in righe_p2f) { filtroPerm += string.Format("'{0}', ", riga_p2f.COD_PERMESSO); // se è write metto in tab relativa... try { if (riga_p2f.READWRITE == "S") { filtroPermWrite += string.Format("'{0}', ", riga_p2f.COD_PERMESSO); } } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } } } if (filtroPerm == " COD_PERMESSO IN (") { filtroPerm += "'PermessiNonTrovati' "; } filtroPerm = filtroPerm.Remove(filtroPerm.Length - 2); filtroPerm += ") "; DS_Auth.PermessiRow[] righePerm = (DS_Auth.PermessiRow[])allPermessi.Select(filtroPerm, "GRUPPO, NUMERO"); foreach (DS_Auth.PermessiRow rigaPerm in righePerm) { _permessiUtente.ImportRow(rigaPerm); } permessi = _permessiUtente; // salvo, se ci sono, permessi write... if (filtroPermWrite != " COD_PERMESSO IN (") { filtroPermWrite = filtroPermWrite.Remove(filtroPermWrite.Length - 2); filtroPermWrite += ") "; DS_Auth.PermessiRow[] righePermW = (DS_Auth.PermessiRow[])allPermessi.Select(filtroPermWrite, "GRUPPO, NUMERO"); foreach (DS_Auth.PermessiRow rigaPerm in righePermW) { _permessiUtenteWrite.ImportRow(rigaPerm); } } permessiWrite = _permessiUtenteWrite; } /// /// verifica nella tab diritti se l'utente abbia il right richiesto e fornisce bool in risposta /// /// /// public bool userHasRight(string diritto) { bool _answ = false; try { if (diritti != null) { if (diritti.Select(String.Format("COD_FUNZIONE ='{0}'", diritto)).Length > 0) { _answ = true; } } } catch (Exception exc) { logger.lg.scriviLog("userHasRight " + exc.ToString(), tipoLog.EXCEPTION); } return _answ; } /// /// imposta la lingua utente dal valore della riga DB /// protected virtual void setupLingua() { string _lingua = ""; try { _lingua = rigaUtente.CodGruppo; // se contiene "#" prendo primo dei 2 come codice... if (_lingua.IndexOf("#") >= 0) { string[] dati = _lingua.Split('#'); _lingua = dati[0]; } } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } if (string.IsNullOrEmpty(_lingua)) { _lingua = "EN"; } lingua = _lingua; } /// /// oggetto lingua utente con metodi get/set /// public string lingua { get { return memLayer.ML.StringSessionObj("Lingua").ToUpper(); } set { memLayer.ML.setSessionVal("Lingua", value); } } /// /// fornisce un file XML della mappa del sito abilitato per l'utente... /// public string mappaSito { get { return memLayer.ML.StringSessionObj("mappaSito"); } set { memLayer.ML.setSessionVal("mappaSito", value); } } #endregion #region gestione pagina /// /// pagina correntemente visualizzata (URL in sessione) /// public static string pagCorrente { get { return memLayer.ML.StringSessionObj("pagCorrente"); } set { memLayer.ML.setSessionVal("pagCorrente", value); } } /// /// pagina precedentemente visualizzata (URL in sessione) /// public static string pagPrecedente { get { return memLayer.ML.StringSessionObj("pagPrecedente"); } set { memLayer.ML.setSessionVal("pagPrecedente", value); } } /// /// restituisce il nome della pagina corrente /// public static string getPage(Uri MyUrl) { string answ = ""; try { answ = MyUrl.LocalPath.Split('/').Last(); } catch (Exception exc) { logger.lg.scriviLog(exc.ToString(), tipoLog.EXCEPTION); } return answ; } #endregion } }