Exemplo n.º 1
0
        public ActionResult ManageEmployee(EmployeeViewModel model, Address address, bool changeLoginInfo)
        {
            if (ModelState.IsValid)
            {
                var user = db.Users.Find(model.ID);
                // transferir propiedaades entre el modelo de empleado y el objeto de usuario
                // exceptuando las propiedades especificadas en el último argumento.
                GlobalHelpers.Transfer<EmployeeViewModel, User>(model, user, "Address,Phones,password");
                if (changeLoginInfo) // si se especificó cambiar los datos de inicio de sesión
                {
                    if (user.password != model.password) // si se cambió la contraseña
                    {
                        var passwordHelper = new PasswordHelper();
                        if (!passwordHelper.HashPassword(model.password))
                        {
                            model.Address = address;
                            ModelState.AddModelError("", _("lblPasswordPolicyErr"));
                            return View(model);
                        }
                        user.password = PWDTK.HashBytesToHexString(passwordHelper.Hash);
                        user.salt = PWDTK.HashBytesToHexString(passwordHelper.Salt);
                    }
                }

                GlobalHelpers.Transfer<Address, Address>(address, user.Address, "ID,Insurers,Users");
                user.gender = ((char)model.gender).ToString();
                user.maritalStatus = ((char)model.maritalStatus).ToString();
                db.Entry(user).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index", "Home");
            }
            model.Address = address;

            return View(model);
        }
