Ejemplo n.º 1
0
        public async Task <ActionResult> ForgotPassword([FromBody] ForgotPasswordModel data)
        {
            try
            {
                string OTP;
                var    checkUser = MH.CheckForDatas("UserName", data.UserName, null, null, "Authentication", "Authentication");
                var    filter    = Builders <BsonDocument> .Filter.Eq("UserName", data.UserName);

                var user = MH.GetSingleObject(filter, "Authentication", "Authentication").Result;
                if (user != null)
                {
                    var userData = BsonSerializer.Deserialize <RegisterModel>(user);
                    VerificationModel smsModel = new VerificationModel();
                    smsModel.UserName = data.UserName;
                    if (data.UserLocation == "IN")
                    {
                        Random codeGenerator = new Random();
                        OTP = codeGenerator.Next(0, 1000000).ToString("D6");
                        smsModel.VerificationCode = OTP;
                        SMSHelper.SendSMS(data.UserName, OTP);
                    }
                    else
                    {
                        OTP = Guid.NewGuid().ToString();
                        string link = GlobalHelper.GetIpConfig() + data.UserName + "/" + OTP + "/yes";
                        await EmailHelper.SendEmail(userData.FullName, data.UserName, link);
                    }
                    var update = Builders <BsonDocument> .Update.Set("Status", "Not Verified").Set("OTPExp", DateTime.UtcNow.AddMinutes(2))
                                 .Set("VerificationCode", smsHasher.HashPassword(smsModel, OTP));

                    var result = MH.UpdateSingleObject(filter, "Authentication", "Authentication", update).Result;
                    return(Ok(new ResponseData
                    {
                        Code = "200",
                        Message = "Success",
                        Data = null
                    }));
                }
                else
                {
                    return(BadRequest(new ResponseData
                    {
                        Code = "404",
                        Message = "User not found",
                        Data = null
                    }));
                }
            }
            catch (Exception ex)
            {
                LoggerDataAccess.CreateLog("AuthController", "ForgetPassword", "ForgetPassword", ex.Message);
                return(BadRequest(new ResponseData
                {
                    Code = "400",
                    Message = "Failed",
                    Data = null
                }));
            }
        }
Ejemplo n.º 2
0
 /// <summary>Get the access_token by refresh_token</summary>
 /// <param name="parameters"></param>
 /// <param name="_repo"></param>
 /// <param name="_settings"></param>
 public ResponseData DoRefreshToken(Parameters parameters, IRTokenRepository _repo, IOptions <Audience> _settings)
 {
     try
     {
         var token = _repo.GetToken(parameters.refresh_token, parameters.client_id).Result;
         if (token == null)
         {
             return(new ResponseData
             {
                 Code = "905",
                 Message = "can not refresh token",
                 Data = null
             });
         }
         if (token.IsStop == 1)
         {
             return(new ResponseData
             {
                 Code = "906",
                 Message = "refresh token has expired",
                 Data = null
             });
         }
         var refresh_token = Guid.NewGuid().ToString().Replace("-", "");
         token.IsStop = 1;
         var updateFlag = _repo.ExpireToken(token).Result;
         var addFlag    = _repo.AddToken(new RToken
         {
             ClientId     = parameters.client_id,
             RefreshToken = refresh_token,
             Id           = Guid.NewGuid().ToString(),
             IsStop       = 0
         });
         if (updateFlag && addFlag.Result)
         {
             return(new ResponseData
             {
                 Code = "999",
                 Message = "OK",
                 Data = GetJwt(parameters.client_id, refresh_token, _settings, BsonSerializer.Deserialize <RegisterModel>(MongoHelper.CheckForDatas("UserName", parameters.client_id, null, null, "Authentication", "Authentication")).UserRole)
             });
         }
         else
         {
             return(new ResponseData
             {
                 Code = "910",
                 Message = "can not expire token or a new token",
                 Data = null
             });
         }
     }
     catch (Exception ex)
     {
         LoggerDataAccess.CreateLog("AuthHelper", "DoRefreshToken", ex.Message);
         return(new ResponseData
         {
             Code = "400",
             Message = "Failed",
             Data = null
         });
     }
 }
Ejemplo n.º 3
0
 /// <summary>Get the access-token by username and password</summary>
 /// <param name="parameters"></param>
 /// <param name="_repo"></param>
 /// <param name="_settings"></param>
 public ResponseData DoPassword(Parameters parameters, IRTokenRepository _repo, IOptions <Audience> _settings)
 {
     try
     {
         var refresh_token = Guid.NewGuid().ToString().Replace("-", "");
         var rToken        = new RToken
         {
             ClientId     = parameters.username,
             RefreshToken = refresh_token,
             Id           = Guid.NewGuid().ToString(),
             IsStop       = 0
         };
         if (_repo.AddToken(rToken).Result)
         {
             dynamic UserInfo = new System.Dynamic.ExpandoObject();
             UserInfo.FirstName = parameters.fullname;
             UserInfo.UserName  = parameters.username;
             return(new ResponseData
             {
                 Code = "999",
                 Message = "OK",
                 Content = UserInfo,
                 Data = GetJwt(parameters.username, refresh_token, _settings, BsonSerializer.Deserialize <RegisterModel>(MongoHelper.CheckForDatas("UserName", parameters.username, null, null, "Authentication", "Authentication")).UserRole)
             });
         }
         else
         {
             return(new ResponseData
             {
                 Code = "909",
                 Message = "can not add token to database",
                 Data = null
             });
         }
     }
     catch (Exception ex)
     {
         LoggerDataAccess.CreateLog("AuthHelper", "DoPassword", ex.Message);
         return(new ResponseData
         {
             Code = "400",
             Message = "Failed",
             Data = null
         });
     }
 }
Ejemplo n.º 4
0
        public async Task <ActionResult> FaceBookLoginCheck([FromBody] SocialLoginModel data)
        {
            try
            {
                if (data.Token != null)
                {
                    string textResult;
                    using (var client = new HttpClient())
                    {
                        var uri = new Uri("https://graph.facebook.com/me?locale=en_US&fields=id,name&access_token=" + data.Token);

                        var response = await client.GetAsync(uri);

                        textResult = await response.Content.ReadAsStringAsync();
                    }
                    if (textResult.Contains("An active access token must be used to query information about the current user") || textResult.Contains("Malformed access token"))
                    {
                        return(BadRequest(new ResponseData
                        {
                            Code = "402",
                            Message = "Invalid token",
                            Data = null
                        }));
                    }
                    else
                    {
                        var result    = Newtonsoft.Json.JsonConvert.DeserializeObject <FacebookVerificationModel>(textResult);
                        var checkUser = MH.CheckForDatas("SocialId", result.id, null, null, "Authentication", "Authentication");
                        if (checkUser == null)
                        {
                            return(Ok(new ResponseData
                            {
                                Code = "201",
                                Message = "User not found",
                                Data = null
                            }));
                        }
                        else
                        {
                            var        user       = BsonSerializer.Deserialize <RegisterModel>(checkUser);
                            Parameters parameters = new Parameters();
                            parameters.username = result.id;
                            parameters.fullname = user.FullName;;
                            return(Ok(Json(authHelper.DoPassword(parameters, _repo, _settings))));
                        }
                    }
                }
                else
                {
                    return(BadRequest(new ResponseData
                    {
                        Code = "401",
                        Message = "Token is empty",
                        Data = null
                    }));
                }
            }
            catch (Exception ex)
            {
                LoggerDataAccess.CreateLog("AuthController", "GoogleLogin", "GoogleLogin", ex.Message);
                return(BadRequest(new ResponseData
                {
                    Code = "400",
                    Message = "Failed",
                    Data = null
                }));
            }
        }
