Beispiel #1
0
        /// <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);
                }
            }
        }
Beispiel #2
0
 /// <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);
         }
     }
 }
 public HashSet <string> DeleteValidation(FacebookUserDetail parameters)
 {
     return(ValidationMessages);
 }
 public Task DeleteAsync(FacebookUserDetail parameters)
 {
     throw new NotImplementedException();
 }
 public HashSet <string> UpdateValidation(FacebookUserDetail entity)
 {
     return(ValidationMessages);
 }
        public async Task UpdateAsync(FacebookUserDetail entity)
        {
            await Uow.RegisterDirtyAsync(entity);

            await Uow.CommitAsync();
        }
        public async Task AddAsync(FacebookUserDetail entity)
        {
            await Uow.RegisterNewAsync(entity);

            await Uow.CommitAsync();
        }
 public async Task <object> GetBy(FacebookUserDetail parameters)
 {
     //throw new NotImplementedException();
     return(await Uow.Repository <FacebookUserDetail>().FindByAsync(t => t.UserId == parameters.UserId));
 }
 public async Task <object> GetAsync(FacebookUserDetail parameters)
 {
     //throw new NotImplementedException();
     return(await Uow.Repository <FacebookUserDetail>().AllAsync());
 }
Beispiel #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"));
        }
 public async Task <object> GetBy(FacebookUserDetail parameters)
 {
     //    throw new NotImplementedException();
     return(await Uow.Repository <FacebookUserDetail>().SingleOrDefaultAsync(m => m.UserId == parameters.UserId));
 }