Exemplo n.º 2
0
        public ActionResult Edit(PatientViewModel model, Address address, bool changeLoginInfo)
        {
            if (ModelState.IsValid)
            {
                var user = db.Users.Find(model.ID);
                GlobalHelpers.Transfer <PatientViewModel, User>(model, user, "Address,Phones,password");
                if (changeLoginInfo)
                {
                    if (user.password != model.password)
                    {
                        var passwordHelper = new PasswordHelper();
                        if (!passwordHelper.HashPassword(model.password))
                        {
                            model.Address = address;
                            ModelState.AddModelError("", _("lblPasswordPolicyErr"));
                            return(View(model));
                        }
                        user.password = PWDTK.HashBytesToHexString(passwordHelper.Hash);
                        user.salt     = PWDTK.HashBytesToHexString(passwordHelper.Salt);
                    }
                }

                GlobalHelpers.Transfer <Address, Address>(address, user.Address, "ID,Insurers,Users");
                user.gender          = ((char)model.gender).ToString();
                user.maritalStatus   = ((char)model.maritalStatus).ToString();
                db.Entry(user).State = EntityState.Modified;
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            model.Address = address;

            return(View(model));
        }
Exemplo n.º 3
0
        public ActionResult ManageDoctor(DoctorViewModel model, Address address, bool changeLoginInfo)
        {
            if (ModelState.IsValid)
            {
                var doctor = db.Users.Find(model.ID);
                GlobalHelpers.Transfer<DoctorViewModel, User>(model, doctor, "Address,Phones,password");
                if (changeLoginInfo)
                {
                    if (doctor.password != model.password)
                    {
                        var passwordHelper = new PasswordHelper();
                        if (!passwordHelper.HashPassword(model.password))
                        {
                            model.Address = address;
                            ModelState.AddModelError("", _("lblPasswordPolicyErr"));
                            return View(model);
                        }
                        doctor.password = PWDTK.HashBytesToHexString(passwordHelper.Hash);
                        doctor.salt = PWDTK.HashBytesToHexString(passwordHelper.Salt);
                    }
                }

                GlobalHelpers.Transfer<Address, Address>(address, doctor.Address, "ID,Insurers,Users");
                doctor.gender = ((char)model.gender).ToString();
                doctor.maritalStatus = ((char)model.maritalStatus).ToString();
                var doctorData = db.Doctors.FirstOrDefault(d => d.userID == model.ID);
                doctorData.speciality = model.speciality;
                db.Entry(doctor).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index", "Home");
            }
            model.Address = address;

            return View(model);
        }
Exemplo n.º 4
0
        private void CmdGuardar_Click()
        {
            try
            {
                //  tblUser tbluser = _db.tblUsers.Find(_Id);
                // _db.Entry(tbluser).State = System.Data.Entity.EntityState.Modified;

                IntPtr passwordBSTR     = default(IntPtr);
                string insecurePassword = "";
                passwordBSTR     = Marshal.SecureStringToBSTR(Password);
                insecurePassword = Marshal.PtrToStringBSTR(passwordBSTR);

                IntPtr passwordVerificationBSTR     = default(IntPtr);
                string insecurePasswordVerification = string.Empty;

                passwordVerificationBSTR     = Marshal.SecureStringToBSTR(PasswordVerification);
                insecurePasswordVerification = Marshal.PtrToStringBSTR(passwordVerificationBSTR);

                if (!insecurePassword.Equals(insecurePasswordVerification))
                {
                    throw new Exception("Error con el Password");
                }

                //Hash password
                if (!PasswordMeetsPolicy(insecurePassword, PwdPolicy))
                {
                    return;
                }

                _salt = PWDTK.GetRandomSalt(saltSize);

                string salt = PWDTK.GetSaltHexString(_salt);

                _hash = PWDTK.PasswordToHash(_salt, insecurePassword, iterations);

                var hashedPassword = PWDTK.HashBytesToHexString(_hash);

                using (SqlExcuteCommand exe = new SqlExcuteCommand()
                {
                    DBCnnStr = DBEndososCnnStr
                })
                {
                    exe.MyUpdateUser(_Id, hashedPassword, salt);
                }

                //  tbluser.SecurityStamp = salt;
                //  tbluser.PasswordHash = hashedPassword;

                //_db.SaveChanges();
                MessageBox.Show("Dones...", "Done", MessageBoxButton.OK, MessageBoxImage.Information);
                CmdSalir_Click();
            }
            catch (Exception ex)
            {
                MethodBase site = ex.TargetSite;
                MessageBox.Show(ex.Message, site.Name, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Exemplo n.º 5
0
        public ActionResult ResetPassword(ResetModel model)
        {
            if (ModelState.IsValid)
            {
                var user = db.Users
                    .FirstOrDefault(u => u.email == model.email);

                if (user == null)
                {
                    ModelState.AddModelError("", _("lblInvalidMailErr"));
                }
                else
                {
                    try
                    {
                        var fromAddress = new MailAddress(Settings.Default.SMTP_Mail, Settings.Default.SMTP_FromName);
                        var toAddress = new MailAddress(model.email, user.firstName);
                        string fromPassword = Settings.Default.SMTP_Password;
                        string subject = Language.ResetPasword_SubjectMsg;
                        var passwordHelper = new PasswordHelper();
                        var password = GlobalHelpers.CreateRandomPassword(10);
                        passwordHelper.HashGeneratedPassword(password);
                        user.password = PWDTK.HashBytesToHexString(passwordHelper.Hash);
                        user.salt = PWDTK.HashBytesToHexString(passwordHelper.Salt);
                        db.SaveChanges();
                        string body = string.Format(
                            Language.ResetPassword_BodyMsg, user.CompleteName,
                            user.username, password
                        );

                        var smtp = new SmtpClient
                        {
                            Host = Settings.Default.SMTP_Host,
                            Port = Convert.ToInt16(Settings.Default.SMTP_Port),
                            EnableSsl = true,
                            DeliveryMethod = SmtpDeliveryMethod.Network,
                            UseDefaultCredentials = false,
                            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
                        };
                        using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body, IsBodyHtml = true })
                        { smtp.Send(message); }
                        TempData["success"] = _("lblSendMailSuccess");
                    }
                    catch
                    {
                        ModelState.AddModelError("", _("lblSendMailErr"));

                    }
                }
            }
            return View(model);
        }
Exemplo n.º 6
0
        public ActionResult Create(DoctorViewModel model, Address address, string[] Uphones)
        {
            if (ModelState.IsValid)
            {
                db.Addresses.Add(address);
                var user = new User();
                GlobalHelpers.Transfer <DoctorViewModel, User>(model, user);
                user.gender        = ((char)model.gender).ToString();
                user.maritalStatus = ((char)model.maritalStatus).ToString();
                // obtener hash de contraseña para almacenar en la bd.
                var passwordHelper = new PasswordHelper();
                if (!passwordHelper.HashPassword(user.password))
                {
                    ModelState.AddModelError("", _("lblPasswordPolicyErr"));
                    return(View(model));
                }
                user.password  = PWDTK.HashBytesToHexString(passwordHelper.Hash);
                user.salt      = PWDTK.HashBytesToHexString(passwordHelper.Salt);
                user.Address   = address;
                user.superUser = false;
                user.status    = true;
                db.Users.Add(user);
                // Agregar telefonos
                if (Uphones != null)
                {
                    foreach (string n in Uphones)
                    {
                        var phone = new Phone();
                        var data  = n.Split('|');
                        phone.number = data[0];
                        phone.type   = (int)GlobalHelpers.ParseEnum <PhoneTypes>(data[1]);
                        phone.notes  = data[2];
                        db.Phones.Add(phone);
                        user.Phones.Add(phone);
                    }
                }
                var doctor = new Doctor();
                doctor.User       = user;
                doctor.speciality = model.speciality;
                db.Doctors.Add(doctor);
                db.SaveChanges();
                var roleProvider = (SimpleRoleProvider)Roles.Provider;
                roleProvider.AddUsersToRoles(new[] { model.username }, new[] { "Doctor" });
                return(RedirectToAction("Index"));
            }

            return(View(model));
        }
Exemplo n.º 7
0
        private void GetHashButton_Click(object sender, RoutedEventArgs e)
        {
            if (!PasswordMeetsPolicy(PasswordTextBox.Password, PwdPolicy))
            {
                return;
            }

            //Get a random salt
            _salt = PWDTK.GetRandomSalt(saltSize);
            //Generate the hash value
            _hash = PWDTK.PasswordToHash(_salt, PasswordTextBox.Password, iterations);
            //store as a minimum salt, hash and the userID in the database now, I would also recomend storing iteration count as this will likely change in the future as hardware computes faster and so you may need to adjust iterations in the future
            CompareHashButton.IsEnabled = true;
            MessageBox.Show("Users Password Hash: " + PWDTK.HashBytesToHexString(_hash));
            MessageBox.Show("Hash stored, now try changing the text in the password field and hit the \"Compare\" button");
        }
Exemplo n.º 8
0
        public ActionResult Create(PatientViewModel model, Address address, string[] Uphones)
        {
            if (ModelState.IsValid)
            {
                db.Addresses.Add(address);
                var user = new User();
                GlobalHelpers.Transfer <PatientViewModel, User>(model, user, "Phones");
                user.gender        = ((char)model.gender).ToString();
                user.maritalStatus = ((char)model.maritalStatus).ToString();
                var passwordHelper = new PasswordHelper();
                if (!passwordHelper.HashPassword(user.password))
                {
                    ModelState.AddModelError("", _("lblPasswordPolicyErr"));
                    return(View(model));
                }
                user.password  = PWDTK.HashBytesToHexString(passwordHelper.Hash);
                user.salt      = PWDTK.HashBytesToHexString(passwordHelper.Salt);
                user.Address   = address;
                user.status    = true;
                user.superUser = false;
                db.Users.Add(user);
                if (Uphones != null)
                {
                    foreach (string n in Uphones)
                    {
                        var phone = new Phone();
                        var data  = n.Split('|');
                        phone.number = data[0];
                        phone.type   = (int)GlobalHelpers.ParseEnum <PhoneTypes>(data[1]);
                        phone.notes  = data[2];
                        db.Phones.Add(phone);
                        user.Phones.Add(phone);
                    }
                }
                var patient = new Patient();
                patient.userID   = user.ID;
                patient.createBy = WebSecurity.CurrentUserId;
                db.Patients.Add(patient);
                db.SaveChanges();
                var roleProvider = (SimpleRoleProvider)Roles.Provider;
                roleProvider.AddUsersToRoles(new[] { model.username }, new[] { "Patient" });
                return(RedirectToAction("Index"));
            }

            return(View(model));
        }
Exemplo n.º 9
0
        private void Guardar_Click()
        {
            try
            {
                string areasDeAcceso = string.Empty;

                foreach (string s in _AreasDeAcceso)
                {
                    areasDeAcceso += s;
                }
                switch (_Operation)
                {
                case 1:
                {        //Anadir
                    IntPtr passwordBSTR     = default(IntPtr);
                    string insecurePassword = "";
                    passwordBSTR     = Marshal.SecureStringToBSTR(Password);
                    insecurePassword = Marshal.PtrToStringBSTR(passwordBSTR);

                    IntPtr passwordVerificationBSTR     = default(IntPtr);
                    string insecurePasswordVerification = string.Empty;

                    passwordVerificationBSTR     = Marshal.SecureStringToBSTR(PasswordVerification);
                    insecurePasswordVerification = Marshal.PtrToStringBSTR(passwordVerificationBSTR);

                    if (!insecurePassword.Equals(insecurePasswordVerification))
                    {
                        throw new Exception("Error con el Password");
                    }

                    //Policy
                    if (!userMeetsPolicy(CbUser_Text, UserPolicy))
                    {
                        return;
                    }

                    if (!PasswordMeetsPolicy(insecurePassword, PwdPolicy))
                    {
                        return;
                    }

                    //Hash password
                    _salt = PWDTK.GetRandomSalt(saltSize);

                    string salt = PWDTK.GetSaltHexString(_salt);

                    _hash = PWDTK.PasswordToHash(_salt, insecurePassword, iterations);

                    var hashedPassword = PWDTK.HashBytesToHexString(_hash);

                    List <tblUser> u = new List <tblUser>
                    {
                        new tblUser
                        {
                            UserId        = System.Guid.NewGuid(),
                            UserName      = CbUser_Text,
                            PasswordHash  = hashedPassword,
                            SecurityStamp = salt,
                            Email         = CbUser_Text + "@jolpr.com",
                            AreasDeAcceso = areasDeAcceso
                        }
                    };

                    using (SqlExcuteCommand exe = new SqlExcuteCommand()
                        {
                            DBCnnStr = DBEndososCnnStr
                        })
                    {
                        exe.MyInsertUsers(u[0].UserId, u[0].UserName, u[0].PasswordHash, u[0].SecurityStamp, u[0].Email, u[0].AreasDeAcceso);
                    }

                    MyRefresh();
                    //   u.ForEach(m => _db.tblUsers.Add(m));
                    //  _db.SaveChanges();
                }
                break;

                case 2:    //Editar Areas De Acceso
                {
                    using (SqlExcuteCommand exe = new SqlExcuteCommand()
                        {
                            DBCnnStr = DBEndososCnnStr
                        })
                    {
                        exe.MyUpdateUser(_Id, areasDeAcceso);
                    }

                    MyRefresh();


                    // tblUser tbluser = _db.tblUsers.Find(_Id);
                    // _db.Entry(tbluser).State = System.Data.Entity.EntityState.Modified;
                    //
                    // tbluser.AreasDeAcceso = areasDeAcceso;
                    //
                    // _db.SaveChanges();
                }
                break;

                case 3:    //Delete
                {
                    string msg = "You are about to delete 1 user\r";
                    msg += "Click yes to permanently delete this user( " + CbUser_Text + " ).\r";
                    msg += "You won't be able to undo those changes.";

                    var response = MessageBox.Show("!!!" + msg, "Delete...", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);

                    if (response == MessageBoxResult.Yes)
                    {
                        using (SqlExcuteCommand exe = new SqlExcuteCommand()
                            {
                                DBCnnStr = DBEndososCnnStr
                            })
                        {
                            exe.MyDeleteUsers(_Id);
                        }

                        MyRefresh();

                        //Users tbluser = _db.tblUsers.Find(_Id);
                        //
                        //
                        //_db.tblUsers.Remove(tbluser);
                        //_db.SaveChanges();
                    }
                }
                break;

                case 4:     //Edit Pass
                {
                    //    tblUser tbluser = _db.tblUsers.Find(_Id);
                    //    _db.Entry(tbluser).State = System.Data.Entity.EntityState.Modified;
                    //
                    IntPtr passwordBSTR     = default(IntPtr);
                    string insecurePassword = "";
                    passwordBSTR     = Marshal.SecureStringToBSTR(Password);
                    insecurePassword = Marshal.PtrToStringBSTR(passwordBSTR);

                    IntPtr passwordVerificationBSTR     = default(IntPtr);
                    string insecurePasswordVerification = string.Empty;

                    passwordVerificationBSTR     = Marshal.SecureStringToBSTR(PasswordVerification);
                    insecurePasswordVerification = Marshal.PtrToStringBSTR(passwordVerificationBSTR);

                    if (!insecurePassword.Equals(insecurePasswordVerification))
                    {
                        throw new Exception("Error con el Password");
                    }

                    //Policy
                    if (!userMeetsPolicy(CbUser_Text, UserPolicy))
                    {
                        return;
                    }

                    if (!PasswordMeetsPolicy(insecurePassword, PwdPolicy))
                    {
                        return;
                    }

                    //Hash password
                    _salt = PWDTK.GetRandomSalt(saltSize);

                    string salt = PWDTK.GetSaltHexString(_salt);

                    _hash = PWDTK.PasswordToHash(_salt, insecurePassword, iterations);

                    var hashedPassword = PWDTK.HashBytesToHexString(_hash);


                    using (SqlExcuteCommand exe = new SqlExcuteCommand()
                        {
                            DBCnnStr = DBEndososCnnStr
                        })
                    {
                        exe.MyUpdateUser(_Id, hashedPassword, salt);
                    }

                    MyRefresh();


                    //    tbluser.SecurityStamp = salt;
                    //    tbluser.PasswordHash = hashedPassword;
                    //
                    //    _db.SaveChanges();
                }
                break;
                }
                Cancelar_Click();
            }
            catch (Exception ex)
            {
                MethodBase site = ex.TargetSite;
                MessageBox.Show(ex.ToString(), site.Name, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Exemplo n.º 10
0
        private void CbUser_ChangeItem()
        {
            try
            {
                var pass = from p in _db
                           where p.UserName == CbUser_SelectedItem
                           select p;

                cmdEdit_IsEnabled     = true;
                cmdEditPass_IsEnabled = true;
                cmdCancel_IsEnabled   = true;

                cmdAdd_IsEnabled        = false;
                cmdDelete_IsEnabled     = true;
                Password_IsEnabled      = false;
                Password_Cls_Visibility = Visibility.Hidden;

                cambiarPassword_IsChecked = false;  //A
                autorizarLotes_IsChecked  = false;  //B
                procesarLotes_IsChecked   = false;  //C
                verElector_IsChecked      = false;  //D
                reportes_IsChecked        = false;  //E
                reversarLote_IsChecked    = false;  //F
                configuraciones_IsChecked = false;  //G
                corregirEndosos_IsChecked = false;  //H

                _AreasDeAcceso = new string[9];

                foreach (var pss in pass)
                {
                    Byte[] hash = PWDTK.HashHexStringToBytes(pss.PasswordHash);

                    password_Cls = PWDTK.HashBytesToHexString(hash);  // Helper.PasswordHash.HashPasswordDecrypt(pss.PasswordHash);  // Helper.PasswordHash.Decrypt(pss.PasswordHash);

                    verificacionPassword_Cls = password_Cls;
                    //_Id = pss.UserId;
                    Id = pss.UserId.ToString();
                    foreach (char c in pss.AreasDeAcceso.ToCharArray())
                    {
                        switch (c)
                        {
                        case 'A':
                            _AreasDeAcceso[1]         = "A";
                            cambiarPassword_IsChecked = true;
                            break;

                        case 'B':
                            _AreasDeAcceso[2]        = "B";
                            autorizarLotes_IsChecked = true;
                            break;

                        case 'C':
                            _AreasDeAcceso[3]       = "C";
                            procesarLotes_IsChecked = true;
                            break;

                        case 'D':
                            _AreasDeAcceso[4]    = "D";
                            verElector_IsChecked = true;
                            break;

                        case 'E':
                            _AreasDeAcceso[5]  = "E";
                            reportes_IsChecked = true;
                            break;

                        case 'F':
                            _AreasDeAcceso[6]      = "F";
                            reversarLote_IsChecked = true;
                            break;

                        case 'G':
                            _AreasDeAcceso[7]         = "G";
                            configuraciones_IsChecked = true;
                            break;

                        case 'H':
                            _AreasDeAcceso[8]         = "H";
                            corregirEndosos_IsChecked = true;
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MethodBase site = ex.TargetSite;
                MessageBox.Show(ex.Message, site.Name, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Exemplo n.º 11
0
        /*
         * protected void btnLogin_Click(object sender, EventArgs e) {
         *  if (Membership.ValidateUser(tbUserName.Text, tbPassword.Text)) {
         *      if(string.IsNullOrEmpty(Request.QueryString["ReturnUrl"])) {
         *          FormsAuthentication.SetAuthCookie(tbUserName.Text, false);
         *          Response.Redirect("~/");
         *      }
         *      else
         *          FormsAuthentication.RedirectFromLoginPage(tbUserName.Text, false);
         *  }
         *  else {
         *      tbUserName.ErrorText = "Invalid user";
         *      tbUserName.IsValid = false;
         *  }
         * }
         */


        protected void ASPxButtonLogin_Click(object sender, EventArgs e)
        {
            Page.Validate();

            if (!Page.IsValid)
            {
                return;
            }


            if (string.IsNullOrEmpty(recaptchaUserValue.Value))
            {
                Msg.Visible   = true;
                Msg.InnerHtml = "Error en los datos de seguridad, vuelva a recargar la página.";
                return;
            }


            var Recaptchav3 = new RecaptchaVerificationHelper();

            // If your site is behind CloudFlare, be sure you're suing the CF-Connecting-IP header value instead:
            // https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-Cloudflare-handle-HTTP-Request-headers

            RecaptchaVerificationResult recaptchaResult = Recaptchav3.VerifyRecaptchav3Response(
                Global.Configuration.Security.Google.Recaptcha.v3.GetGoogleRecaptchaSecretKey()
                , Global.Configuration.Security.Google.Recaptcha.v3.GetGoogleRecaptchaWebsiteKey()
                , Request.UserHostAddress
                , recaptchaUserValue.Value
                );

            if (recaptchaResult == RecaptchaVerificationResult.Success)
            {
                //divMessage.InnerHtml = "Score: " + Recaptchav3.Score;
                decimal?minScore = new decimal(0.6);
                if (Recaptchav3.Score < minScore)
                {
                    Response.Redirect("~/Captcha.aspx", true);
                }


                //create session
                // Global.Sessions.UserCreateSession();

                // Go main menu.
                if (ValidateLogin())
                {
                    HttpCookie userid = new HttpCookie("User.Email", Email.Value.ToString())
                    {
                        Expires = DateTime.Now.AddYears(1)
                    };
                    Response.Cookies.Add(userid);

                    Response.Redirect("~/recursos/");
                }
                else
                {
                    Msg.Visible = true;
                }
                Msg.InnerHtml = "Login fallido. Por favor revise sus datos e intente de nuevo.";
            }
            else
            {
                Msg.Visible   = true;
                Msg.InnerHtml = "Existe un problema para validar la seguridad, intente mas tarde o por favor contacte a soporte técnico.";
            }



            bool ValidateLogin()
            {
                bool   loginOK = false;
                string salt = string.Empty, encrypass = string.Empty, dbpassword = string.Empty;

                SqlParameter[] parameters =
                {
                    new SqlParameter {
                        ParameterName = "Email", DbType = DbType.AnsiString, Size = 50, Value = Email.Value.ToString()
                    }
                };

                string tsql      = @"
SELECT TOP 1 
       [UserRegisterID]
      ,[Names]
      ,[LastName]
      ,[Email]
      ,[Password]
      ,[PasswordSalt]
  FROM [CMSUserRegister]
WHERE
Email = @Email 
ORDER BY [UserRegisterID] DESC
;";
                var    sqlserver = new SqlApiSqlClient();


                using (sqlserver.Connection = new SqlConnection(Global.Configuration.DB.GetConnectionStringDBMain()))
                {
                    using (var dr = sqlserver.DataReaderSqlString(tsql, parameters))
                    {
                        if (dr.Read())
                        {
                            salt       = dr["PasswordSalt"].ToString();;
                            dbpassword = dr["Password"].ToString();;


                            Byte[] _salt;
                            Byte[] _hash;

                            //This is the password policy that all passwords must adhere to, if the password doesn't meet the policy we save CPU processing time by not even bothering to calculate hash of a clearly incorrect password
                            PWDTK.PasswordPolicy PwdPolicy = new PWDTK.PasswordPolicy(numberUpper, numberNonAlphaNumeric, numberNumeric, minPwdLength, maxPwdLength);

                            //or we can just use the default password policy provided by the API like below
                            //PWDTK.PasswordPolicy PwdPolicy = PWDTK.cDefaultPasswordPolicy;

                            _salt = PWDTK.HashHexStringToBytes(salt); // reverse operation ;

                            //Generate the hash value
                            _hash = PWDTK.PasswordToHash(_salt, Password.Value.ToString(), iterations);

                            encrypass = PWDTK.HashBytesToHexString(_hash);


                            if (encrypass == dbpassword)
                            {
                                loginOK = true;

                                // Session["User.UserEmail"] = dr["UserEmail"].ToString();
                            }
                            else
                            {
                                loginOK = false;
                            }
                        }
                        else
                        {
                            loginOK = false;
                        }

                        dr.Close();
                    }

                    sqlserver.Connection.Close();
                };


                if (loginOK)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// Metodo utilizado para inicializar la configuración del
        /// plugin WebSecurity, y la inicialización de la conexión
        /// de la base de datos, tomando en cuenta la tabla de la
        /// base de datos que almacenará los datos de los usuarios
        /// de la aplicación. También en este método se insertan los
        /// datos por defecto requeridos para el mínimo funcionamiento
        /// de la aplicación, tales como roles y un usuario por defecto.
        /// </summary>
        public static void RegisterWebSec()
        {
            ///inizializar el websecurity, especificando la tabla
            ///que guardará los datos básicos de usuario.
            WebSecurity.InitializeDatabaseConnection
            (
                "SIGECContext",
                "Users",
                "ID",
                "username",
                autoCreateTables: true
            );

            ///creación de la cuenta por defecto de administrador.
            if (!WebSecurity.UserExists("admin"))
            {
                using (SIGECContext db = new SIGECContext())
                {
                    Address a = new Address();
                    a.city         = "Ciudad";
                    a.municipality = "Municipio";
                    a.sector       = "Sector";
                    a.street       = "Calle";
                    a.number       = "Numero";
                    a.country      = "Republica Dominicana";
                    var passwordHelper = new PasswordHelper();
                    passwordHelper.HashPassword("123456");
                    db.Addresses.Add(a);
                    var user = new User();
                    user.username      = "******";
                    user.password      = PWDTK.HashBytesToHexString(passwordHelper.Hash);
                    user.salt          = PWDTK.HashBytesToHexString(passwordHelper.Salt);
                    user.bornDate      = DateTime.Now;
                    user.createDate    = DateTime.Now;
                    user.email         = "*****@*****.**";
                    user.status        = true;
                    user.gender        = "M";
                    user.maritalStatus = "S";
                    user.dni           = "00000000000";
                    user.firstName     = "admin";
                    user.lastName      = "istrador";
                    user.occupation    = "Super Admin";
                    db.Users.Add(user);
                    user.Address = a;

                    db.SaveChanges();
                }
            }

            var roles = (SimpleRoleProvider)Roles.Provider;

            if (!roles.RoleExists("Admin"))
            {
                roles.CreateRole("Admin");
            }

            if (!roles.GetRolesForUser("admin").Contains("Admin"))
            {
                roles.AddUsersToRoles(new[] { "admin" }, new[] { "Admin" });
            }

            ///insertar datos de menús y acciones en la base de datos
            ///para el manejo de permisos.
            //GlobalHelpers.InsertMenusAndActions();

            ///asignar permisos sobre todas las acciones al rol Admin
            using (var db = new SIGECContext())
            {
                var adminRole = db.webpages_Roles.FirstOrDefault(r => r.RoleName == "Admin");
                foreach (SIGEC.Models.Action a in db.Actions)
                {
                    if (!adminRole.Actions.Contains(a))
                    {
                        adminRole.Actions.Add(a);
                    }
                }
                db.Entry(adminRole).State = System.Data.EntityState.Modified;
                db.SaveChanges();
            }
        }
        /*
         * bool IsUserAlreadyExist()
         * {
         *
         *  SqlParameter[] parameters = {
         *      new SqlParameter { ParameterName="UserLogin", DbType= DbType.AnsiString, Size=128, Value= Email.Value.ToString()}
         *
         *  };
         *
         *  string email = SqlApiSqlClient.GetStringRecordValue("SELECT [UserLogin] FROM Users WHERE [UserLogin] = @UserLogin;", parameters, Global.Configuration.DB.GetConnectionStringDBMain());
         *
         *  if (!string.IsNullOrEmpty(email)) return true;
         *  else return false;
         *
         * }
         */

        //TODO: send confirmation email
        bool CreateUser()
        {
            string salt, encrypass;

            Byte[] _salt;
            Byte[] _hash;

            //This is the password policy that all passwords must adhere to, if the password doesn't meet the policy we save CPU processing time by not even bothering to calculate hash of a clearly incorrect password
            PWDTK.PasswordPolicy PwdPolicy = new PWDTK.PasswordPolicy(numberUpper, numberNonAlphaNumeric, numberNumeric, minPwdLength, maxPwdLength);

            //or we can just use the default password policy provided by the API like below
            //PWDTK.PasswordPolicy PwdPolicy = PWDTK.cDefaultPasswordPolicy;

            //Get a random salt
            _salt = PWDTK.GetRandomSalt(saltSize);
            //Generate the hash value
            _hash = PWDTK.PasswordToHash(_salt, PasswordReg.Value.ToString(), iterations);

            encrypass = PWDTK.HashBytesToHexString(_hash);
            salt      = PWDTK.HashBytesToHexString(_salt); // reverse operation PWDTK.HashHexStringToBytes();


            SqlParameter[] parameters =
            {
                new SqlParameter {
                    ParameterName = "Names", DbType = DbType.AnsiString, Size = 50, Value = Names.Value.ToString()
                }
                , new SqlParameter{
                    ParameterName = "LastName", DbType = DbType.AnsiString, Size = 50, Value = LastName.Value.ToString()
                }
                , new SqlParameter{
                    ParameterName = "Mobile", DbType = DbType.AnsiString, Size = 50, Value = Mobile.Value.ToString()
                }
                , new SqlParameter{
                    ParameterName = "Email", DbType = DbType.AnsiString, Size = 50, Value = Email.Value.ToString()
                }
                , new SqlParameter{
                    ParameterName = "Business", DbType = DbType.AnsiString, Size = 50, Value = Business.Value.ToString()
                }
                , new SqlParameter{
                    ParameterName = "Position", DbType = DbType.AnsiString, Size = 50, Value = Position.Value.ToString()
                }
                , new SqlParameter{
                    ParameterName = "Country", DbType = DbType.AnsiString, Size = 50, Value = Country.Value.ToString()
                }
                , new SqlParameter{
                    ParameterName = "City", DbType = DbType.AnsiString, Size = 50, Value = City.Value.ToString()
                }
                , new SqlParameter{
                    ParameterName = "Telephone", DbType = DbType.AnsiString, Size = 50, Value = Telephone.Value.ToString()
                }
                , new SqlParameter{
                    ParameterName = "Password", DbType = DbType.AnsiString, Size = 1000, Value = encrypass
                }
                , new SqlParameter{
                    ParameterName = "PasswordSalt", DbType = DbType.AnsiString, Size = 1000, Value = salt
                }
            };

            string tsql      = @"
SET NOCOUNT OFF;
INSERT INTO [CMSUserRegister] ([Names], [LastName], [Mobile], [Email], [Business], [Position], [Country], [City], [Telephone], [RegisterDate], [Password], [PasswordSalt], [LastLogin]) VALUES (@Names, @LastName, @Mobile, @Email, @Business, @Position, @Country, @City, @Telephone, GETDATE(), @Password, @PasswordSalt, GETDATE());
; ";
            var    sqlserver = new SqlApiSqlClient();
            int    r         = sqlserver.CommandExecuteSqlString(tsql, parameters, Global.Configuration.DB.GetConnectionStringDBMain());

            if (r == 1)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }