Files
XPS/XPS/WebUserControls/mod_menuTop.ascx.cs
T
2017-02-13 09:14:48 +01:00

296 lines
11 KiB
C#

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using SteamWare;
namespace XPS.WebUserControls
{
public partial class mod_menuTop : SteamWare.UserControl
{
private string _titleString;
#region gestione eventi
public event EventHandler eh_reqUpdateMenu;
#endregion
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Page.Title = titolo; // Request.Url.ToString();
// se ho cambiato pagina registro...)
if (devicesAuthProxy.pagPrecedente != titolo)
{
devicesAuthProxy.pagPrecedente = devicesAuthProxy.pagCorrente;
}
// salvo pagina corrente
devicesAuthProxy.pagCorrente = titolo;
}
// SOLO se la pagina NON E' "safe"...
if (memLayer.ML.confReadString("PageNoIndex").IndexOf(titolo) < 0)
{
bool userOk = checkUser();
bool pageOk = checkPageIsAuth();
// controllo se c'è utente in sessione..
if ((userOk))
{
// ora controllo pagina...
if (!pageOk)
{
if (devicesAuthProxy.stObj.isPageEnabled(devicesAuthProxy.pagPrecedente))
{
Response.Redirect(devicesAuthProxy.pagPrecedente);
}
else
{
Response.Redirect("Default");
}
}
}
else
{
// rimando pagina x registrazione devices
Response.Redirect("UserAdmin");
}
}
// se l'utente c'è...
if (devicesAuthProxy.stObj.isAuth && !Page.IsPostBack)
{
updateTreeMenu();
}
if (memLayer.ML.isInSessionObject("doUpdateNow"))
{
doFullDataUpdate();
memLayer.ML.emptySessionVal("doUpdateNow");
}
}
/// <summary>
/// verifica che la pagina sia tra quelle autorizzate x l'utente
/// </summary>
/// <returns></returns>
private bool checkPageIsAuth()
{
bool allOk = false;
bool pageSafe = (memLayer.ML.confReadString("PageNoIndex").IndexOf(titolo) >= 0);
bool pageAuth = devicesAuthProxy.stObj.isPageEnabled(titolo);
allOk = (pageSafe || pageAuth);
return allOk;
}
/// <summary>
/// verifica presenza utente autorizzato in sessione
/// </summary>
private bool checkUser()
{
bool allOk = devicesAuthProxy.stObj.isAuth;
//if (!devicesAuthProxy.stObj.isAuth)
//{
// controllo cookie device...
allOk = checkAuthCookie();
if (!allOk)
{
ResetUser();
}
//}
return allOk;
}
/// <summary>
/// Restituisce cognome/nome da sessione...
/// </summary>
public string CognomeNome
{
get
{
string answ = "-";
try
{
answ = SteamWare.devicesAuthProxy.stObj.CognomeNome;
}
catch
{ }
return answ;
}
}
/// <summary>
/// verifica la presenza di un cookie VALIDO per autorizzare il device ed avvia utente...
/// </summary>
private bool checkAuthCookie()
{
bool answ = false;
try
{
HttpCookie cookie = Request.Cookies[devicesAuthProxy.AuthCookieName];
if (!(cookie == null || cookie.Value == ""))
{
// ricavo utente da cookie...
string userAgent = "";
string postazione_IP = "";
string devSecret = cookie.Value;
DS_Auth.AnagDevicesRow device = null;
// cerco il device...ogni dipendente può averne + di 1 registrato a suo nome...
string email = "";
try
{
device = devicesAuthProxy.stObj.taAnagDev.getByDeviceSecret(devSecret)[0];
email = device.USER_NAME;
}
catch
{ }
if (email != "")
{
// aggiorno descrizione (user agent) ed IP...
userAgent = Request.UserAgent;
postazione_IP = Request.UserHostAddress;
// controllo IP e DeviceDescription x eventuale update
if ((device.lastIPv4 != postazione_IP) || (device.Description != userAgent))
{
// salvo ultimo "contatto" del device aggiornando descrizione ed IP
devicesAuthProxy.stObj.taAnagDev.updateIP(device.IdxDevice, DateTime.Now, postazione_IP, userAgent);
}
// salvo in sessione utente
memLayer.ML.setSessionVal("email", email);
// avvio utente...
devicesAuthProxy.stObj.startUpUtente(email);
// salvo gruppo...
if (devicesAuthProxy.stObj.isAuth)
{
// se tutto ok
memLayer.ML.setSessionVal("Gruppo", devicesAuthProxy.stObj.rigaUtente.CodGruppo);
answ = true;
}
}
}
}
catch (Exception exc)
{
logger.lg.scriviLog(string.Format("Errore in checkAuthCookie:{0}{1}", Environment.NewLine, exc), tipoLog.EXCEPTION);
}
return answ;
}
private void ResetUser()
{
devicesAuthProxy.stObj.clearAllUserData();
// svuoto cookie...
memLayer.ML.setCookieVal(devicesAuthProxy.AuthCookieName, "");
memLayer.ML.emptyCookieVal(devicesAuthProxy.AuthCookieName);
}
protected void btnLogOut_Click(object sender, EventArgs e)
{
Session.Abandon();
ResetUser();
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
doFullDataUpdate();
user_std.UtSn.ricaricaMappaSito();
updateTreeMenu();
}
private void doFullDataUpdate()
{
// salvo i dati attuali...
string cod_cdc = SteamWare.memLayer.ML.StringSessionObj("valRicercaCdC");
string lingua = devicesAuthProxy.stObj.lingua;
string USER_NAME = SteamWare.memLayer.ML.StringSessionObj("USER_NAME");
string DOMINIO = SteamWare.memLayer.ML.StringSessionObj("DOMINIO");
bool isForceUser = user_std.UtSn.isForcedUser;
// salvo i valori delle tab in session...
Dictionary<string, string> sessionParam = SteamWare.memLayer.ML.valSess2SurvUpd;
// svuoto session e cache per rileggere i dati da Db
Session.RemoveAll();
SteamWare.memLayer.ML.flushRegisteredCache();
// rimemorizzo
SteamWare.memLayer.ML.setSessionVal("valRicercaCdC", cod_cdc);
devicesAuthProxy.stObj.startUpUtente(USER_NAME);
devicesAuthProxy.stObj.lingua = lingua;
user_std.UtSn.isForcedUser = isForceUser;
SteamWare.DataWrap.DW.resetVocabolario();
// risalvo in session i valori...
foreach (KeyValuePair<string, string> kvp in sessionParam)
{
SteamWare.memLayer.ML.setSessionVal(kvp.Key, kvp.Value, true);
}
// cambio visibilità del menù laterale...
if (eh_reqUpdateMenu != null)
{
eh_reqUpdateMenu(this, new EventArgs());
}
Response.Redirect(devicesAuthProxy.pagCorrente);
}
protected void bindControlli()
{
if (!Page.IsPostBack)
{
// solo se user è auth...
if (devicesAuthProxy.stObj.isAuth)
{
lblTitle.Text = user_std.UtSn.Traduci(SteamWare.memLayer.ML.confReadString("titleApp"));
if (_titleString != "")
{
_titleString = "";
Session["_titleString"] = _titleString;
Session["SessionUpdateMenu"] = true;
}
else
{
Session["SessionUpdateMenu"] = false;
}
btnLogOut.Text = user_std.UtSn.Traduci("LogOut");
btnUpdate.Text = user_std.UtSn.Traduci("Update");
lblUser.Text = String.Format("{0}: {1}", user_std.UtSn.Traduci("User"), devicesAuthProxy.stObj.CognomeNome);
setTimer();
setClock();
}
}
}
/// <summary>
/// imposta il tempo di scadenza del timer x il refresh della pagina (della parte top) per evitare che la sessione sul server scada
/// </summary>
private void setTimer()
{
Timer1.Interval = SteamWare.memLayer.ML.confReadInt("intUpdatePagina_ms");
}
protected void Timer1_Tick(object sender, EventArgs e)
{
setClock();
}
private void setClock()
{
lblDateTime.Text = DateTime.Now.ToString("HH:mm:ss");
}
protected void lblUser_Click(object sender, EventArgs e)
{
Response.Redirect("./chLang.aspx");
}
private void updateTreeMenu()
{
//XmlDS.Data = user_std.UtSn.mappaSito;
XmlDS.Data = devicesAuthProxy.stObj.mappaSito;
//devicesAuthProxy.stObj.ricaricaMappaSito();
//XmlDS.Data = devicesAuthProxy.stObj.mappaSitoLive;
XmlDS.XPath = "mainMenu/menu";
XmlDS.DataBind();
}
}
}