public async Task <IActionResult> SendKey([FromBody] SendKeyModel model) { return(await MakeActionCallAsync(async() => await _tokenService.SendKeyAsync(model, GetLanguage()))); }
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); }