예제 #1
0
        public IHttpActionResult Sendotp(string id)
        {
            Otp model = new Otp();

            try
            {
                model.MobileOtp = sendOtp.GenerateOtp();
                var userDocument = _bucket.Query <object>(@"SELECT mobileNo,emailId From ICADB where id= '" + id + "'").ToList();
                if (userDocument.Count == 0)
                {
                    return(Content(HttpStatusCode.BadRequest, MessageResponse.Message(HttpStatusCode.BadRequest.ToString(), "175-please enter valid emiratid"), new JsonMediaTypeFormatter()));
                }
                else
                {
                    JObject jsonObj = JObject.Parse(userDocument[0].ToString());
                    //string mobileNo = (string)jsonObj["mobileNo"];
                    model.Email     = (string)jsonObj["emailId"];;
                    model.MobileNo  = (string)jsonObj["mobileNo"];
                    model.MobileOtp = model.MobileOtp;
                    mobileSMS.SendOtpViaMobile(model.MobileNo, model.MobileOtp, model.Email);
                    return(Content(HttpStatusCode.OK, MessageResponse.Message(HttpStatusCode.OK.ToString(), MessageDescriptions.Add, model.Email), new JsonMediaTypeFormatter()));
                }
            }
            catch (Exception ex)
            {
                return(Content(HttpStatusCode.Forbidden, MessageResponse.Message(HttpStatusCode.Forbidden.ToString(), ex.Message), new JsonMediaTypeFormatter()));
            }
        }
예제 #2
0
        public ActionResult Verify(Otp otp)
        {
            if (ModelState.IsValid != true)
            {
                return(View());
            }
            var stateToken = (string)Session[stateTokenKey];
            var response   = okta.authn.GetStatus(stateToken);
            var factor     = response.Embedded.Factors.First();

            ViewBag.FactorType = factor.FactorType;
            var answer = new MfaAnswer();

            answer.Passcode = otp.passCode;
            // TODO: Modify "response" to get the _links for the .factors attribute, then pass the factor from factors to Verify()
            try
            {
                var rv = okta.authn.Verify(stateToken, factor, answer);
                return(CreateSessionFor(rv));
            }
            catch (OktaException e)
            {
                ModelState.AddModelError("*", e.ErrorSummary);
            }
            return(View());
        }
예제 #3
0
        public void Test_add_single_user_and_otp()
        {
            // Arrange
            CleanTables();
            User     user      = repo.Create();
            DateTime test_date = new DateTime(2016, 6, 7, 12, 13, 54);
            string   test_pass = "******";
            Otp      otp       = new Otp()
            {
                Password = test_pass, StartDate = test_date
            };
            string test_user = "******";

            user.UserId = test_user;
            user.Otp    = otp;

            // Act
            repo.Add(user);
            repo.SaveChanges();
            DataTable userTable = QueryTable("SELECT * FROM [User]");
            DataTable otpTable  = QueryTable("SELECT * FROM [Otp]");

            // Assert
            Assert.IsTrue(userTable.Rows.Count == 1);
            Assert.IsTrue(userTable.Rows[0]["UserId"].ToString() == test_user);
            Assert.IsTrue(otpTable.Rows[0]["Password"].ToString() == test_pass);
            Assert.AreEqual(Convert.ToDateTime(otpTable.Rows[0]["StartDate"]), test_date);
        }
