Example #1
0
        public async Task <IActionResult> Update([FromBody] SMSViewModel value)
        {
            if (ModelState.IsValid)
            {
                //
                var userId = Utilities.GetUserId(this.User);
                //
                var SMS = new SMS
                {
                    SMSId = Guid.NewGuid(),
                    Body  = value.Body,
                    Phone = value.Phone,

                    CreatedBy   = userId,
                    UpdatedBy   = userId,
                    CreatedDate = DateTime.Now,
                    UpdatedDate = DateTime.Now,
                };

                //commit
                var ret = await this._unitOfWork.SMSs.Save(SMS, value.ID);

                //return client side
                return(Ok(ret));
            }

            return(BadRequest(ModelState));
        }
        public ActionResult SMSVerify(SMSViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            if (!string.IsNullOrEmpty(model.PassCode))
            {
                var result = APIHelper.VerifyUserSMS(model);

                if (result.status == "ACTIVE" || result.factorResult == "SUCCESS")
                {
                    TempData["Message"] = "User Authenticated :)";
                    TempData["IsError"] = false;
                    return(RedirectToAction("Index", "Home"));
                }
                else
                {
                    TempData["Message"] = "Factor code didn't work :(";
                    TempData["IsError"] = true;
                    return(RedirectToAction("Index", "Home"));
                }
            }

            return(View(model));
        }
