public void SignIn(RestaurantUser user, bool createPersistentCookie) { if (user == null) throw new ArgumentNullException("user", "Value cannot be null or empty"); FormsAuthenticationHelper.SetAuthCookie(user, createPersistentCookie); }
public RestaurantUser CreateUser(RestaurantUser user, out MembershipCreateStatus status, string secretQuestion, string secretAnswer) { var result = (RestaurantUser) null; status = MembershipCreateStatus.ProviderError; if (_provider is CustomSqlMembershipProviderWrapper) result = (_provider as CustomSqlMembershipProviderWrapper).CreateUser(user, out status, secretQuestion, secretAnswer); return result; }
public void UpdateUser(RestaurantUser user) { _provider.UpdateUser(user); }
public CustomSqlMembershipProviderWrapper(RestaurantUser restaurantUser) { UserRepository = new RestaurantUserRepository(); RestaurantMembershipUser = restaurantUser; }
private static RestaurantUser CombineResult(RestaurantUser restaurantresult, MembershipUser sqlresult) { var result = (RestaurantUser) null; if (restaurantresult != null && sqlresult != null) result = new RestaurantUser(restaurantresult.UserId, restaurantresult.Name, restaurantresult.UserGuid, restaurantresult.MobileNumber, restaurantresult.LoginExpiresOn, restaurantresult.UserRole, restaurantresult.Address, restaurantresult.EmailId, restaurantresult.Password, restaurantresult.FacebookDetail, sqlresult ); return result; }
public virtual RestaurantUser CreateUser(RestaurantUser user, out MembershipCreateStatus status, string secretQuestion, string secretAnswer) { //users will be stored as GUID as their providerkey in Membership database and with //Real name in Restaurant Database RestaurantMembershipUser = user; CheckRestaurantMembershipUser(); MembershipUser sqlresult; var repoIdresult = -1; // Guest user will have their GUID as their username and Password because Guest user can never log in, // he is automatically logged in through his authentication ticket, so this will always be an internal call // Also since all user needs to have a valid email id except Guest user, we are using guid as dummy email if (user.UserRole == UserBase.RestaurantUserRole.Guest) { sqlresult = base.CreateUser(user.UserGuid.ToString(), user.UserGuid.ToString(), user.UserGuid.ToString() + "@guestuser.com", null, null, true, user.UserGuid, out status); if (status == MembershipCreateStatus.Success) { //Login Expiration for a Guset user is set to 86400 Minutes, ie 60 days user.LoginExpiresOn = DateTime.UtcNow.AddMinutes(86400D); user.Password = user.UserGuid.ToString(); repoIdresult = UserRepository.Add(user); } } //Facebook user will have their id as username and UserGuid as password else if (user.FacebookDetail != null && user.FacebookDetail.FacebookId > 0 && !user.FacebookDetail.OAuthToken.IsNullOrEmpty()) { sqlresult = base.CreateUser(user.FacebookDetail.FacebookId.ToString(), user.UserGuid.ToString(), user.EmailId, null, null, true, user.UserGuid, out status); if (status == MembershipCreateStatus.Success) { user.Password = user.UserGuid.ToString(); user.LoginExpiresOn = user.FacebookDetail.ExpiresOn; repoIdresult = UserRepository.Add(user); } } //For every one else the user creation is normal else { sqlresult = base.CreateUser(user.EmailId, user.Password, user.EmailId, secretQuestion, secretAnswer, true, user.UserGuid, out status); if (status == MembershipCreateStatus.Success) { user.LoginExpiresOn = DateTime.UtcNow.AddMinutes(FormsAuthentication.Timeout.TotalMinutes); repoIdresult = UserRepository.Add(user); } } if (status == MembershipCreateStatus.Success && sqlresult != null && repoIdresult > 0) { return new RestaurantUser(repoIdresult, user.Name, user.UserGuid, user.MobileNumber, user.LoginExpiresOn, user.UserRole, user.Address, user.EmailId, user.Password, user.FacebookDetail, sqlresult); } return null; }
public static FormsAuthenticationTicket MakeAuthTicket(RestaurantUser user, bool ispersistent) { var ticket = (FormsAuthenticationTicket)null; if (user != null) { //check if login has expired according to user instance, if it has then set loginexpire to new and correct datetime var loginexpiry = user.LoginExpiresOn.ToUniversalTime() < DateTime.UtcNow ? (user.UserRole == UserBase.RestaurantUserRole.Guest ? DateTime.UtcNow.AddMinutes(86400D) : DateTime.UtcNow.AddMinutes(FormsAuthentication.Timeout.TotalMinutes)) : user.LoginExpiresOn.ToUniversalTime(); ticket = new FormsAuthenticationTicket(1, // Version number user.UserName, //User unique name according to Membership database DateTime.UtcNow, //Time of creation loginexpiry, // Time of Ticket Expiry ispersistent, // Is ticket Persistent SerializeUserdata(user) // Add user specific data like ID, UniqueId and Friendly Name ); } //Also set the loginexpireson datetime for user //if (ticket != null) //{ // user.LoginExpiresOn = ticket.Expiration; // new RestaurantUserRepository().Update(user); //} return ticket; }
public static void SetAuthCookie(RestaurantUser user, bool ispersistent) { SetAuthCookie(MakeAuthTicket(user, ispersistent)); }
private void TryCreateFirstAdmin() { if (Membership.Provider.GetUser("*****@*****.**", false) != null) return; try { var firstadmin = new RestaurantUser(0,"Mr. Spock", Guid.NewGuid()) { UserRole = UserBase.RestaurantUserRole.Admin, EmailId = "*****@*****.**", Password = "******", Address = "On Starship Enterprise, The Advanced FTL Fighter Ship, Crusing through space, going places where no one has gone before :)", MobileNumber = 9876543210 }; MembershipCreateStatus status; ((Infrastructure.Providers.CustomSqlMembershipProviderWrapper)Membership.Provider).CreateUser( firstadmin,out status, null, null); } // ReSharper disable EmptyGeneralCatchClause catch{} // ReSharper restore EmptyGeneralCatchClause }
// // GET: /OAuth/ public ActionResult Authorize(string state) { if (TempData.Peek(TempDataStringResuorce.FacebookStateData) != null && CryptographyHelper.MatchOneTimeHash(TempData[TempDataStringResuorce.FacebookStateData].ToString(), state)) { var query = new { Code = Request.QueryString["code"], Error = Request.QueryString["error"], ErrorReason = Request.QueryString["error_reason"], ErrorDescription = Request.QueryString["error_description"] }; if (query.Error != null && query.ErrorReason == "user_denied") { TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification { Message = "It looks like you didn't Allowed us to Sign you in through Facebook, you can try again", Result = false, State = ActionResultNotification.MessageState.Error }; return RedirectToAction("LogIn", "Account"); } if (!query.Code.IsNullOrEmpty()) { var redirecturi = Url.AbsoluteAction("Authorize", "OAuth", null); var request = WebRequest.Create(FacebookHelper.GetAccessTokenUrl(AppConfigHelper.FacebookAppId, redirecturi, AppConfigHelper.FacebookAppSecret, query.Code)); try { var response = request.GetResponse(); var responsestream = response.GetResponseStream(); if (responsestream != null && response.ContentLength > 0) { var responsebody = new StreamReader(responsestream).ReadToEnd(); var token = new { AccessToken = responsebody.Split('&').First().Split('=').Last(), ExpiresOn = DateTime.UtcNow.AddSeconds(Convert.ToDouble(responsebody.Split('&').Last().Split('=').Last())) }; //Reuse varaibles to get User Details request = WebRequest.Create(FacebookHelper.GetFacebookNewUserUrl(token.AccessToken)); response = request.GetResponse(); responsestream = response.GetResponseStream(); if (responsestream != null) { responsebody = new StreamReader(responsestream).ReadToEnd(); var facebookuser = System.Web.Helpers.Json.Decode<FacebookUser>(responsebody); var facebookdetail = new FacebookUserDetail() { FacebookId = facebookuser.id, ExpiresOn = token.ExpiresOn, OAuthToken = token.AccessToken, ProfileLink = facebookuser.link }; //Try update with new facebookuser detail, if user dosent exist it will return false //Though Membership class returns a status of Duplicate user, for now I am going with it var restaurantuser = (RestaurantUser)null; if (!new FacebookUserDetailRepository().Update(facebookdetail)) { restaurantuser = new RestaurantUser(0, facebookuser.name, Guid.NewGuid()) { EmailId = facebookuser.email, FacebookDetail = facebookdetail, UserRole = UserBase.RestaurantUserRole.Customer }; MembershipCreateStatus createstatus; restaurantuser = MembershipService.CreateUser(restaurantuser, out createstatus); } if (restaurantuser == null) restaurantuser = MembershipService.GetUser(facebookdetail.FacebookId.ToString(), true); if (restaurantuser != null) { //If all goes well Log the user in FormsService.SignIn(restaurantuser, true); } } TempData[TempDataStringResuorce.ActionResultNotification] = new ActionResultNotification { Message = "You have been successully Logged in", Result = true, State = ActionResultNotification.MessageState.Information }; return RedirectToAction("Index", "Home"); } } catch (WebException exception) { return ProcessResponseErrorRedirect(redirecturi, exception); } } } return RedirectToAction("Index", "Home"); }