예제 #4
0
        public ActionResult <GenericResponseModel> ForgottenPassword([FromBody] User pUser)
        {
            OtpController pOtp              = new OtpController();
            var           loUserId          = HelperMethods.GetApiUserIdFromToken(HttpContext.User.Identity);
            var           loGenericResponse = new GenericResponseModel
            {
                Code   = -1,
                Status = "Fail"
            };

            pUser.phone = HelperMethods.SerializePhone(pUser.phone);
            var loLogin = GetData.CheckUser(pUser.phone);

            if (loLogin == null)
            {
                return(loGenericResponse);
            }

            var loOtp = new Otp();

            var loUser = new UserDto();

            loUser.row_guid  = loLogin.row_guid;
            loUser.user_type = loLogin.user_type;

            if (loLogin.user_type == 1 || loLogin.user_type == 2) //1 Winvestate admin 2 Winvestate user
            {
                loOtp.phone  = loLogin.phone;
                loUser.phone = loLogin.phone;
            }
            else if (loLogin.user_type == 3) //Müşteri
            {
                var loCustomer = GetData.GetCustomerById(loLogin.row_guid.ToString());
                loOtp.phone  = loCustomer.phone;
                loUser.phone = loCustomer.phone;
            }
            else // 4 Kurum
            {
                var loCompany = GetData.GetBankById(loLogin.row_guid.ToString());
                loOtp.phone  = loCompany.authorized_phone;
                loUser.phone = loCompany.authorized_phone;
            }

            loOtp.message_type_system_type_id = 2;
            var loResult = pOtp.SendOtp(loOtp);

            if (loResult.Value.Code != 200)
            {
                return(loResult.Value);
            }

            loGenericResponse.Code    = 200;
            loGenericResponse.Data    = loUser;
            loGenericResponse.Message = "";
            loGenericResponse.Status  = "ok";

            return(loGenericResponse);
        }
예제 #5
0
        public async Task UpdateAsync(Otp entity)
        {
            Random rnd          = new Random();
            string randomNumber = (rnd.Next(100000, 999999)).ToString();

            entity.OtpCode = Int32.Parse(randomNumber);
            await Uow.RegisterDirtyAsync(entity);

            await Uow.CommitAsync();
        }
예제 #6
0
        public Authenticator()
        {
            TimeRenew = DateTime.MinValue;
            _code     = null;
            _otp      = null;

            Algorithm = DefaultAlgorithm;
            Digits    = DefaultDigits;
            Period    = DefaultPeriod;
        }
