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)); }
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")); }
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)); }
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)); }
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)); }
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)); }
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); } }
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)); }
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)); }
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")); }
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)); }
public IActionResult SmsSenderTool() { var entity = new SMSViewModel(); return(View(entity)); }