Example #3
0
        public async Task <ActionResult> Send(SMSViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            String message = HttpUtility.UrlEncode(model.Message);

            using (var wb = new WebClient())
            {
                byte[] response = wb.UploadValues("https://api.textlocal.in/send/", new NameValueCollection()
                {
                    { "apikey", "ANwxGF9BUcY-NsHB120pv3egucdvFlQhGGgTuFHJgL" },
                    { "numbers", model.Number },
                    { "message", message },
                    { "sender", "TXTLCL" }
                });
                string result = System.Text.Encoding.UTF8.GetString(response);
                return(RedirectToAction("SendSms"));
            }
            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "Failed to send message");
            return(View(model));
        }
        public ActionResult SMSEnroll(SMSViewModel model)
        {
            if (Request.RequestType == "GET")//initial get just displays the view
            {
                ModelState.Clear();
                return(View(model));
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var result = APIHelper.EnrollUserSMS(model);

            if (result.errorSummary == null)
            {
                model.ApiUrl = result._links.activate.href;
                model.UserId = result.id;

                return(RedirectToAction("SMSVerify", "Account", model));
            }

            TempData["Message"] = result.errorSummary.ToString() + " :(";
            TempData["IsError"] = true;
            return(RedirectToAction("Index", "Home"));
        }
Example #5
0
        public async Task <IActionResult> ReceiveSMSList([FromBody] SMSViewModel model)
        {
            Request.Body.Seek(0, SeekOrigin.Begin);
            StreamReader sr   = new StreamReader(Request.Body);
            string       body = await sr.ReadToEndAsync();

            bool   isSent = false;
            Result result = null;

            if (model.sms.Count == 1)
            {
                string phone = "";
                if (model.sms[0].Type == "1")
                {
                    isSent = true;
                }
                else
                {
                    isSent = false;
                }
                result = await _smsGateway.AddSMS(0, model.sms[0].Address, DateTimeOffset.FromUnixTimeMilliseconds(long.Parse(model.sms[0].Date)).DateTime, model.sms[0].Body, isSent);

                string pattern     = "^\\+\\d{2}";
                string replacement = "0";
                Regex  rgx         = new Regex(pattern);
                if (model.sms[0].Address != null)
                {
                    phone = rgx.Replace(model.sms[0].Address, replacement);
                    phone = Regex.Replace(phone, @"\s+", "");
                }
                Result <ContactData> contact = await _contactGateway.FindByNumber(phone);

                if (contact != null)
                {
                    await _hubContext.Clients.All.SendAsync("Test", contact.Content.FirstName + " " + contact.Content.LastName, model.sms[0].Body);
                }
                else
                {
                    await _hubContext.Clients.All.SendAsync("Test", model.sms[0].Address, contact.Content.LastName, model.sms[0].Body);
                }
            }
            else
            {
                for (int i = 0; i < model.sms.Count; i++)
                {
                    if (model.sms[i].Type == "1")
                    {
                        isSent = true;
                    }
                    else
                    {
                        isSent = false;
                    }
                    result = await _smsGateway.AddSMS(0, model.sms[i].Address, DateTimeOffset.FromUnixTimeMilliseconds(long.Parse(model.sms[i].Date)).DateTime, model.sms[i].Body, isSent);
                }
            }

            return(Ok(result));
        }
Example #6
0
        public static dynamic VerifyUserSMS(SMSViewModel model)
        {
            var oCode = new SendSMSPassCode();

            oCode.PassCode = model.PassCode;

            var sJsonResponse = JsonHelper.Post(model.ApiUrl, JsonHelper.JsonContent(oCode), _oktaToken);

            return(JsonConvert.DeserializeObject(sJsonResponse));
        }
Example #7
0
        public static dynamic EnrollUserSMS(SMSViewModel model)
        {
            var oEnrollSMS = new EnrollSMS();

            oEnrollSMS.Profile.PhoneNumber = String.Format("+{0}-{1}", model.CountryCode, model.PhoneNumber);//Format - "+1-2223334444"

            var sJsonResponse = JsonHelper.Post($"https://{_apiUrlBase}/api/v1/users/{model.UserId}/factors", JsonHelper.JsonContent(oEnrollSMS), _oktaToken);

            return(JsonConvert.DeserializeObject(sJsonResponse));
        }
Example #8
0
        public static dynamic ActivateUserSMS(SMSViewModel model)
        {
            var oActivateVerifySMS = new ActivateVerifySMS();


            //   api/v1/users/${userId}/factors/${factorId}/lifecycle/activate
            //   api/v1/users/${userId}/factors/${factorId}/verify

            var sJsonResponse = JsonHelper.Post($"https://{_apiUrlBase}/api/v1/users/{model.UserId}/factors", JsonHelper.JsonContent(oActivateVerifySMS), _oktaToken);

            return(JsonConvert.DeserializeObject(sJsonResponse));
        }
 public IActionResult SmsSenderTool(SMSViewModel sMSViewModel)
 {
     if (!ModelState.IsValid)
     {
         string message = "Please enter required data.";
         ModelState.AddModelError("", message);
         return(View(sMSViewModel));
     }
     else
     {
         _smsSenderService.SendSMSNotification(sMSViewModel.CommaSepToNum, sMSViewModel.Message);
     }
     return(View(sMSViewModel));
 }
Example #10
0
        public bool bSendOTPSMS(SMSViewModel oSMSViewModel)
        {
            try
            {
                ArrayOfString arrPhoneNos = new ArrayOfString();
                arrPhoneNos.Add("968" + oSMSViewModel.Recipient.ToString());
                SMSService.BulkSMSSoapClient client = new BulkSMSSoapClient();
                int nResult = client.PushMessage(CommonHelper.sGetConfigKeyValue(ConstantNames.SMSServiceUserName), CommonHelper.sGetConfigKeyValue(ConstantNames.SMSServicPassword),
                                                 oSMSViewModel.Message, oSMSViewModel.Language, DateTime.Now, arrPhoneNos, 1);

                return(nResult == 1);
            }
            catch (Exception ex)
            {
                Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(ex));
                return(false);
            }
        }
Example #11
0
        public async Task <IActionResult> GeneratePhoneOneTimePassword([FromBody] SMSViewModel model)
        {
            string id   = User.FindFirst("id").Value;
            User   user = await UserManager.FindByIdAsync(id);

            if (user == null)
            {
                return(Unauthorized());
            }

            OneTimePassword password = await Auth.GenerateOneTimePassword(user, OnePasswordType.Phone);

            var pvm = Mapper.Map <OneTimePasswordViewModel>(password);

            string body = model.Message;

            try
            {
                body = string.Format(body, password.Code);
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "An error occured while formatting input body.\n{0}", body);
                return(BadRequest("The format of the text message is invalid."));
            }

            string phone = user.PhoneNumber;

            if (!Phone.TryParse(phone, "NG", out PhoneNumber number))
            {
                return(BadRequest($"User Phone Number ({user.PhoneNumber}) was not in a valid format"));
            }

            phone = Phone.Format(number, PhoneNumberFormat.E164);


            await SmsService.SendMessage(phone, body);

            return(Ok(pvm));
        }
