Exemple #1
0
        /// <summary>
        /// Sends messages to the users who are not blocked.
        /// </summary>
        /// <remarks>It manipulates the user requests whether it is resending activation code request or not, block or unblock the user based on maximum allowed request in 24 hrs and then sends sms to the users who are not blocked.</remarks>
        /// <param name="phoneNumber">A string containing the user's phone number.</param>
        /// <param name="devicePlatform">An enum specifying the device platform.</param>
        /// <param name="activationCode">A string containing activation code to be sent.</param>
        /// <param name="isResend">A bool if true specifying that the request is for resending activation code; otherwise false.</param>
        /// <param name="isRegenerated">A bool if true specifying that the request is for sending regenerated activation code; otherwise false.</param>
        /// <returns>An integer if 0 = sms has not been sent, -1 = sms has been successfully sent or number of remaining minutes to unblock user = user is blocked based on blocking policy. </returns>
        public static int SendActivationCodeToUnBlockedUser(string phoneNumber, DevicePlatform devicePlatform, string activationCode, bool isResend, bool isRegenerated)
        {
            int smsSendingResult = (int)SmsSendingStatus.SendingFailed;

            if (devicePlatform == DevicePlatform.iOS || devicePlatform == DevicePlatform.Android)
            {
                if (isResend)
                {
                    //SmsManager.SendActivationCode(phoneNumber, activationCode, isRegenerated);
                    PowerfulPal.Sms.SmsManager.GetInstance().Twilio.SendSms(new[] { NeeoUtility.FormatAsIntlPhoneNumber(phoneNumber) }, NeeoUtility.GetActivationMessage(activationCode));
                    smsSendingResult = (int)SmsSendingStatus.Sent;
                    return(smsSendingResult);
                }
                else
                {
                    DbManager dbManager = new DbManager();
                    if (dbManager.StartTransaction())
                    {
                        try
                        {
                            int userBlockedState = dbManager.GetUserBlockedState(phoneNumber);
                            switch ((UserState)userBlockedState)
                            {
                            case UserState.NotBlocked:
                                PowerfulPal.Sms.SmsManager.GetInstance().SendSms(new[] { NeeoUtility.FormatAsIntlPhoneNumber(phoneNumber) }, NeeoUtility.GetActivationMessage(activationCode));
                                smsSendingResult = (int)SmsSendingStatus.Sent;
                                break;

                            default:
                                smsSendingResult = userBlockedState;
                                break;
                            }

                            dbManager.CommitTransaction();
                            return(smsSendingResult);
                        }
                        catch (ApplicationException appExp)
                        {
                            dbManager.RollbackTransaction();
                            throw;
                        }
                        catch (Exception exp)
                        {
                            dbManager.RollbackTransaction();
                            LogManager.CurrentInstance.ErrorLogger.LogError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, exp.Message, exp);
                            throw new ApplicationException(CustomHttpStatusCode.UnknownError.ToString("D"));
                        }
                    }
                    else
                    {
                        throw new ApplicationException(CustomHttpStatusCode.TransactionFailure.ToString("D"));
                        return(smsSendingResult);
                    }
                }
            }
            else
            {
                // handling for secondary devices.
                return(smsSendingResult);
            }
        }
Exemple #2
0
        /// <summary>
        /// Sends activation code to phone number
        /// </summary>
        /// <param name="phoneNumber"></param>
        /// <param name="devicePlatform"></param>
        /// <param name="activationCode"></param>
        /// <param name="appKey">A string containing the appKey(For Android).</param>
        /// <returns></returns>
        public static int SendActivationCode(string phoneNumber, DevicePlatform devicePlatform, string activationCode, string appKey)
        {
            int    smsSendingResult = (int)SmsSendingStatus.SendingFailed;
            string smsSendingSource = ConfigurationManager.AppSettings[NeeoConstants.SmsSendingSource] ?? "default";

            if (Enum.IsDefined(typeof(DevicePlatform), devicePlatform))
            {
                var dbManager = new DbManager();
                if (dbManager.StartTransaction())
                {
                    try
                    {
                        var userAttemptsDetails = dbManager.GetUserAttemptsCount(phoneNumber, activationCode);
                        switch ((UserState)userAttemptsDetails["blockedState"])
                        {
                        case UserState.NotBlocked:
                            if (smsSendingSource.Trim() == "primary")
                            {
                                PowerfulPal.Sms.SmsManager.GetInstance().PrimaryApi.SendSms(new[] { NeeoUtility.FormatAsIntlPhoneNumber(phoneNumber) }, NeeoUtility.GetActivationMessage(activationCode, appKey));
                                smsSendingResult = (int)SmsSendingStatus.Sent;
                            }
                            else if (smsSendingSource.Trim() == "secondary")
                            {
                                PowerfulPal.Sms.SmsManager.GetInstance().SecondaryApi.SendSms(new[] { NeeoUtility.FormatAsIntlPhoneNumber(phoneNumber) }, NeeoUtility.GetActivationMessage(activationCode, appKey));
                                smsSendingResult = (int)SmsSendingStatus.Sent;
                            }
                            else if (userAttemptsDetails["attemptsCount"] % 2 == 0)
                            {
                                PowerfulPal.Sms.SmsManager.GetInstance().SecondaryApi.SendSms(new[] { NeeoUtility.FormatAsIntlPhoneNumber(phoneNumber) }, NeeoUtility.GetActivationMessage(activationCode, appKey));
                                smsSendingResult = (int)SmsSendingStatus.Sent;
                            }
                            else
                            {
                                PowerfulPal.Sms.SmsManager.GetInstance().SendSms(new[] { NeeoUtility.FormatAsIntlPhoneNumber(phoneNumber) }, NeeoUtility.GetActivationMessage(activationCode, appKey));
                                smsSendingResult = (int)SmsSendingStatus.Sent;
                            }
                            break;

                        default:
                            smsSendingResult = userAttemptsDetails["blockedState"];
                            break;
                        }

                        dbManager.CommitTransaction();
                        return(smsSendingResult);
                    }
                    catch (ApplicationException appExp)
                    {
                        dbManager.RollbackTransaction();
                        throw;
                    }
                    catch (Exception exp)
                    {
                        dbManager.RollbackTransaction();
                        LogManager.CurrentInstance.ErrorLogger.LogError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, exp.Message, exp);
                        throw new ApplicationException(CustomHttpStatusCode.UnknownError.ToString("D"));
                    }
                }
                else
                {
                    throw new ApplicationException(CustomHttpStatusCode.TransactionFailure.ToString("D"));
                }
            }
            else
            {
                // handling for secondary devices.
                return(smsSendingResult);
            }
        }