Ejemplo n.º 1
0
 public async Task <IActionResult> SendKey([FromBody] SendKeyModel model)
 {
     return(await MakeActionCallAsync(async() => await _tokenService.SendKeyAsync(model, GetLanguage())));
 }
Ejemplo n.º 2
0
        public async Task <bool> SendKeyAsync(SendKeyModel model, Language language)
        {
            var    key = Utilities.KeyGenerator(4);
            string bodyText;
            string subject;

            if (language == Language.English)
            {
                bodyText = "Your verification key is";
                subject  = "Baitkm Registration code";
            }
            else
            {
                subject  = "رمز تسجيل منزلك";
                bodyText = "مفتاح التحقق الخاص بك هو";
            }
            var user = await _repository.FilterAsNoTracking <User>(u => (u.Email == model.VerificationTerm && u.VerifiedBy == VerifiedBy.Email) ||
                                                                   (u.PhoneCode == model.PhoneCode && u.Phone == model.VerificationTerm && u.VerifiedBy == VerifiedBy.Phone)).FirstOrDefaultAsync();

            if (user != null)
            {
                throw new Exception(_optionsBinder.Error().AccountExist);
            }
            var verified = await _repository.Filter <Verified>(v => v.Email == model.VerificationTerm && v.VerifiedBy == VerifiedBy.Email ||
                                                               (v.PhoneCode == model.PhoneCode && v.Phone == model.VerificationTerm && v.VerifiedBy == VerifiedBy.Phone)).FirstOrDefaultAsync();

            if (verified != null)
            {
                if (verified.IsRegistered)
                {
                    throw new Exception(_optionsBinder.Error().AccountExist);
                }
            }
            if (Regex.Replace(model.VerificationTerm, @"\s+", "").All(c => Char.IsDigit(c)))
            {
                if (verified != null)
                {
                    verified.Code = key;
                    _repository.Update(verified);
                }
                else
                {
                    _repository.Create(new Verified
                    {
                        PhoneCode  = model.PhoneCode,
                        Phone      = model.VerificationTerm,
                        Code       = key,
                        VerifiedBy = VerifiedBy.Phone
                    });
                }
                Utilities.SendKeyByTwilio(model.PhoneCode + model.VerificationTerm, key, bodyText);
            }
            else
            {
                if (verified != null)
                {
                    verified.Code = key;
                    _repository.Update(verified);
                }
                else
                {
                    _repository.Create(new Verified
                    {
                        Email      = model.VerificationTerm,
                        Code       = key,
                        VerifiedBy = VerifiedBy.Email
                    });
                }
                Utilities.SendKeyByEmail(model.VerificationTerm, key, subject, bodyText);
            }
            await _repository.SaveChangesAsync();

            return(true);
        }