예제 #7
0
        public static OtpHashMode GetHashMode(this Otp otp)
        {
            var field = typeof(Otp).GetField("hashMode", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.IsNotNull(field, "the hashMode field must have been renamed, please update this test accordingly");

            object value = field.GetValue(otp);

            Assert.IsTrue(value is OtpHashMode, "the hashMode field must have changed types from an OtpHashMode, please update this test accordingly");
            return((OtpHashMode)value);
        }
예제 #8
0
        public ActionResult <GenericResponseModel> ValidateOtp([FromBody] Otp pOtpService)
        {
            var loGenericResponse = new GenericResponseModel();

            pOtpService.phone = HelperMethods.SerializePhone(pOtpService.phone);
            var loValidate = GetData.ValidateOtp(pOtpService);


            if (loValidate?.id > 0)
            {
                //var loApiUserId = Helper.GetApiUserIdFromToken(HttpContext.User.Identity);
                pOtpService.row_update_date = DateTime.Now;
                pOtpService.row_create_date = loValidate.row_create_date;
                pOtpService.id = loValidate.id;
                pOtpService.validation_state            = 3;
                pOtpService.sms_id                      = loValidate.sms_id;
                pOtpService.message_type_system_type_id = loValidate.message_type_system_type_id;


                if (loValidate.row_create_date != null && (DateTime.Now - (DateTime)loValidate.row_create_date).TotalSeconds > 180)
                {
                    Crud <Otp> .Update(pOtpService, out _);

                    loGenericResponse.Status  = "Fail";
                    loGenericResponse.Code    = -1;
                    loGenericResponse.Message = "Gönderilen şifrenin süresi dolmuş. Lütfen yeni şifre isteyiniz.";
                    return(loGenericResponse);
                }

                pOtpService.validation_state = 1;

                var loErrorMessage = "";
                if (Crud <Otp> .Update(pOtpService, out loErrorMessage))
                {
                    loGenericResponse.Data   = pOtpService;
                    loGenericResponse.Status = "Ok";
                    loGenericResponse.Code   = 200;
                }
                else
                {
                    loGenericResponse.Status  = "Fail";
                    loGenericResponse.Code    = -1;
                    loGenericResponse.Message = "İşleminiz esnasında bir problem oluştu lütfen tekrar deneyiniz.";
                }
            }
            else
            {
                loGenericResponse.Status  = "Fail";
                loGenericResponse.Code    = -1;
                loGenericResponse.Message = "Geçersiz şifre girdiniz. Lütfen tekrar deneyiniz.";
            }

            return(loGenericResponse);
        }
예제 #9
0
        public static byte[] GetKey(this Otp otp)
        {
            var field = typeof(Otp).GetField("secretKey", BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.IsNotNull(field, "the secretKey field must have been renamed, please update this test accordingly");

            object value = field.GetValue(otp);

            Assert.IsTrue(value is InMemoryKey, "the secretKey field must have changed types from an InMemoryKey, please update this test accordingly");
            var inMemoryKey = (InMemoryKey)value;

            return(inMemoryKey.GetCopyOfKey());
        }
예제 #10
0
        public void Test_delete_single_users_and_otps_with_errors_then_add()
        {
            // Arrange
            string message = string.Empty;

            CleanTables();
            string test_user = "******";

            CreateOtp(CreateUser(test_user));

            // Act
            User user = repo.SingleOrDefault(u => u.UserId == test_user);

            if (user != null)
            {
                user.Otp.User = null;
                CleanTables();
                repo.Remove(user);
                try
                {
                    // errors on saveChanges should reset the state of the underlying DataContext
                    repo.SaveChanges();
                }
                catch (Exception ex)
                {
                    message = ex.Message;
                }
            }
            //---------
            user = repo.Create();
            DateTime test_date = new DateTime(2016, 6, 7, 12, 13, 54);
            string   test_pass = "******";
            Otp      otp       = new Otp()
            {
                Password = test_pass, StartDate = test_date
            };

            user.UserId = test_user;
            user.Otp    = otp;
            repo.Add(user);
            repo.SaveChanges();
            DataTable userTable = QueryTable("SELECT * FROM [User]");
            DataTable otpTable  = QueryTable("SELECT * FROM [Otp]");

            // Assert
            Assert.IsTrue(message != string.Empty);
            Assert.IsTrue(userTable.Rows.Count == 1);
            Assert.IsTrue(userTable.Rows[0]["UserId"].ToString() == test_user);
            Assert.IsTrue(otpTable.Rows[0]["Password"].ToString() == test_pass);
            Assert.AreEqual(Convert.ToDateTime(otpTable.Rows[0]["StartDate"]), test_date);
        }
예제 #11
0
        public ActionResult GenerateOtp(ReviewerType reviewerType)
        {
            var careManager = CurrentUser.CareManager.FirstOrDefault();

            if (careManager == null)
            {
                return(HttpNotFound());
            }

            // Clears expired OTPs.
            var now          = DateTime.UtcNow;
            var otpsToRemove = careManager.Otps.Where(otp => otp.Expires < now).ToList();

            if (otpsToRemove.Count > 0)
            {
                db.Otps.RemoveRange(otpsToRemove);
                db.SaveChanges();
            }

            // Generates
            Otp newOtp = null;
            var random = new Random();

            for (var n = 0; n < 10; n++)
            {
                using (var db = new ApplicationDbContext())
                {
                    newOtp = new Otp()
                    {
                        CareManagerId    = careManager.CareManagerId,
                        VerificationCode = string.Format("{0:0000}", random.Next(10000)),
                        Expires          = DateTime.UtcNow.AddMonths(1),
                        ReviewerType     = reviewerType
                    };
                    db.Otps.Add(newOtp);
                    try
                    {
                        db.SaveChanges();
                        Log(LogType.CareManager, "OTPを生成しました。", new { newOtp.CareManagerId, newOtp.ReviewerType, newOtp.VerificationCode });
                        return(Json(new { otp = newOtp }));
                    }
                    catch (DbUpdateException)
                    {
                        // Continues to try another random code.
                    }
                }
            }

            // Failed to generate.
            return(Json(new { otp = (Otp)null }));
        }
예제 #12
0
        public static Otp CheckUserAndWorkorderHaveUnvalidatedOtp(Otp pOtpService)
        {
            var loQuery = Queries.CheckOtp;

            loQuery = loQuery.Replace("@P01", pOtpService.phone);

            using var connection = Connection.ConnectionWinvestate();
            if (!Connection.OpenConnection(connection))
            {
                return(null);
            }

            var result = connection.Query <Otp>(loQuery).ToList();

            return(!result.Any() ? null : result.FirstOrDefault());
        }
예제 #13
0
        public void Test_add_two_users_and_otps()
        {
            // Arrange
            CleanTables();
            User     user      = repo.Create();
            DateTime test_date = new DateTime(2016, 6, 7, 12, 13, 54);
            string   test_pass = "******";
            Otp      otp       = new Otp()
            {
                Password = test_pass, StartDate = test_date
            };
            string test_user = "******";

            user.UserId = test_user;
            user.Otp    = otp;
            //------
            User     user2      = repo.Create();
            DateTime test_date2 = new DateTime(2016, 6, 8, 12, 21, 12);
            string   test_pass2 = "test_pass2";
            Otp      otp2       = new Otp()
            {
                Password = test_pass2, StartDate = test_date2
            };
            string test_user2 = "test_user2";

            user2.UserId = test_user2;
            user2.Otp    = otp2;

            // Act
            repo.Add(new User[2] {
                user, user2
            });
            repo.SaveChanges();
            DataTable userTable = QueryTable("SELECT * FROM [User]");
            DataTable otpTable  = QueryTable("SELECT * FROM [Otp]");

            // Assert
            Assert.IsTrue(userTable.Rows.Count == 2);
            Assert.IsTrue(userTable.Rows[0]["UserId"].ToString() == test_user);
            Assert.IsTrue(otpTable.Rows[0]["Password"].ToString() == test_pass);
            Assert.AreEqual(Convert.ToDateTime(otpTable.Rows[0]["StartDate"]), test_date);
            //------
            Assert.IsTrue(userTable.Rows[1]["UserId"].ToString() == test_user2);
            Assert.IsTrue(otpTable.Rows[1]["Password"].ToString() == test_pass2);
            Assert.AreEqual(Convert.ToDateTime(otpTable.Rows[1]["StartDate"]), test_date2);
        }
예제 #14
0
        public async Task <object> GetBy(Otp parameters)
        {
            var temp = 0;

            temp = Uow.Repository <Otp>().Count(t => t.OtpCode == parameters.OtpCode && t.UserId == parameters.UserId);

            if (temp != 0)
            {
                return(await Task.FromResult("Matched Succefully"));
            }
            else
            {
                return(await Task.FromResult("Not Matched "));
            }

            //throw new NotImplementedException();
        }
예제 #15
0
        public static Otp ValidateOtp(Otp pOtpService)
        {
            var loQuery = Queries.ValidateOtp;

            loQuery = loQuery.Replace("@P01", pOtpService.phone);
            loQuery = loQuery.Replace("@P02", pOtpService.otp_hash.ToUpper());

            using (var connection = Connection.ConnectionWinvestate())
            {
                if (!Connection.OpenConnection(connection))
                {
                    return(null);
                }

                var result = connection.Query <Otp>(loQuery).ToList();
                return(!result.Any() ? null : result.FirstOrDefault());
            }
        }
예제 #16
0
        public ActionResult Enroll(Otp otp, string factorType)
        {
            if (ModelState.IsValid != true)
            {
                return(View());
            }
            var stateToken = (string)Session[stateTokenKey];
            var response   = okta.authn.GetStatus(stateToken);

            try
            {
                var rv = okta.authn.ActivateTotpFactor(stateToken, response, otp.passCode);
                return(CreateSessionFor(rv));
            }
            catch
            {
                return(View());
            }
        }
예제 #17
0
        public string GetCode()
        {
            if (_otp == null)
            {
                var secret = Base32Encoding.ToBytes(Secret);

                _otp = Type switch
                {
                    AuthenticatorType.Hotp => new Hotp(secret, Algorithm, Digits),
                    AuthenticatorType.Totp => new Totp(secret, Period, Algorithm, Digits)
                };
            }

            switch (Type)
            {
            case AuthenticatorType.Totp when TimeRenew <= DateTime.Now:
            {
                var totp = (Totp)_otp;
                _code     = totp.ComputeTotp();
                TimeRenew = DateTime.Now.AddSeconds(totp.RemainingSeconds());
                break;
            }

            case AuthenticatorType.Hotp when _lastCounter != Counter:
            {
                var hotp = (Hotp)_otp;

                if (_code != null)
                {
                    TimeRenew = DateTime.Now.AddSeconds(10);
                }

                _code        = hotp.ComputeHOTP(Counter);
                _lastCounter = Counter;
                break;
            }
            }

            return(_code);
        }
예제 #18
0
        public string AddOtp(string phonenum, string otp)
        {
            var str = "could not add otp";

            try
            {
                var findobj = (from c in context.Otp
                               where c.Phoneno == phonenum
                               select c).FirstOrDefault();
                if (findobj == null)
                {
                    var obj = new Otp();
                    obj.Otpstring   = otp;
                    obj.Phoneno     = phonenum;
                    obj.CreatedDate = DateTime.Now;
                    context.Otp.Add(obj);
                    context.SaveChanges();
                    str = "sucessfully added otp";
                }
                else
                {
                    findobj.Otpstring   = otp;
                    findobj.CreatedDate = DateTime.Now;
                    using (var newContext = new StuffyCareContext())
                    {
                        newContext.Otp.Update(findobj);
                        newContext.SaveChanges();
                        str = "OTP updated sucessfully";
                    }
                }
            }
            catch (Exception e)
            {
                str = e.Message;
                throw e;
            }
            return(str);
        }
예제 #19
0
        public void Test_dataAdapter_create_user_and_otp()
        {
            // Arrange
            CleanTables();
            IDataAccessAdapter adapter = container.Resolve <IDataAccessAdapter>();
            User user = new User {
                UserId = "testUser"
            };
            Otp otp = new Otp {
                User = user, Password = "******", StartDate = DateTime.Now
            };

            // Act
            adapter.Add <User>(user);
            adapter.Add <Otp>(otp);
            adapter.SaveChanges();
            List <User> userList  = adapter.GetEntities <User>().ToList();
            User        addedUser = userList.SingleOrDefault(u => u.Id == user.Id);

            // Assert
            Assert.IsNotNull(addedUser);
            Assert.IsNotNull(addedUser.Otp);
        }
예제 #20
0
        public async Task AddAsync(Otp entity)
        {
            //Generate Otp
            var temp = Uow.Repository <Otp>().Count(t => t.UserId == entity.UserId);

            if (temp != 0)
            {
                var candidate = Uow.Repository <Otp>().FindBy(t => t.UserId == entity.UserId);
                await Uow.RegisterDeletedAsync(candidate);

                await Uow.CommitAsync();
            }
            Random rnd          = new Random();
            string randomNumber = (rnd.Next(100000, 999999)).ToString();

            entity.OtpCode = Int32.Parse(randomNumber);
            //Otp send via msg


            await Uow.RegisterNewAsync(entity);

            await Uow.CommitAsync();
        }
예제 #21
0
        public string GetCode()
        {
            if (_otp == null)
            {
                var secret = Base32Encoding.ToBytes(Secret);

                if (Type == AuthenticatorType.Hotp)
                {
                    _otp = new Hotp(secret, Algorithm, Digits);
                }
                else if (Type == AuthenticatorType.Totp)
                {
                    _otp = new Totp(secret, Period, Algorithm, Digits);
                }
            }

            if (Type == AuthenticatorType.Totp && TimeRenew <= DateTime.Now)
            {
                var totp = (Totp)_otp;
                _code     = totp.ComputeTotp();
                TimeRenew = DateTime.Now.AddSeconds(totp.RemainingSeconds());
            }
            else if (Type == AuthenticatorType.Hotp && _lastCounter != Counter)
            {
                var hotp = (Hotp)_otp;

                if (_code != null)
                {
                    TimeRenew = DateTime.Now.AddSeconds(HotpCooldownSeconds);
                }

                _code        = hotp.ComputeHOTP(Counter);
                _lastCounter = Counter;
            }

            return(_code);
        }
예제 #22
0
 public Task DeleteAsync(Otp parameters)
 {
     throw new NotImplementedException();
 }
예제 #23
0
 public HashSet <string> DeleteValidation(Otp parameters)
 {
     return(ValidationMessages);
 }
예제 #24
0
        public async Task UpdateAsync(Otp entity)
        {
            await Uow.RegisterDirtyAsync(entity);

            await Uow.CommitAsync();
        }
예제 #25
0
 public HashSet <string> UpdateValidation(Otp entity)
 {
     return(ValidationMessages);
 }
예제 #26
0
 public Task <object> GetAsync(Otp parameters)
 {
     throw new NotImplementedException();
 }
예제 #27
0
        public IHttpActionResult SendLoginOtp(Login model)
        {
            Otp otpModel = new Otp();

            otpModel.MobileOtp = sendOtp.GenerateOtp();
            try
            {
                string otpQuery = string.Empty;
                if (model.DocType != "individual")
                {
                    otpQuery = @"SELECT meta().id as Id,email,mobNum,emirateId From " + _bucket.Name + " as APTCCRM where meta().id like 'login_%' and email='" + model.Email + "' and `password`='" + EncryptDecryptString.EncodePasswordToBase64(model.Password) + "' and docType='user'";
                }
                else
                {
                    otpQuery = @"SELECT meta().id as Id,email,mobNum,emirateId From " + _bucket.Name + " as APTCCRM where meta().id like 'login_%' and email='" + model.Email + "' and `password`='" + EncryptDecryptString.EncodePasswordToBase64(model.Password) + "' and docType='individual'";
                }

                var userDocument = _bucket.Query <object>(otpQuery).ToList();
                if (userDocument.Count > 0)
                {
                    string mobileNo  = "";
                    string emirateId = "";
                    foreach (var item in userDocument)
                    {
                        mobileNo       = ((Newtonsoft.Json.Linq.JToken)item).Root["mobNum"].ToString();
                        otpModel.Email = ((Newtonsoft.Json.Linq.JToken)item).Root["email"].ToString();
                        if (((Newtonsoft.Json.Linq.JToken)item).Root["mobNum"]["countryCodeM"].ToString().Contains("+"))
                        {
                            otpModel.MobileNo = ((Newtonsoft.Json.Linq.JToken)item).Root["mobNum"]["countryCodeM"].ToString() + ((Newtonsoft.Json.Linq.JToken)item).Root["mobNum"]["areaM"].ToString() + ((Newtonsoft.Json.Linq.JToken)item).Root["mobNum"]["numM"].ToString();
                        }
                        else
                        {
                            otpModel.MobileNo = "+" + ((Newtonsoft.Json.Linq.JToken)item).Root["mobNum"]["countryCodeM"].ToString() + ((Newtonsoft.Json.Linq.JToken)item).Root["mobNum"]["areaM"].ToString() + ((Newtonsoft.Json.Linq.JToken)item).Root["mobNum"]["numM"].ToString();
                        }
                        otpModel.MobileOtp = otpModel.MobileOtp;
                    }

                    if (string.IsNullOrEmpty(emirateId))
                    {
                    }
                    //JObject jsonObj = JObject.Parse(userDocument[0].ToString());
                    //JObject jsonmobNumObj = JObject.Parse(jsonObj["APTCCRM"]["mobNum"].ToString());
                    //string area = (string)jsonmobNumObj["areaM"].ToString();
                    //if (string.IsNullOrEmpty("area"))
                    //{
                    //    area = string.Empty;
                    //}
                    //string mobileNo = (string)jsonmobNumObj["countryCodeM"] + area + (string)jsonmobNumObj["numM"];
                    //otpModel.KeyId = (string)jsonObj["APTCCRM"]["keyID"];
                    //otpModel.MobileNo = mobileNo;
                    //otpModel.MobileOtp = otpModel.MobileOtp;

                    var sendResult = mobileSMS.SendOtpViaMobile(otpModel.MobileNo, otpModel.MobileOtp, otpModel.Email);
                    if (sendResult == "200")
                    {
                        return(Content(HttpStatusCode.OK, MessageResponse.Message(HttpStatusCode.OK.ToString(), MessageDescriptions.Add, otpModel.Email), new JsonMediaTypeFormatter()));
                    }
                    else
                    {
                        return(Content(HttpStatusCode.InternalServerError, MessageResponse.Message(HttpStatusCode.InternalServerError.ToString(), sendResult), new JsonMediaTypeFormatter()));
                    }
                }
                else
                {
                    return(Content(HttpStatusCode.BadRequest, MessageResponse.Message(HttpStatusCode.BadRequest.ToString(), "179-invalid userid or password"), new JsonMediaTypeFormatter()));
                }
            }
            catch (Exception ex)
            {
                return(Content(HttpStatusCode.InternalServerError, MessageResponse.Message(HttpStatusCode.InternalServerError.ToString(), ex.StackTrace), new JsonMediaTypeFormatter()));
            }
        }
        public YubicoResponse(string response, string url)
        {
            var    reader = new StringReader(response);
            string line;

            var responseMap = new SortedDictionary <string, string>();

            ResponseMap = responseMap;

            while ((line = reader.ReadLine()) != null)
            {
                var unhandled = false;
                var parts     = line.Split(new[] { '=' }, 2);

                switch (parts[0])
                {
                case "h":
                    H = parts[1];
                    break;

                case "t":
                    T = parts[1];
                    break;

                case "status":
                    var statusCode = parts[1];
                    if (statusCode.Equals("EMPTY", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.Empty;
                    }
                    else if (statusCode.Equals("OK", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.Ok;
                    }
                    else if (statusCode.Equals("BAD_OTP", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.BadOtp;
                    }
                    else if (statusCode.Equals("REPLAYED_OTP", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.ReplayedOtp;
                    }
                    else if (statusCode.Equals("BAD_SIGNATURE", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.BadSignature;
                    }
                    else if (statusCode.Equals("MISSING_PARAMETER", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.MissingParameter;
                    }
                    else if (statusCode.Equals("NO_SUCH_CLIENT", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.NoSuchClient;
                    }
                    else if (statusCode.Equals("OPERATION_NOT_ALLOWED", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.OperationNotAllowed;
                    }
                    else if (statusCode.Equals("BACKEND_ERROR", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.BackendError;
                    }
                    else if (statusCode.Equals("NOT_ENOUGH_ANSWERS", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.NotEnoughAnswers;
                    }
                    else if (statusCode.Equals("REPLAYED_REQUEST", StringComparison.OrdinalIgnoreCase))
                    {
                        Status = YubicoResponseStatus.ReplayedRequest;
                    }
                    else
                    {
                        throw new ArgumentException("Response doesn't look like a validation response.");
                    }
                    break;

                case "timestamp":
                    Timestamp = int.Parse(parts[1]);
                    break;

                case "sessioncounter":
                    SessionCounter = int.Parse(parts[1]);
                    break;

                case "sessionuse":
                    UseCounter = int.Parse(parts[1]);
                    break;

                case "sl":
                    Sync = parts[1];
                    break;

                case "otp":
                    Otp = parts[1];
                    break;

                case "nonce":
                    Nonce = parts[1];
                    break;

                default:
                    unhandled = true;
                    break;
                }
                if (!unhandled)
                {
                    responseMap.Add(parts[0], parts[1]);
                }
            }
            if (Status == YubicoResponseStatus.Empty)
            {
                throw new ArgumentException("Response doesn't look like a validation response.");
            }

            if (Otp != null && Otp.Length > 32 && YubicoClient.IsOtpValidFormat(Otp))
            {
                PublicId = Otp.Substring(0, Otp.Length - 32);
            }

            Url = url;
        }
예제 #29
0
 public Authenticator()
 {
     TimeRenew = DateTime.MinValue;
     _code     = null;
     _otp      = null;
 }
예제 #30
0
        public ActionResult <GenericResponseModel> SendOtp([FromBody] Otp pOtpService)
        {
            var loGenericResponse = new GenericResponseModel();
            //var loParticipant = GetData.GetParticipantWithId(pOtpService.participant_phone);
            var loErrorMessage = "";

            if (string.IsNullOrEmpty(pOtpService.phone) ||
                string.IsNullOrWhiteSpace(pOtpService.phone))
            {
                loGenericResponse.Status  = "Fail";
                loGenericResponse.Code    = -1;
                loGenericResponse.Message = "Lütfen telefon numaranızı doldurunuz";
                return(loGenericResponse);
            }

            pOtpService.phone = HelperMethods.SerializePhone(pOtpService.phone);
            //if (loParticipant == null)
            //{
            //    loGenericResponse.Status = "Fail";
            //    loGenericResponse.Code = -1;
            //    loGenericResponse.Message = "No such participant";
            //    return loGenericResponse;
            //}
            //if (string.IsNullOrEmpty(loParticipant.phone) ||
            //    string.IsNullOrWhiteSpace(loParticipant.phone))
            //{
            //    loGenericResponse.Status = "Fail";
            //    loGenericResponse.Code = -1;
            //    loGenericResponse.Message = "Participant mobile phone can not be empty";
            //    return loGenericResponse;
            //}

            var loValidate = GetData.CheckUserAndWorkorderHaveUnvalidatedOtp(pOtpService);

            if (loValidate?.id > 0 && loValidate.row_create_date != null && (DateTime.Now - (DateTime)loValidate.row_create_date).TotalSeconds < 180)
            {
                var loRemainingTime = 180 - (DateTime.Now - (DateTime)loValidate.row_create_date).Seconds;
                Crud <Otp> .Update(pOtpService, out _);

                loGenericResponse.Status  = "Fail";
                loGenericResponse.Code    = 0;
                loGenericResponse.Data    = loRemainingTime;
                loGenericResponse.Message = "Aktif bekleyen bir şifreniz mevcut, şifrenizi giriniz ya da " + " " + loRemainingTime.ToString() + " saniye sonra tekrar deneyiniz. ";
                return(loGenericResponse);
            }


            pOtpService.row_create_date  = DateTime.Now;
            pOtpService.validation_state = 0;

            var loOtpContent = "123456";

            //#if !PROD


            //            pOtpService.otp_hash = Helper.Md5OfString(loOtpContent);
            //            pOtpService.sms_id = "123456";

            //            var loId = Crud<Otp>.Insert(pOtpService, out _);
            //            pOtpService.id = (int)loId;
            //            loGenericResponse.Data = pOtpService;
            //            loGenericResponse.Status = "Ok";
            //            loGenericResponse.Code = 200;
            //            return loGenericResponse;
            //#endif

            loOtpContent         = HelperMethods.RandomOtp();
            pOtpService.otp_hash = HelperMethods.Md5OfString(loOtpContent).ToUpper();

            var loMessageContent = HelperMethods.GetOtpContent(pOtpService.message_type_system_type_id, loOtpContent);
            var loMessageResult  = RestCalls.SendSms(loMessageContent, pOtpService.phone);

            if (loMessageResult > 0)

            {
                pOtpService.sms_id = loMessageResult.ToString();
                var loMyId = Crud <Otp> .Insert(pOtpService, out _);

                pOtpService.id           = (int)loMyId;
                loGenericResponse.Data   = pOtpService;
                loGenericResponse.Status = "Ok";
                loGenericResponse.Code   = 200;
            }
            else
            {
                loGenericResponse.Status  = "Fail";
                loGenericResponse.Code    = -1;
                loGenericResponse.Message = "İşleminiz esnasında bir problem oluştu lütfen tekrar deneyiniz." + loErrorMessage;
            }

            return(loGenericResponse);
        }