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 })); } }
/// <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 }); } }
/// <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 }); } }
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 })); } }
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 })); } }
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 })); } }
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 })); } }
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 })); } }