Esempio n. 1
0
        private E_ReminderCreationStatus TryCreateReminder(ReminderModel model)
        {
            string passwordHash = Security.GetSHA1Hash(model.Password);
            E_ReminderCreationStatus resultStatus = E_ReminderCreationStatus.error;


            E_VerificationStatus verificationStatus = ReminderRepository.GetVerificationStatus(model.Email, passwordHash);
            int      mailID = 0;
            DateTime nextReminder;

            switch (verificationStatus)
            {
            case E_VerificationStatus.emailUnknown:
                Guid verificationCode = Guid.NewGuid();
                int  emailID          = ReminderRepository.InsertUnverifiedEmail(model.Email, passwordHash, verificationCode);
                MessageService.SendVerificationEmail(model.Email, verificationCode);
                nextReminder = GetNextRemindingDate(model, DateTime.Now);
                ReminderRepository.AddReminder(model, emailID, nextReminder);

                resultStatus = E_ReminderCreationStatus.successVerifyEmail;

                Logger.LogInfo(
                    string.Format("unkown address remindii for:'{0}', Name: {1}"
                                  , model.Email, model.Name));
                break;

            case E_VerificationStatus.emailNotYetVerified:
                mailID       = ReminderRepository.GetEmailID(model.Email);
                nextReminder = GetNextRemindingDate(model, DateTime.Now);
                ReminderRepository.AddReminder(model, mailID, nextReminder);
                resultStatus = E_ReminderCreationStatus.successVerifyEmail;

                Logger.LogInfo(
                    string.Format("not verified remindii for:'{0}', Name: {1}"
                                  , model.Email, model.Name));
                break;

            case E_VerificationStatus.successfull:
                mailID       = ReminderRepository.GetEmailID(model.Email);
                nextReminder = GetNextRemindingDate(model, DateTime.Now);
                ReminderRepository.AddReminder(model, mailID, nextReminder);
                resultStatus = E_ReminderCreationStatus.successfull;
                Logger.LogInfo(
                    string.Format("verified remindii for:'{0}', Name: {1}"
                                  , model.Email, model.Name));
                break;

            case E_VerificationStatus.wrongPassword:
                resultStatus = E_ReminderCreationStatus.wrongPassword;
                Logger.LogInfo("Wrong password for email: " + model.Email);
                break;
            }

            if (resultStatus == E_ReminderCreationStatus.error)
            {
                throw new ApplicationException("Fehler");
            }
            return(resultStatus);
        }
Esempio n. 2
0
        internal E_VerificationStatus GetVerificationStatus(string email, string passwordHash)
        {
            E_VerificationStatus resultStatus = E_VerificationStatus.emailUnknown;

            var sqlCom = _db.GetReadCommand(@"
                SELECT `EmailID`, `EmailAddress`, `PasswordHash`, EmailVerificationID
                FROM email 
                WHERE `EmailAddress` LIKE ?Address;");

            sqlCom.Parameters.AddWithValue("?Address", email);


            try
            {
                using (var rdr = sqlCom.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        if (rdr.GetString("PasswordHash") == passwordHash)
                        {
                            resultStatus = E_VerificationStatus.successfull;
                            if (rdr["EmailVerificationID"] != DBNull.Value)
                            {
                                resultStatus = E_VerificationStatus.emailNotYetVerified;
                            }
                        }
                        else
                        {
                            resultStatus = E_VerificationStatus.wrongPassword;
                        }
                    }
                }
            }
            finally
            {
                _db.CloseConnections();
            }

            return(resultStatus);
        }