Ejemplo n.º 5
0
        public async Task <ActionResult> GoogleLogin([FromBody] SocialLoginModel data)
        {
            try
            {
                if (data.Token != null)
                {
                    string textResult;
                    using (var client = new HttpClient())
                    {
                        var uri = new Uri("https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=" + data.Token);

                        var response = await client.GetAsync(uri);

                        textResult = await response.Content.ReadAsStringAsync();
                    }
                    if (textResult.Contains("Invalid Value"))
                    {
                        return(BadRequest(new ResponseData
                        {
                            Code = "402",
                            Message = "Invalid token",
                            Data = null
                        }));
                    }
                    else
                    {
                        var result = BsonSerializer.Deserialize <GoogleVerificationModel>(textResult);
                        if (result.sub == data.ID)
                        {
                            var checkUser = MH.CheckForDatas("UserName", result.email, null, null, "Authentication", "Authentication");
                            if (checkUser == null)
                            {
                                RegisterModel registerModel = new RegisterModel();
                                registerModel.UserName = result.email;
                                registerModel.SocialId = result.sub;
                                registerModel.FullName = result.name;
                                registerModel.Status   = "Verified";
                                registerModel.Email    = result.email;
                                var authCollection = _db.GetCollection <RegisterModel>("Authentication");
                                await authCollection.InsertOneAsync(registerModel);
                            }
                            Parameters parameters = new Parameters();
                            parameters.username = result.email;
                            parameters.fullname = result.name;;
                            return(Ok(Json(authHelper.DoPassword(parameters, _repo, _settings))));
                        }
                        else
                        {
                            return(BadRequest(new ResponseData
                            {
                                Code = "403",
                                Message = "ID mismatch",
                                Data = null
                            }));
                        }
                    }
                }
                else
                {
                    return(BadRequest(new ResponseData
                    {
                        Code = "401",
                        Message = "Token is empty",
                        Data = null
                    }));
                }
            }
            catch (Exception ex)
            {
                LoggerDataAccess.CreateLog("AuthController", "GoogleLogin", "GoogleLogin", ex.Message);
                return(BadRequest(new ResponseData
                {
                    Code = "400",
                    Message = "Failed",
                    Data = null
                }));
            }
        }
Ejemplo n.º 6
0
        public async Task <ActionResult> Register([FromBody] RegisterModel data)
        {
            try
            {
                BsonDocument checkUser;
                string       userName;
                string       OTP;
                if (data.UserLocation == "IN")
                {
                    userName = data.PhoneNumber;
                }
                else
                {
                    userName = data.Email;
                }
                checkUser = MH.CheckForDatas("UserName", userName, null, null, "Authentication", "Authentication");
                if (checkUser == null)
                {
                    if (data.UserLocation != null)
                    {
                        data.UserName = userName;
                        RegisterModel registerModel = new RegisterModel {
                            UserName = userName, Password = data.Password
                        };
                        data.Password = passwordHasher.HashPassword(registerModel, data.Password);
                        data.OTPExp   = DateTime.UtcNow.AddMinutes(2);
                        VerificationModel smsModel = new VerificationModel();
                        smsModel.UserName = userName;
                        if (data.UserLocation == "IN")
                        {
                            Random codeGenerator = new Random();
                            OTP = codeGenerator.Next(0, 1000000).ToString("D6");
                            smsModel.VerificationCode = OTP;
                            SMSHelper.SendSMS(data.PhoneNumber, OTP);
                        }
                        else
                        {
                            OTP = Guid.NewGuid().ToString();
                            string link   = GlobalHelper.GetIpConfig() + data.UserName + "/" + OTP + "/no";
                            var    result = await EmailHelper.SendEmail(data.FullName, data.Email, link);
                        }
                        data.VerificationCode = smsHasher.HashPassword(smsModel, OTP);
                        data.Status           = "Registered";
                        var authCollection = _db.GetCollection <RegisterModel>("Authentication");
                        await authCollection.InsertOneAsync(data);

                        return(Ok(new ResponseData
                        {
                            Code = "200",
                            Message = "User Registered",
                            Data = null
                        }));
                    }
                    else
                    {
                        return(BadRequest(new ResponseData
                        {
                            Code = "402",
                            Message = "Verification Type Cannot Be Empty",
                            Data = null
                        }));
                    }
                }
                else
                {
                    return(BadRequest(new ResponseData
                    {
                        Code = "401",
                        Message = "User Already Registered",
                        Data = null
                    }));
                }
            }
            catch (Exception ex)
            {
                LoggerDataAccess.CreateLog("AuthController", "Register", "Register", ex.Message);
                return(BadRequest(new ResponseData
                {
                    Code = "400",
                    Message = "Failed",
                    Data = null
                }));
            }
        }
