public ResponseAccount GetAccountByPhoneNumber(PhoneNumberRequest req)
        {
            ResponseAccount retVal = new ResponseAccount();

            retVal.Account = SQLGetAccount(config.getAccountByPhoneNumber.Replace("%1", req.PhoneNumber));
            return(retVal);
        }
Beispiel #2
0
        public async Task <PhoneNumberRequest> GetPhoneNumber(CountryCode countryCode = CountryCode.RU, ServiceCode serviceCode = ServiceCode.MailRu)
        {
            Log.Debug($"Call {nameof(GetPhoneNumber)}");
            //if (!_countries.ContainsKey(countryCode))
            //{
            //    Log.Error($"{nameof(GetSmsOnlineApi)} not available for country {Enum.GetName(typeof(CountryCode), countryCode)}");
            //    return null;
            //}
            if (!_services.ContainsKey(serviceCode))
            {
                Log.Error($"{nameof(GetSmsOnlineApi)} not available for service {Enum.GetName(typeof(ServiceCode), serviceCode)}");
                return(null);
            }

            var service         = _services[serviceCode];
            var getNumberResult = await GetNumber(service, Enum.GetName(typeof(CountryCode), countryCode)?.ToLower());

            var getNumberResponse = getNumberResult.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries);

            if (getNumberResponse.Length < 3)
            {
                return(null);
            }
            //"ACCESS_NUMBER:58668155:79771317953"
            var activeSeconds      = 900;
            var phoneNumberRequest = new PhoneNumberRequest {
                Id = getNumberResponse[1], Phone = getNumberResponse[2], Created = DateTime.UtcNow, ActiveSeconds = activeSeconds, RemainSeconds = activeSeconds
            };

            await SetStatus(phoneNumberRequest.Id, "1");

            return(phoneNumberRequest);
        }
Beispiel #3
0
        public ResponseAccount GetAccountByPhoneNumber(PhoneNumberRequest req)
        {
            ResponseAccount retVal      = new ResponseAccount();
            String          phoneNumber = req.PhoneNumber;

            var acc = from account in accounts where HasPhoneNumber(account.PhoneNumbers.PhoneNumber, phoneNumber) select account;

            if (acc.Count() < 1)
            {
                throw new WebFaultException(HttpStatusCode.NoContent);
            }
            else if (acc.Count() > 1)
            {
                throw new WebFaultException(HttpStatusCode.Conflict);
            }
            Account retAccount = new Account(acc.FirstOrDefault());

            if (retAccount != null && req.CustomAttribute != null && req.CustomAttribute.Equals("overwrite"))
            {
                retAccount.CustomAttribute = "overwritten custom attribute";
            }

            retVal.Account = retAccount;
            return(retVal);
        }
        public ResponseContact GetContactByPhoneNumber(PhoneNumberRequest req)
        {
            ResponseContact rc = new ResponseContact();

            rc.Contact = SQLGetContact(config.getContactByPhoneNumber.Replace("%1", req.PhoneNumber));
            return(rc);
        }
Beispiel #5
0
        public string AddPhoneNumber(PhoneNumberRequest request)
        {
            try
            {
                //map
                var dbPhone = new PhoneNumber();
                if (request != null)
                {
                    dbPhone.customerId          = request.customerId;
                    dbPhone.customerName        = request.customerName;
                    dbPhone.customerPhoneNumber = request.customerPhoneNumber;
                    dbPhone.active = request.active;
                }

                var phoneid = db.phoneNumbers.Max(d => d.ID);
                dbPhone.ID = phoneid + 1;
                var allPhoneNumbers = db.phoneNumbers.Add(dbPhone);
                db.SaveChanges();

                return("success");
            }
            catch (Exception)
            {
                //If any exception occurs Internal Server Error i.e. Status Code 500 will be returned
                return("failed");
            }
        }
        public async Task <ActionResult> GetCode([FromBody] PhoneNumberRequest request,
                                                 [FromServices] IPhoneConfirmationService phoneConfirmation)
        {
            var canSendCode = await phoneConfirmation.SendConfirmationCodeAsync(request.PhoneNumber);

            return(Json(ApiResponse.Success(canSendCode)));
        }
