protected void Page_Load(object sender, EventArgs e)
        {
            settingsMasterPage = (SettingsMasterPage)Page.Master;
            settingsMasterPage.InitializeMasterPageComponents();

            int     loginId;
            Boolean isNumeric = int.TryParse(Request.QueryString["loginId"], out loginId);

            if (!isNumeric)
            {
                EmbedClientScript.ShowErrorMessage(this, "Os parâmetros passados para a página não estão em um formato válido.", true);
                return;
            }

            Tenant tenant = (Tenant)Session["tenant"];

            loginDAO = new LoginDAO(settingsMasterPage.dataAccess.GetConnection());
            AccountingLib.Entities.Login login = loginDAO.GetLogin(tenant.id, loginId);
            if (login == null)
            {
                login          = new AccountingLib.Entities.Login();
                login.tenantId = tenant.id;
            }

            SettingsInput settingsInput = new SettingsInput(settingsArea, null);

            settingsInput.AddHidden("txtId", login.id.ToString());
            settingsInput.AddHidden("txtTenantId", login.tenantId.ToString());
            settingsInput.AddHidden("txtPassword", login.password);
            settingsInput.Add("txtUsername", "Login", login.username);
            settingsInput.AddDropDownList("cmbUserGroup", "Grupo/Permissão", login.userGroup, typeof(UserGroupEnum));
        }
        public Boolean ValidateCredentials()
        {
            // Divide o loginName em dominio(empresa) e nome do usuário
            String[] nameParts = loginName.Split(new Char[] { '\\' });
            if (nameParts.Length != 2)
            {
                errorMessage = @"Informar empresa e usuário (Ex.: Datacopy\guest)!";
                return(false);
            }

            // Verifica se foi entrado um domínio válido (se empresa existe)
            TenantDAO tenantDAO = new TenantDAO(sqlConnection);

            tenant = tenantDAO.GetTenant(nameParts[0]);
            if (tenant == null)
            {
                errorMessage = "Empresa inexistente!";
                return(false);
            }

            // A consulta ao tenant no BD não é case sensitive, devido a isso o tenant é retornado
            // independente se as letras estão em maiúsculas ou minúsculas. Agora faço a comparação
            // case sensitive
            if (tenant.name != nameParts[0])
            {
                errorMessage = "A empresa não confere!";
                return(false);
            }

            String username = nameParts[1];
            String userpass = Cipher.GenerateHash(password);

            // A consulta ao username no BD não é case sensitive, devido a isso o login é retornado
            // independente se as letras estão em maiúsculas ou minúsculas. Posteriormente  é  feita
            // uma comparação case sensitive no username ( em loginValidator )
            LoginDAO loginDAO = new LoginDAO(sqlConnection);

            login = loginDAO.GetLogin(tenant.id, username);

            LoginValidator loginValidator = new LoginValidator(login);

            if (!loginValidator.CheckCredentials(username, userpass))
            {
                errorMessage = loginValidator.GetLastError();
                return(false);
            }

            // Se todas a verificações foram bem sucedidas retorna status de sucesso
            return(true);
        }