Ejemplo n.º 1
0
 public void SignIn(RestaurantUser user, bool createPersistentCookie)
 {
     if (user == null) throw new ArgumentNullException("user", "Value cannot be null or empty");
     FormsAuthenticationHelper.SetAuthCookie(user, createPersistentCookie);
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 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));
 }
Ejemplo n.º 9
0
        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
        }
Ejemplo n.º 10
0
        //
        // 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");
        }