Beispiel #7
0
        protected async Task <string> SmsServiceInit(CountryCode countryCode)
        {
            _data.PhoneCountryCode = Enum.GetName(typeof(CountryCode), countryCode)?.ToUpper();
            Log.Debug($"Registration data: {JsonConvert.SerializeObject(_data)}");
            if (_smsService == null)
            {
                _data.Phone = PhoneServiceStore.GetRandomPhoneNumber(countryCode);
                return(_data.ErrMsg);;
            }
            PhoneNumberRequest phoneNumberRequest = null;

            phoneNumberRequest = await _smsService.GetPhoneNumber(countryCode, GetServiceCode());

            //phoneNumberRequest = new PhoneNumberRequest { Id = "444", Phone = "79163848169" };
            if (phoneNumberRequest == null)
            {
                _data.ErrMsg = BotMessages.NoPhoneNumberMessage;
                return(_data.ErrMsg);
            }
            Log.Debug($"phoneNumberRequest: {JsonConvert.SerializeObject(phoneNumberRequest)}");
            _requestId  = phoneNumberRequest.Id;
            _data.Phone = phoneNumberRequest.Phone.Trim();
            if (!_data.Phone.StartsWith("+"))
            {
                _data.Phone = $"+{_data.Phone}";
            }
            //_data.Phone = _data.Phone.Substring(PhoneServiceStore.CountryPrefixes[countryCode].Length + 1);
            return(_data.ErrMsg);
        }
        public ResponseContact GetContactByPhoneNumber(PhoneNumberRequest req)
        {
            string          phoneNumber = req.PhoneNumber;
            ResponseContact rc          = new ResponseContact();


            var ct = from contact in contacts where HasPhoneNumber(contact.PhoneNumbers.PhoneNumber, phoneNumber) select contact;

            if (ct.Count() < 1)
            {
                throw new WebFaultException(HttpStatusCode.NoContent);
            }
            else if (ct.Count() > 1)
            {
                throw new WebFaultException(HttpStatusCode.Conflict);
            }
            Contact retContact = new Contact(ct.FirstOrDefault());

            if ((retContact != null) && (req.CustomAttribute != null))
            {
                if (req.CustomAttribute.Equals("overwrite"))
                {
                    retContact.CustomAttribute = "overwritten custom attribute";
                }
                else if (req.CustomAttribute.Equals("error_never_return"))
                {
                    Thread.Sleep(System.Threading.Timeout.Infinite);
                }
                else if (req.CustomAttribute.Equals("error_internal_server"))
                {
                    throw new WebFaultException <string>("Thrown because error_internal_server was the custom attribute", HttpStatusCode.InternalServerError);
                }
                else if (req.CustomAttribute.Equals("sleep10"))
                {
                    Thread.Sleep(10000); //sleep 10 seconds
                }
            }

            rc.Contact = retContact;

            return(rc);
        }
Beispiel #9
0
        public IActionResult SendSMSVerificationCodeByRegistrationToken([FromBody] PhoneNumberRequest request, [FromHeader(Name = "RegistrationToken")] string registrationToken)
        {
            if (ModelState.IsValid)
            {
                var response = new Response();
                var data     = new RegistrationCustomerData()
                {
                    RegistrationToken = registrationToken, PhoneNumber = request.PhoneNumber
                };

                var result = _registrationManager.ContinueRegistrationProcess(data, RegistrationProcessSteps.SendSMSVerificationCodeByRegistrationToken);
                response.ResultCode  = ResultCodeFormatter.FromCustomerRegistrationProcess(result.ResultCode);
                response.Description = result.Description;

                return(ResponseExtensions.ToHttpResponse(response));
            }
            else
            {
                return(ValidationError.GetValidationErrorResponse(ModelState));
            }
        }