Example #12
0
        public HttpResponseMessage RegisterUser(TakamulUser oTakamulUser, int nLanguageID)
        {
            ApiResponse oApiResponse   = new ApiResponse();
            string      sResultMessage = string.Empty;

            if (ModelState.IsValid)
            {
                try
                {
                    int nOTPNumber = CommonHelper.nGenerateRandomInteger(1000, 9999);

                    UserInfoViewModel oUserInfoViewModel = new UserInfoViewModel()
                    {
                        APPLICATION_ID       = oTakamulUser.ApplicationID,
                        USER_TYPE_ID         = 4, //Mobile user type
                        FULL_NAME            = oTakamulUser.FullName,
                        PHONE_NUMBER         = oTakamulUser.PhoneNumber,
                        EMAIL                = oTakamulUser.Email,
                        ADDRESS              = oTakamulUser.Addresss,
                        AREA_ID              = oTakamulUser.AreaID,
                        WILAYAT_ID           = oTakamulUser.WilayatID,
                        VILLAGE_ID           = oTakamulUser.VillageID,
                        OTP_NUMBER           = nOTPNumber,
                        DEVICE_ID            = oTakamulUser.DeviceID,
                        PREFERED_LANGUAGE_ID = nLanguageID
                    };

                    Response oResponse = this.oIAuthenticationService.oInsertMobileUser(oUserInfoViewModel);
                    if (oResponse.OperationResult == enumOperationResult.Success)
                    {
                        oApiResponse.OperationResult = 1;
                        sResultMessage = nLanguageID == 2 ? "User registered successfully." : "تم تسجيل المستخدم بنجاح.";
                        oApiResponse.OperationResultMessage = sResultMessage;

                        oApiResponse.ResponseID   = Convert.ToInt32(oResponse.ResponseID);
                        oApiResponse.ResponseCode = nOTPNumber.ToString();

                        Languages enmUserLanuage = (Languages)Enum.Parse(typeof(Languages), nLanguageID.ToString());

                        //Send OTP via SMS and update in DB
                        SMSNotification oSMSNotification = new SMSNotification();
                        SMSViewModel    oSMSViewModel    = new SMSViewModel();
                        //oSMSViewModel.Language = enmUserLanuage == Languages.English ? 0 : 64;
                        oSMSViewModel.Language = 64;
                        string sMessage = string.Empty;
                        if (enmUserLanuage == Languages.English)
                        {
                            sMessage = string.Format("Thank you for registering with {0}, Your activation code is : {1}.", oResponse.ResponseCode, oUserInfoViewModel.OTP_NUMBER);
                        }
                        else
                        {
                            string sMessagePart1 = "نشكرك على تسجيلك في تطبيق ";
                            sMessagePart1 = sMessagePart1 + oResponse.ResponseCode + ", ";

                            string sMessagePart2 = "رمز التفعيل الخاص بك هو : ";
                            sMessagePart2 = sMessagePart2 + oUserInfoViewModel.OTP_NUMBER;

                            sMessage = sMessagePart1 + sMessagePart2;
                        }
                        oSMSViewModel.Message       = sMessage;
                        oSMSViewModel.Recipient     = oUserInfoViewModel.PHONE_NUMBER;
                        oSMSViewModel.RecipientType = 1;

                        bool     bSentSMS           = oSMSNotification.bSendOTPSMS(oSMSViewModel);
                        Response oResponseOTPStatus = this.oIAuthenticationService.oUpdateOTPStatus(oApiResponse.ResponseID, bSentSMS);
                    }
                    else if (oResponse.OperationResult == enumOperationResult.AlreadyExistRecordFaild)
                    {
                        oApiResponse.OperationResult = -3;
                        sResultMessage = nLanguageID == 2 ? "The user already exists.Please contact app administrator." : "المستخدم مسجل من قبل. الرجاء الاتصال بمشرف التطبيق.";
                        oApiResponse.OperationResultMessage = sResultMessage;
                    }
                    else
                    {
                        oApiResponse.OperationResult = 0;
                        sResultMessage = nLanguageID == 2 ? "Error Occured.Please contact app administrator." : "حدث خطأ الرجاء الاتصال بمشرف التطبيق.";
                        oApiResponse.OperationResultMessage = sResultMessage;
                    }
                    return(Request.CreateResponse(HttpStatusCode.OK, oApiResponse));
                }
                catch (Exception ex)
                {
                    oApiResponse.OperationResult = 0;
                    sResultMessage = nLanguageID == 2 ? "An error occurred during the operation. Please try again later." : "حدث خطأ  يرجى المحاولة لاحقا مرة أخرى";
                    oApiResponse.OperationResultMessage = sResultMessage;
                    return(Request.CreateResponse(HttpStatusCode.InternalServerError, oApiResponse));

                    Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(ex));
                }
            }
            oApiResponse.OperationResult = 0;
            sResultMessage = nLanguageID == 2 ? "Validation failed." : "خطاء في التحقق.";
            oApiResponse.OperationResultMessage = sResultMessage;
            return(Request.CreateResponse(HttpStatusCode.BadRequest, oApiResponse));
        }
