﻿Imports System.Data.SqlClient
Imports System.IO

Public Class LoginUser
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Session("Autenticato") Then
            disconnettiASPxButton.Text = "Disconnetti utente " & Session("sUtente_UserName")
            disconnettiASPxButton.Visible = True
        Else
            disconnettiASPxButton.Text = "Disconnetti utente"
            disconnettiASPxButton.Visible = False
        End If

    End Sub

    Protected Sub loginASPxButton_Click(sender As Object, e As EventArgs) Handles loginASPxButton.Click

        '--- controllo validità dei dati inseriti -----------------------------------------------------
        If UserTextBox.Text.Trim.Contains(" ") Or PwTextBox.Text.Trim.Contains(" ") Then
            Response.Redirect("LoginUser.aspx")
            Exit Sub
        End If
        '----------------------------------------------------------------------------------------------

        Dim nome_ut
        Dim pass
        Dim autenticato As Boolean = False

        nome_ut = Replace(Request.Form("nome_utente"), "'", "''")
        pass = Replace(Request.Form("password"), "'", "''")

        Dim connection = New SqlConnection(ConfigurationManager.ConnectionStrings("pa_systemConnectionString").ConnectionString)
        Try
            connection.Open()
            Dim tmpSQL = "SELECT * FROM utenti WHERE UserName = '" & UserTextBox.Text.Trim & "' AND UserPassword = '" & PwTextBox.Text.Trim & "'"

            '--- esegue il comando ---
            Dim SqlCommand = New SqlCommand(tmpSQL, connection)
            Dim dr = SqlCommand.ExecuteReader()

            If dr.HasRows Then
                dr.Read()

                '---------------------------------------------------------------------------------
                '--- imposta le variabili di sessioni utilizzate poi da tutto il progetto
                '---------------------------------------------------------------------------------
                Session("sUtente_ID") = dr.Item("IDUtente").ToString
                Session("sUtente_UserName") = dr.Item("UserName")
                Session("sUtente_Cognome") = dr.Item("Cognome")
                Session("sUtente_Nome") = dr.Item("Nome")
                Session("sUtente_AdminLicenza") = dr.Item("AmministratoreLicenzaUtente")
                Session("sUtente_Livello") = dr.Item("LivelloAutorizzazione")

                '-- legge la licenza collegata per confermare l'autenticazione
                autenticato = LeggiLicenza(dr.Item("IDLicenza"))
            Else
                '--- non esiste l'utente
                autenticato = False
            End If

            connection.Close()

        Catch ex As Exception
            connection.Close()
            Response.Write("Errore: " & ex.Message)
            autenticato = False
        End Try

        '--- Verifica finale e reindirizzamento utente
        If autenticato Then

            creaCartellaImmagini()          '--- crea la cartella immagini dell'utente

            Session("Autenticato") = True
            Response.Redirect("Default.aspx")
        Else
            Session("Autenticato") = False
            disconnettiUtente()
            Response.Redirect("LoginUser.aspx")
        End If
    End Sub
    Function LeggiLicenza(pIDLicenza)
        '=============================================================================================
        '--- Legge la licenza collegata all'utente
        '=============================================================================================
        Dim autenticato As Boolean = False

        If IsDBNull(pIDLicenza) Then Exit Function

        Dim connection = New SqlConnection(ConfigurationManager.ConnectionStrings("pa_systemConnectionString").ConnectionString)

        Try
            connection.Open()
            Dim tmpSQL = "SELECT * FROM licenza WHERE IDLicenza = " & pIDLicenza.ToString

            '--- esegue il comando ---
            Dim SqlCommand = New SqlCommand(tmpSQL, connection)
            Dim dr = SqlCommand.ExecuteReader()

            If dr.HasRows Then
                dr.Read()

                If dr.Item("Attivo") = True Then
                    autenticato = True
                    '---------------------------------------------------------------------------------
                    '--- imposta le variabili di sessioni utilizzate poi da tutto il progetto
                    '---------------------------------------------------------------------------------
                    Session("sLicenza_ID") = dr.Item("IDLicenza")
                    Session("sLicenza_Descrizione") = dr.Item("Descrizione")

                    '---------------------------------------------------------------------------------
                    '--- crea la stringa di connessione e la mette in una variabile di sessione
                    '---------------------------------------------------------------------------------
                    Dim connString = "Data Source=" & dr.Item("DataSourceIP").ToString.Trim & ";"
                    connString += "Initial Catalog=" & dr.Item("NomeDatabase").ToString.Trim & ";"
                    connString += "Persist Security Info=True;"
                    connString += "User ID=" & dr.Item("UserID").ToString.Trim & ";"
                    connString += "Password=" & dr.Item("Password").ToString.Trim & ""

                    Session("sConnectionString") = connString
                    Session("sDBName") = dr.Item("NomeDatabase").ToString.Trim
                Else
                    '--- la licenza non è attiva
                    autenticato = False
                End If

            Else
                '--- non esiste la licenza o non è valida
                autenticato = False
            End If

            connection.Close()

        Catch ex As Exception
            connection.Close()
            Response.Write("Errore: " & ex.Message)
            autenticato = False
        End Try

        '--- ritorna TRUE se la licenza è ok e quindi è autenticato correttamente
        Return autenticato

    End Function
    Protected Sub disconnettiASPxButton_Click(sender As Object, e As EventArgs) Handles disconnettiASPxButton.Click
        disconnettiUtente()
    End Sub

    Sub disconnettiUtente()

        '--- Disconnette l'utente azzerando le variabili di sessione
        Session("Autenticato") = False
        Session("sUtente_ID") = ""
        Session("sUtente_UserName") = ""
        Session("sUtente_Cognome") = ""
        Session("sUtente_Nome") = ""
        Session("sUtente_AdminLicenza") = ""
        Session("sUtente_Livello") = ""

        '--- variabili Licenza
        Session("sLicenza_ID") = ""
        Session("sLicenza_Descrizione") = ""
        Session("sDBName") = ""

        '--- stringa di connessione
        Session("sConnectionString") = ""

        Response.Redirect("LoginUser.aspx")

    End Sub

    Protected Sub loginClienteASPxButton_Click(sender As Object, e As EventArgs) Handles loginClienteASPxButton.Click
        Response.Redirect("LoginCliente.aspx")
    End Sub


    Sub creaCartellaImmagini()

        Dim xNomeDB As String = Session("sDBName").trim
        Dim DBsuffix = xNomeDB.Substring(8, xNomeDB.Length - 8)    '--- prende la parte a destra del nome dopo "pa_data_" (es. "pa_data_12345" prende 12345)

        Dim folderName As String = "images_" & DBsuffix

        'Dim directoryPath As String = Server.MapPath(String.Format("~/{0}/", folderName.Trim))
        Dim directoryPath As String = Server.MapPath("~/images/" & folderName.Trim)
        If Not Directory.Exists(directoryPath) Then
            Directory.CreateDirectory(directoryPath)
        Else
            ClientScript.RegisterStartupScript(Me.GetType(), "alert", "alert('La cartella già esiste');", True)
        End If

        Session("sImageFolder") = folderName.Trim
    End Sub

End Class