Ejemplo n.º 7
0
        public ActionResult Login([FromBody] LoginModel user)
        {
            try
            {
                BsonDocument checkUser;
                checkUser = MH.CheckForDatas("UserName", user.UserName, null, null, "Authentication", "Authentication");
                if (checkUser != null)
                {
                    var verifyUser = BsonSerializer.Deserialize <RegisterModel>(checkUser);
                    if (verifyUser.Status == "Verified")
                    {
                        RegisterModel registerModel = new RegisterModel();
                        registerModel.UserName = user.UserName;
                        registerModel.Password = user.Password;
                        if (passwordHasher.VerifyHashedPassword(registerModel, verifyUser.Password, user.Password).ToString() == "Success")
                        {
                            Parameters parameters = new Parameters();
                            parameters.username = user.UserName;
                            parameters.fullname = verifyUser.FullName;
                            return(Ok(Json(authHelper.DoPassword(parameters, _repo, _settings))));
                        }
                        else
                        {
                            var filter = Builders <BsonDocument> .Filter.Eq("UserName", user.UserName);

                            string response = GlobalHelper.RecordLoginAttempts(filter);
                            if (response != "Failed")
                            {
                                return(BadRequest(new ResponseData
                                {
                                    Code = "401",
                                    Message = "Invalid User Infomation",
                                    Data = null
                                }));
                            }
                            else
                            {
                                return(BadRequest(new ResponseData
                                {
                                    Code = "400",
                                    Message = "Failed",
                                    Data = null
                                }));
                            }
                        }
                    }
                    else
                    {
                        return(BadRequest(new ResponseData
                        {
                            Code = "402",
                            Message = "User Not Verified",
                            Data = null
                        }));
                    }
                }
                else
                {
                    return(BadRequest(new ResponseData
                    {
                        Code = "404",
                        Message = "User Not Found",
                        Data = null
                    }));
                }
            }
            catch (Exception ex)
            {
                LoggerDataAccess.CreateLog("AuthController", "Login", "Login", ex.Message);
                return(BadRequest(new ResponseData
                {
                    Code = "400",
                    Message = "Failed",
                    Data = null
                }));
            }
        }
Ejemplo n.º 8
0
        public ActionResult RegisterVerification(string username, string otp)
        {
            try
            {
                var checkUser = MH.CheckForDatas("UserName", username, null, null, "Authentication", "Authentication");
                if (checkUser != null)
                {
                    var verifyUser = BsonSerializer.Deserialize <RegisterModel>(checkUser);
                    if (verifyUser.OTPExp > DateTime.UtcNow)
                    {
                        VerificationModel smsModel = new VerificationModel {
                            UserName = username, VerificationCode = otp
                        };
                        if (smsHasher.VerifyHashedPassword(smsModel, verifyUser.VerificationCode, otp).ToString() == "Success")
                        {
                            var update = Builders <BsonDocument> .Update.Set("Status", "Verified");

                            var filter = Builders <BsonDocument> .Filter.Eq("UserName", username);

                            var        result     = MH.UpdateSingleObject(filter, "Authentication", "Authentication", update).Result;
                            Parameters parameters = new Parameters {
                                username = username, fullname = verifyUser.FullName
                            };
                            return(Ok(Json(authHelper.DoPassword(parameters, _repo, _settings))));
                        }
                        else
                        {
                            return(BadRequest(new ResponseData
                            {
                                Code = "402",
                                Message = "OTP Invalid",
                                Data = null
                            }));
                        }
                    }
                    else
                    {
                        return(BadRequest(new ResponseData
                        {
                            Code = "401",
                            Message = "OTP Expired",
                            Data = null
                        }));
                    }
                }
                else
                {
                    return(BadRequest(new ResponseData
                    {
                        Code = "404",
                        Message = "User Not Found",
                        Data = null
                    }));
                }
            }
            catch (Exception ex)
            {
                LoggerDataAccess.CreateLog("AuthController", "RegisterVerification", "RegisterVerification", ex.Message);
                return(BadRequest(new ResponseData
                {
                    Code = "400",
                    Message = "Failed",
                    Data = null
                }));
            }
        }