Beispiel #10
0
        public async Task <PhoneNumberRequest> GetPhoneNumber(CountryCode countryCode, ServiceCode serviceCode)
        {
            Log.Debug($"Call {nameof(GetPhoneNumber)}");
            //if (!_countries.ContainsKey(countryCode))
            //{
            //    Log.Error($"{nameof(SimSmsOrgApi)} not available for country {Enum.GetName(typeof(CountryCode), countryCode)}");
            //    return null;
            //}
            if (!_services.ContainsKey(serviceCode))
            {
                Log.Error($"{nameof(SimSmsOrgApi)} not available for service {Enum.GetName(typeof(ServiceCode), serviceCode)}");
                return(null);
            }
            if (!CountryParams.ContainsKey(countryCode))
            {
                Log.Error($"{nameof(SimSmsOrgApi)} not available for country {Enum.GetName(typeof(CountryCode), countryCode)}");
                return(null);
                //var random = new Random();
                //var values = CountryParams.Keys.ToList();
                //var size = CountryParams.Count;
                //countryCode = values[random.Next(size)];
            }
            var getNumberResult = await GetNumber(_services[serviceCode], CountryParams[countryCode]);

            var getNumberResponse = getNumberResult.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries);

            if (getNumberResponse.Length < 3)
            {
                return(null);
            }
            //"ACCESS_NUMBER:58668155:79771317953"
            var activeSeconds      = 900;
            var phoneNumberRequest = new PhoneNumberRequest {
                Id = getNumberResponse[1], Phone = getNumberResponse[2], Created = DateTime.UtcNow, ActiveSeconds = activeSeconds, RemainSeconds = activeSeconds
            };

            await SetStatus(phoneNumberRequest.Id, "1");

            return(phoneNumberRequest);
        }
Beispiel #11
0
        public async Task <IActionResult> SetUserPhoneNumberAsync(
            [FromBody] PhoneNumberRequest model,
            CancellationToken token)
        {
            if (User.Identity.IsAuthenticated)
            {
                _logger.Error("Set User Phone number User is already sign in");
                return(Unauthorized());
            }
            var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();

            if (user == null)
            {
                _logger.Error("Set User Phone number We can't identify the user");
                return(Unauthorized());
            }
            if (!user.EmailConfirmed || user.PhoneNumberConfirmed)
            {
                return(Unauthorized());
            }

            var retVal = await _userManager.SetPhoneNumberAndCountryAsync(user, model.PhoneNumber, model.CountryCode.ToString(), token);

            //Ram: I disable this - we have an issue that sometime we get the wrong ip look at id
            //3DCDBF98-6545-473A-8EAA-A9DF00787C70 of UserLocation table in dev sql
            //if (country != null)
            //{
            //    if (!string.Equals(user.Country, country, StringComparison.OrdinalIgnoreCase))
            //    {
            //        var command2 = new AddUserLocationCommand(user, country, HttpContext.Connection.GetIpAddress());
            //        var t1 = _commandBus.DispatchAsync(command2, token);
            //        await _userManager.SetLockoutEndDateAsync(user, DateTimeOffset.MaxValue);
            //        ModelState.AddModelError(nameof(model.PhoneNumber), _smsLocalizer["PhoneNumberNotSameCountry"]);
            //        var t2 = _signInManager.SignOutAsync();
            //        await Task.WhenAll(t1, t2);
            //        return BadRequest(ModelState);

            //    }
            //}

            if (retVal.Succeeded)
            {
                TempData[SmsTime]       = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture);
                TempData[PhoneCallTime] = DateTime.UtcNow.AddMinutes(-2).ToString(CultureInfo.InvariantCulture);
                await _client.SendSmsAsync(user, token);

                return(Ok());
            }
            if (retVal.Errors.Any(a => a.Code == "InvalidPhoneNumber"))
            {
                ModelState.AddModelError(nameof(model.PhoneNumber), _localizer["InvalidPhoneNumber"]);
            }
            if (retVal.Errors.Any(a => a.Code == "Duplicate"))
            {
                _logger.Warning("phone number is duplicate");
                ModelState.AddModelError(nameof(model.PhoneNumber), _smsLocalizer["DuplicatePhoneNumber"]);
            }
            else
            {
                _logger.Warning("Some other error" + retVal.Errors.FirstOrDefault()?.Description);
                ModelState.AddIdentityModelError(retVal);
            }

            return(BadRequest(ModelState));
        }