Example #13
0
        public HttpResponseMessage ResendOTPNumber(int nApplicationID, string sPhoneNumber, int nLanguageID)
        {
            ApiResponse oApiResponse   = new ApiResponse();
            string      sResultMessage = string.Empty;

            try
            {
                int nOTPNumber = CommonHelper.nGenerateRandomInteger(1000, 9999);

                Response oResponse = this.oIAuthenticationService.oResendOTPNumber(nApplicationID, sPhoneNumber, nOTPNumber);

                if (oResponse.OperationResult == enumOperationResult.Success)
                {
                    oApiResponse.OperationResult = 1;
                    sResultMessage = nLanguageID == 2 ? "OTP has been successfully sent." : "تم إرسال رمز التفعيل بنجاح .";
                    oApiResponse.OperationResultMessage = sResultMessage;

                    //TODO::integrate with sms service and update status to database
                    oApiResponse.ResponseCode = nOTPNumber.ToString();

                    Languages enmUserLanuage = (Languages)Enum.Parse(typeof(Languages), nLanguageID.ToString());

                    //Send OTP via SMS and update in DB
                    SMSNotification oSMSNotification = new SMSNotification();
                    SMSViewModel    oSMSViewModel    = new SMSViewModel();
                    //oSMSViewModel.Language = enmUserLanuage == Languages.English ? 0 : 64;
                    oSMSViewModel.Language = 64;
                    string sMessage = string.Empty;
                    if (enmUserLanuage == Languages.English)
                    {
                        sMessage = string.Format("Thank you for registering with {0}, Your activation code is : {1}.", oResponse.ResponseCode, nOTPNumber);
                    }
                    else
                    {
                        string sMessagePart1 = "نشكرك على تسجيلك في تطبيق ";
                        sMessagePart1 = sMessagePart1 + oResponse.ResponseCode + ", ";

                        string sMessagePart2 = "رمز التفعيل الخاص بك هو : ";
                        sMessagePart2 = sMessagePart2 + nOTPNumber;

                        sMessage = sMessagePart1 + sMessagePart2;
                    }
                    oSMSViewModel.Message       = sMessage;
                    oSMSViewModel.Recipient     = sPhoneNumber;
                    oSMSViewModel.RecipientType = 1;

                    bool     bSentSMS           = oSMSNotification.bSendOTPSMS(oSMSViewModel);
                    Response oResponseOTPStatus = this.oIAuthenticationService.oUpdateOTPStatus(oApiResponse.ResponseID, bSentSMS);
                }
                else if (oResponse.OperationResult == enumOperationResult.RelatedRecordFaild)
                {
                    oApiResponse.OperationResult = -2;
                    sResultMessage = nLanguageID == 2 ? "You have exceeded the maximum number of attempt.Please contact app administrator." : "لقد تجاوزت الحد الأقصى لعدد المحاولات. يرجى الاتصال بمشرف التطبيق .";
                    oApiResponse.OperationResultMessage = sResultMessage;
                }
                else if (oResponse.OperationResult == enumOperationResult.AlreadyExistRecordFaild)
                {
                    oApiResponse.OperationResult = -3;
                    sResultMessage = nLanguageID == 2 ? "The user does not exist.Please contact app administrator" : "المستخدم غير مسجل . يرجى الاتصال بمشرف التطبيق";
                    oApiResponse.OperationResultMessage = sResultMessage;
                }
                else
                {
                    oApiResponse.OperationResult = 0;
                    sResultMessage = nLanguageID == 2 ? "An error Occured.Please contact app administrator." : "حدث خطأ الرجاء الاتصال بمشرف التطبيق.";
                    oApiResponse.OperationResultMessage = sResultMessage;
                }
                return(Request.CreateResponse(HttpStatusCode.OK, oApiResponse));
            }
            catch (Exception ex)
            {
                oApiResponse.OperationResult = 0;
                sResultMessage = nLanguageID == 2 ? "An error occurred during the operation. Please try again later." : "حدث خطأ  يرجى المحاولة لاحقا مرة أخرى";
                oApiResponse.OperationResultMessage = sResultMessage;
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, oApiResponse));

                Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(ex));
            }
        }
        public ActionResult CustomLogin(LoginViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            if (LoginHelper.IsValidLogin(model))
            {
                var bRequireMFA = true;//add logic to determine if the user should MFA if not all users are required

                if (bRequireMFA)
                {
                    // If MFA is required - Check to see if user has profile in Okta's Universal Directory (UD)
                    //     1) If user doesn't exist add profile and enroll them for MFA factor
                    //     2) if user exists check for Factor enrollment
                    //           a) if enrolled get factor and authenticate second factor
                    //           b) if not enrolled, enroll them for MFA factor

                    //shortcut - below is for supporting SMS only, not much more work involved in adding other factors

                    //https://developer.okta.com/docs/api/resources/factors#factors-api

                    var sUserId = APIHelper.GetUserIdByName(model);//Get or Add, return User

                    if (!string.IsNullOrEmpty(sUserId))
                    {
                        //check for MFA factors
                        var oFactors = APIHelper.ListUserFactors(sUserId);

                        //specifically look for SMS - if more than one MFA used, get info from messafge to show dropdown and let user choose
                        var oSMSViewModel = new SMSViewModel();
                        oSMSViewModel.UserId = sUserId;

                        var sSMSFactorId = "";
                        foreach (var factor in oFactors)
                        {
                            if (factor.factorType == "sms")
                            {
                                sSMSFactorId = factor.id;
                            }
                        }

                        if (!string.IsNullOrEmpty(sSMSFactorId))//only setting up SMS for new users, so assume if there is one its SMS
                        {
                            //shortcut - should check if there is more than 1 and if so then prompt user to choose

                            //send sms verification automatically
                            var result = APIHelper.SendUserSMS(oSMSViewModel, sSMSFactorId);

                            if (result.errorSummary == null)
                            {
                                oSMSViewModel.ApiUrl = result._links.verify.href;

                                //put number in model because its required (not used for this flow), could clean up model to not require it as well
                                oSMSViewModel.CountryCode = "1";          //not used
                                oSMSViewModel.PhoneNumber = "6302223333"; //not used

                                return(RedirectToAction("SMSVerify", "Account", oSMSViewModel));
                            }
                            else
                            {
                                TempData["Message"] = result.errorSummary.ToString() + " :("; //if you get a rate limit error, enhance to send 'resend'
                                TempData["IsError"] = true;
                                return(RedirectToAction("Index", "Home"));
                            }
                        }
                        else
                        {
                            //no factors then just prompt to enroll for SMS
                            //shortcut - should check for which factors are available fpr the user to choose

                            return(RedirectToAction("SMSEnroll", "Account", oSMSViewModel));
                        }
                    }
                    else
                    {
                        //more than 1
                        TempData["Message"] = "No exact user match :(";
                        TempData["IsError"] = true;
                    }
                }
                TempData["Message"] = "Authenticated :)";
                TempData["IsError"] = false;
            }
            else
            {
                TempData["Message"] = "Invalid Login :(";
                TempData["IsError"] = true;
            }

            return(RedirectToAction("Index", "Home"));
        }
Example #15
0
        public static dynamic SendUserSMS(SMSViewModel model, string factorId)
        {
            var sJsonResponse = JsonHelper.Post($"https://{_apiUrlBase}/api/v1/users/{model.UserId}/factors/{factorId}/verify", "{}", _oktaToken);

            return(JsonConvert.DeserializeObject(sJsonResponse));
        }
Example #16
0
        public IActionResult SmsSenderTool()
        {
            var entity = new SMSViewModel();

            return(View(entity));
        }