/// <summary>
        /// Adds a new Facebook User's Details to DataBase
        /// </summary>
        /// <param name="facebookUser">Facebook User's Details to add</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="InvalidOperationException"></exception>
        /// <returns>Returns -1 if operation is unsuccessful otherwise value greater than 0</returns>
        public ulong Add(FacebookUserDetail facebookUser)
        {
            if (facebookUser == null)
                throw new ArgumentNullException("facebookuser");
            if (facebookUser.FacebookId == 0)
                throw new InvalidOperationException("To Add a Facebook User Detail the FBID of the User should be non zero");

            if (Find(facebookUser.FacebookId) != null)
                return 0;

            using (var cn = new SqlConnection(DatabaseConnection.ConnectionStringToDb))
            {
                using (var cmd = new SqlCommand("AddFacebookUser", cn))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("@FACEBOOKID", SqlDbType.BigInt).Value = facebookUser.FacebookId;
                    cmd.Parameters.Add("@OAUTHTOKEN", SqlDbType.VarChar, 300).Value = facebookUser.OAuthToken;
                    cmd.Parameters.Add("@PROFILELINK", SqlDbType.VarChar, 50).Value = facebookUser.ProfileLink.AbsoluteUri;
                    //cmd.Parameters.Add("@ALIVEFOR", SqlDbType.BigInt).Value = (long) Math.Floor(facebookUser.AliveFor.TotalSeconds); //This data seems to be inappropriate as AliveFor changes at the time of calculation
                    cmd.Parameters.Add("@EXPIRESON", SqlDbType.DateTime).Value = facebookUser.ExpiresOn;

                    cn.Open();
                    var res = cmd.ExecuteNonQuery();
                    return (ulong)res == 1UL ? facebookUser.FacebookId : 0;
                }
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// A constructor to Initialize a user with a given Restaurant Detail and Details for al base classes
 /// </summary>
 /// <param name="userid">The User's Id</param>
 /// <param name="name">The User's Name</param>
 /// <param name="userguid">The Unique id of the User</param>
 /// <param name="mobileNumber">The Mobile number of the user</param>
 /// <param name="loginexpireson">Login Expiry DateTime</param>
 /// <param name="role">The role ofthe user</param>
 /// <param name="address">The user's Address</param>
 /// <param name="emailid">The user's email id</param>
 /// <param name="password">The user's password as string (This has become obsolete and should not be used)</param>
 /// <param name="facebookdetail">The user's facebook detail</param>
 /// <param name="membershipuser">The membershipuser instance that will ba passed on to base class</param>
 public RestaurantUser(int userid, string name, Guid userguid, ulong mobileNumber, DateTime loginexpireson,
                       RestaurantUserRole role, string address, string emailid, string password,
                       FacebookUserDetail facebookdetail, MembershipUser membershipuser)
     : base(userid, name, userguid, mobileNumber, loginexpireson,role,membershipuser)
 {
     Address = address;
     EmailId = emailid;
     Password = password;
     FacebookDetail = facebookdetail;
 }
Ejemplo n.º 3
0
 /// <summary>
 /// A constructor to Initialize a user with a given Restaurant Detail and Details for al base classes
 /// </summary>
 /// <param name="userid">The User's Id</param>
 /// <param name="name">The User's Name</param>
 /// <param name="userguid">The Unique id of the User</param>
 /// <param name="mobileNumber">The Mobile number of the user</param>
 /// <param name="loginexpireson">Login Expiry DateTime</param>
 /// <param name="role">The role ofthe user</param>
 /// <param name="address">The user's Address</param>
 /// <param name="emailid">The user's email id</param>
 /// <param name="password">The user's password as string (This has become obsolete and should not be used)</param>
 /// <param name="facebookdetail">The user's facebook detail</param>
 /// <param name="membershipuser">The membershipuser instance that will ba passed on to base class</param>
 public RestaurantUser(int userid, string name, Guid userguid, ulong mobileNumber, DateTime loginexpireson,
                       RestaurantUserRole role, string address, string emailid, string password,
                       FacebookUserDetail facebookdetail, MembershipUser membershipuser)
     : base(userid, name, userguid, mobileNumber, loginexpireson, role, membershipuser)
 {
     Address        = address;
     EmailId        = emailid;
     Password       = password;
     FacebookDetail = facebookdetail;
 }
 /// <summary>
 /// A Utility method to Get all the Facebook Users' Details from given SqlConnection and SqlCommand
 /// </summary>
 /// <param name="items">The Collection which will be updated with Read Rows</param>
 /// <param name="cn">The SqlConnection object to use for Database connection</param>
 /// <param name="cmd">The SqlCommand object that will be used to retrive data</param>
 protected static void GetAllRecord(IList<FacebookUserDetail> items, SqlConnection cn, SqlCommand cmd)
 {
     cn.Open();
     using (var rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
     {
         while (rdr.Read())
         {
             var item = new FacebookUserDetail
             {
                 FacebookId = rdr.TryGetDataAsUInt64(0),
                 OAuthToken = rdr.TryGetDataAsString(1),
                 ProfileLink = rdr.TryGetDataAsString(2) == String.Empty ? null : new Uri(rdr.TryGetDataAsString(2)),
                 ExpiresOn = rdr.TryGetDataAsDateTime(4)
             };
             items.Add(item);
         }
     }
 }
Ejemplo n.º 5
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");
        }