Ejemplo n.º 1
0
        private async Task <IActionResult> RegisterFacebook(RegisterModel model, FacebookUserModel facebookUserModel)
        {
            var userExists = await userManager.FindByNameAsync(model.Username);

            if (userExists != null)
            {
                return(StatusCode(StatusCodes.Status409Conflict));
            }

            var user = new ApplicationUser
            {
                Email         = model.Email,
                SecurityStamp = Guid.NewGuid().ToString(),
                UserName      = model.Username
            };
            var result = await userManager.CreateAsync(user);

            if (!result.Succeeded)
            {
                return(StatusCode(StatusCodes.Status409Conflict));
            }

            if (!await roleManager.RoleExistsAsync(UserRoles.User))
            {
                await roleManager.CreateAsync(new IdentityRole(UserRoles.User));
            }

            if (await roleManager.RoleExistsAsync(UserRoles.User))
            {
                await userManager.AddToRoleAsync(user, UserRoles.User);
            }
            await AddNewStudent(user.Email, user.UserName);

            return(StatusCode(StatusCodes.Status200OK));
        }
Ejemplo n.º 2
0
        public async Task <ActionResult> Facebook(string code)
        {
            //CheckAuthorisation(code);
            ViewBag.Message = "Your Facebook page.";

            var fbm = new FacebookUserModel()
            {
                Name = User.Identity.Name
            };

            fbm.Friends = new List <FriendModel>()
            {
                new FriendModel()
                {
                    Name = "Neil", Profile = ""
                },
                new FriendModel()
                {
                    Name = "Fred", Profile = ""
                }
            };

            fbm = GetData(Session["access_token"] as Claim, User.Identity);


            return(View(fbm));
        }
Ejemplo n.º 3
0
        public async Task <object> GetBy(FacebookUserModel parameters)
        {
            var isMobile = await Uow.Repository <FacebookUser>().SingleOrDefaultAsync(t => t.MobileNo == parameters.Email || t.Email == parameters.Email);

            if (isMobile != null && PasswordHash.VerifySignature(parameters.Password, isMobile.Password, isMobile.Salt))
            {
                isMobile.Token = await ApplicationTokenProvider.GetTokenAsync(isMobile);

                return(isMobile);
            }

            else
            {
                var isEmail = await Uow.Repository <FacebookUser>().SingleOrDefaultAsync(t => t.Email == parameters.Email);

                if (isEmail != null && PasswordHash.VerifySignature(parameters.Password, isEmail.Password, isEmail.Salt))
                {
                    isMobile.Token = await ApplicationTokenProvider.GetTokenAsync(isMobile);

                    return(isMobile);
                }
                else
                {
                    return(0);
                }
                // return "Invalid credentials";
            }
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> Facebook(FacebookUserModel facebookUserModel)
        {
            var clientFactory = httpClientFactory.CreateClient();
            var url           = "https://graph.facebook.com/me?access_token=" + facebookUserModel.AccessToken;
            HttpRequestMessage  requestMessage = new HttpRequestMessage(HttpMethod.Get, url);
            HttpResponseMessage response       = await clientFactory.SendAsync(requestMessage);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                var userExists = await userManager.FindByNameAsync(facebookUserModel.Email);

                if (userExists == null)
                {
                    var facebookRegister = new RegisterModel()
                    {
                        Username = facebookUserModel.Email,
                        Email    = facebookUserModel.Email,
                    };
                    await RegisterFacebook(facebookRegister, facebookUserModel);
                }
                var facebookLogin = new LoginModel()
                {
                    Username = facebookUserModel.Email,
                };

                return(await LoginFacebook(facebookLogin));
            }
            return(Unauthorized());
        }
Ejemplo n.º 5
0
        public ActionResult UserDetails()
        {
            var               client       = new FacebookClient("EAAdRFbKuurMBACHZBZAgNgue05EY3NpbXLaZCbobe91gmfZBvVkhFqgGeg4KItL2GL7Vk0CrsM9BL3Ymnf7EI1GxNRpZCsaTGtbCZCiqvdW3WBEEoCyZC4ZA2MBulgLZC4XVRJZAngh1rmgVBhOySgSQZCMwHDQxlvzfC1sQx6gVhis2QZDZD");
            dynamic           fbresult     = client.Get("me?fields=id,email,first_name,last_name,gender,locale,link,timezone,location,picture");
            FacebookUserModel facebookUser = Newtonsoft.Json.JsonConvert.DeserializeObject <FacebookUserModel>(fbresult.ToString());

            return(View(facebookUser));
        }
Ejemplo n.º 6
0
        public async Task UpdateAsync(FacebookUserModel entity)
        {
            FacebookUser facebookUser = new FacebookUser();

            facebookUser.LoginStatus = entity.LoginStatus;
            await Uow.RegisterDirtyAsync(facebookUser);

            await Uow.CommitAsync();
        }
Ejemplo n.º 7
0
        public ActionResult UserDetails()
        {
            var               client       = new FacebookClient(Session["accessToken"].ToString());
            dynamic           fbresult     = client.Get("me?fields=id,email,first_name,last_name,gender,locale,link,timezone,location,picture");
            FacebookUserModel facebookUser = Newtonsoft.Json.JsonConvert.DeserializeObject <FacebookUserModel>(fbresult.ToString());

            Session["user"] = fbresult.ToString();
            return(PartialView("Navbar", facebookUser));
        }
Ejemplo n.º 8
0
        FacebookUserModel getMe()
        {
            var access_token = ((ClaimsIdentity)User.Identity).Claims.FirstOrDefault(c => c.Type == "FacebookAccessToken").Value;
            var client       = new FacebookClient(access_token);
            //dynamic fbresult = client.Get("me?fields=id,picture.width(110).height(110)");
            dynamic           fbresult     = client.Get("me?fields=id,picture.type(normal)");
            FacebookUserModel facebookUser = Newtonsoft.Json.JsonConvert.DeserializeObject <FacebookUserModel>(fbresult.ToString());

            return(facebookUser);
        }
Ejemplo n.º 9
0
        public async Task <FacebookUserModel> GetUserDataAsync(string accessToken)
        {
            var httpClient = new HttpClient();

            string json = await httpClient.GetStringAsync($"https://graph.facebook.com/me?fields=email,first_name,last_name,id,picture&access_token={accessToken}");

            FacebookUserModel user = JsonConvert.DeserializeObject <FacebookUserModel>(json);

            return(user);
        }
Ejemplo n.º 10
0
        private void PopulateFacebookEmailWithDummyData(FacebookUserModel facebookUser)
        {
            var chars          = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            var random         = new Random();
            var randomUserName = new string(
                Enumerable.Repeat(chars, 8)
                .Select(s => s[random.Next(s.Length)])
                .ToArray());

            facebookUser.Email = facebookUser.Email ?? String.Format("{0}@test.com", randomUserName);
        }
Ejemplo n.º 11
0
        public static SocialMediaConnectStatus Register(FacebookUserModel model, string userProvider)
        {
            SocialMediaConnectStatus connectStatus = SocialMediaConnectStatus.LoggedIn;

            var userManager = UserManager.GetManager(userProvider);

            userManager.Provider.SuppressSecurityChecks = true;

            if (!userManager.UserExists("facebook_user" + model.UserId))
            {
                System.Web.Security.MembershipCreateStatus status;
                var user = userManager.CreateUser("facebook_user" + model.UserId, Encrypt(model.UserId), model.Email,
                                                  "Question1", "Answer1", true, null, out status);

                userManager.SaveChanges();

                userManager.Provider.SuppressSecurityChecks = false;

                SitefinityUserModel sfUserModel = new SitefinityUserModel();

                //var profileManager = UserProfileManager.GetManager();
                //var profile = profileManager.CreateProfile(user, typeof(SitefinityProfile).FullName) as SitefinityProfile;
                //profile.FirstName = model.FirstName;
                //profile.LastName = model.LastName;

                //TODO: Cast Facebook Model to Sitefinity Model
                sfUserModel.CreatedUserId = user.Id;
                sfUserModel.FirstName     = model.FirstName;
                sfUserModel.LastName      = model.LastName;
                sfUserModel.Avatar        = model.ProfileImageUrl;
                sfUserModel.Birthday      = model.Birthday;
                sfUserModel.Location      = model.Location;
                sfUserModel.Gender        = model.Gender;

                RoleManager roleManager = RoleManager.GetManager();
                roleManager.Provider.SuppressSecurityChecks = true;

                roleManager.Provider.SuppressSecurityChecks = false;

                if (status != MembershipCreateStatus.Success)
                {
                    return(SocialMediaConnectStatus.Failed);
                }

                connectStatus = SocialMediaConnectStatus.Registered;
            }

            UserLoggingReason loginStatus = Login(model, "Default");

            Login(model, userProvider);

            return(connectStatus);
        }
        public ActionResult UserDetails()
        {
            if (Session["accessToken"] == null)
            {
                return(View("/Home/Welcome"));
            }
            var               client       = new FacebookClient(Session["accessToken"].ToString());
            dynamic           fbresult     = client.Get("me?fields=id,name,picture.type(large)");
            FacebookUserModel facebookUser = Newtonsoft.Json.JsonConvert.DeserializeObject <FacebookUserModel>(fbresult.ToString());

            return(View(facebookUser));
        }
Ejemplo n.º 13
0
        public CurrentUserModel ToCurrentUserModelFrom(FacebookUserModel from)
        {
            var user = new CurrentUserModel();

            user.FirstName = from.FirstName;
            user.LastName  = from.LastName;
            user.UserName  = from.Username;
            user.Id        = from.Id;
            user.Avatar    = from.Picture.ToString();
            user.Email     = from.Email;

            return(user);
        }
Ejemplo n.º 14
0
        private void OnFacebookLoginCompleted(FacebookUserModel facebookUser, Exception exception)
        {
            if (exception == null)
            {
                _facebookUser   = facebookUser;
                _isUserLoggedIn = true;
            }
            else
            {
                _errorMessage = exception.Message;

                Debug.WriteLine("Error: " + exception.Message);
            }
        }
Ejemplo n.º 15
0
        public static FacebookUserModel FacebookHandshake(string redirectUri, HttpRequestBase request)
        {
            var model       = new FacebookUserModel();
            var client      = new FacebookClient();
            var oauthResult = client.ParseOAuthCallbackUrl(request.Url);

            // Build the Return URI form the Request Url

            // Exchange the code for an access token
            dynamic result = client.Get("/oauth/access_token", new
            {
                client_id     = SocialMediaConnectConstants.AppId,
                redirect_uri  = redirectUri,
                client_secret = SocialMediaConnectConstants.AppSecret,
                code          = oauthResult.Code
                ,
            });

            // Read the auth values
            string accessToken = result.access_token;

            //If needed you can add the access token to a cookie for pulling additional inforamtion out of Facebook

            //DateTime expires = DateTime.UtcNow.AddSeconds(Convert.ToDouble(result.expires));

            //HttpCookie myCookie = HttpContext.Current.Request.Cookies["accessToken"] ?? new HttpCookie("accessToken");
            //myCookie.Values["value"] = accessToken;
            //myCookie.Expires = expires;

            //HttpContext.Current.Response.Cookies.Add(myCookie);

            // Get the user's profile information
            dynamic me = client.Get("/me",
                                    new
            {
                fields       = "name,picture,first_name,last_name,email,id,birthday,location,gender",
                access_token = accessToken
            });

            // Read the Facebook user values
            model.UserId          = me.id;
            model.FirstName       = me.first_name;
            model.LastName        = me.last_name;
            model.Email           = me.email;
            model.ProfileImageUrl = ExtractImageUrl(me);
            model.Birthday        = me.birthday;
            model.Gender          = me.gender;
            model.Location        = me.location["name"].ToString();
            return(model);
        }
Ejemplo n.º 16
0
        public User FacebookModelToUser(FacebookUserModel fbModel)
        {
            User user = new User()
            {
                uuid          = fbModel.id,
                fname         = fbModel.first_name,
                lname         = fbModel.last_name,
                emailId       = fbModel.email,
                profilepicurl = fbModel.picture.data.url,
                homepageurl   = fbModel.link,
                gender        = fbModel.gender.ToUpper().ElementAt(0).ToString()
            };

            return(user);
        }
Ejemplo n.º 17
0
        public async void CreateUser(string accessToken)
        {
            var               fbClient = new FacebookClient(accessToken);
            dynamic           fbresult = fbClient.Get("me?fields=id,email,first_name,last_name,gender,locale,link,timezone,location,picture");
            FacebookUserModel fbUser   = Newtonsoft.Json.JsonConvert.DeserializeObject <FacebookUserModel>(fbresult.ToString());

            User user   = FacebookModelToUser(fbUser);
            var  client = new RestClient();

            client.EndPoint    = @"http://leadonlinetestseries.com/registration/createUser/";
            client.Method      = HttpVerb.POST;
            client.PostData    = JsonConvert.SerializeObject(user);
            client.ContentType = "application/json";
            var json = client.MakeRequest();
        }
Ejemplo n.º 18
0
        private async Task <ApplicationUser> RegisterFBUser(FacebookUserModel facebookUserModel)
        {
            //await RemoveUserIfNotConfirmed(facebookUserModel.email);
            var user = await _userManager.FindByEmailAsync(facebookUserModel.email);

            if (user != null)
            {
                user.EmailConfirmed = true;
            }
            else
            {
                user = new ApplicationUser
                {
                    UserName       = facebookUserModel.email,
                    Email          = facebookUserModel.email,
                    EmailConfirmed = true
                };
                var result = await _userManager.CreateAsync(user);

                if (!result.Succeeded)
                {
                    throw new Exception("cannot create facebook user");
                }
                var customer = new Customer
                {
                    id       = user.Id,
                    imgSrc   = facebookUserModel.pictureSrc,
                    fullName = $"{facebookUserModel.fname} {facebookUserModel.lname}"
                };
                _context.Customers.Add(customer);
                if (await _context.SaveChangesAsync() != 1)
                {
                    throw new Exception("cannot add customer user");
                }
            }

            var addLoginResult = await _userManager.AddLoginAsync(user, new UserLoginInfo(
                                                                      GlobalVariables.FacebookProviderName,
                                                                      facebookUserModel.id,
                                                                      GlobalVariables.FacebookProviderDisplayName));

            if (!addLoginResult.Succeeded)
            {
                throw new Exception("cannot add facebook user");
            }
            return(user);
        }
Ejemplo n.º 19
0
        // GET: AnnouncementsMVC
        public string Index(string what = "all")
        {
            ContextProvider            contextProvider     = new ContextProvider();
            AnnouncementService        announcementService = new AnnouncementService(contextProvider, new TagService(contextProvider));
            IEnumerable <Announcement> c = null;

            switch (what.ToLower())
            {
            case "all":
            {
                c = announcementService.GetAll(); break;
            }

            case "my":
            {
                FacebookUserModel me = getMe();
                c = announcementService.GetOwnAnnouncements(me.id);
                foreach (var announcement in c)
                {
                    announcement.AuthorPicture = me.picture.data.url;
                }
                break;
            }

            case "friends":
            {
                List <FacebookFriendModel> friends = getFriends();
                List <string> ids = friends.Select(f => f.id).ToList();
                c = announcementService.GetFriendsAnnouncements(ids);
                foreach (var announcement in c)
                {
                    announcement.AuthorPicture = friends.Where(f => f.id == announcement.AuthorId).Select(f => f.picture).FirstOrDefault();
                }
                break;
            }
            }

            var setting = new JsonSerializerSettings
            {
                ContractResolver = new
                                   CamelCasePropertyNamesContractResolver()
            };

            return(JsonConvert.SerializeObject(c, Formatting.None, setting));
        }
Ejemplo n.º 20
0
        public static UserLoggingReason Login(FacebookUserModel model, string userProvider)
        {
            Credentials credentials = new Credentials()
            {
                UserName           = "******" + model.UserId,
                Password           = Encrypt(model.UserId),
                Persistent         = false,
                MembershipProvider = userProvider
            };

            if (credentials == null)
            {
                var result = UserLoggingReason.Unknown;
                return(result);
            }

            return(SecurityManager.AuthenticateUser(credentials));
        }
Ejemplo n.º 21
0
        private FacebookUserModel GetData(Claim access_token, IIdentity identity)
        {
            var claimsIdentity = HttpContext.User.Identity as ClaimsIdentity;


            try
            {
                var email = "";//claimsIdentity.FindAll("urn:facebook:email").First().Value;

                var     fb         = new FacebookClient(access_token.Value);
                dynamic myFriends  = fb.Get("/me/taggable_friends");
                dynamic myStatuses = fb.Get("/me/statuses");

                logger.Debug(myFriends);

                var fbm = new FacebookUserModel()
                {
                    Name = identity.Name, Email = email
                };
                var friendsList = new List <FriendModel>();
                foreach (dynamic friend in myFriends.data)
                {
                    friendsList.Add(new FriendModel()
                    {
                        Name  = friend.name,
                        Image = friend.picture.data.url
                    });
                    //Response.Write("Name: " + friend.name + "<br/>Facebook id: " + friend.id + "<br/><br/>");
                }
                fbm.Friends = friendsList;
                List <StatusModel> sm = new List <StatusModel>();
                foreach (dynamic s in myStatuses.data)
                {
                    sm.Add(new StatusModel(s));
                }
                fbm.Statuses = sm;
                return(fbm);
            }
            catch (Exception e)
            {
                logger.Error(e);
                return(new FacebookUserModel());
            }
        }
Ejemplo n.º 22
0
        public JsonResult UserDetail(FacebookLoginModel model)
        {
            Session["uid"]         = model.uid;
            Session["accessToken"] = model.accessToken;
            var               client       = new FacebookClient(model.accessToken);
            dynamic           fbresult     = client.Get("me?fields=id,email,first_name,last_name,gender");
            FacebookUserModel facebookUser =
                Newtonsoft.Json.JsonConvert.DeserializeObject <FacebookUserModel>(fbresult.ToString());
            User lgnUser = Current.Context.User.FirstOrDefault(d => d.FacebookId == facebookUser.id);

            if (lgnUser != null)
            {
                Current.setSessionItem("userInfo", lgnUser);
            }
            else
            {
                var newUser     = new User();
                var oldUserInfo = Current.Context.User.FirstOrDefault(a => !string.IsNullOrEmpty(facebookUser.email) && a.Email == facebookUser.email);
                if (oldUserInfo != null)
                {
                    //eğer adam kendi mail adresiyle daha önceden kaydolmuşsa bu hesapla facebooku eşleştirelim
                    oldUserInfo.FacebookId = facebookUser.id;
                    Current.Context.SaveChanges();
                    Current.setSessionItem("userInfo", oldUserInfo);
                }
                else
                {
                    newUser = new User
                    {
                        Name       = facebookUser.first_name,
                        Surname    = facebookUser.last_name,
                        Email      = facebookUser.email,
                        FacebookId = facebookUser.id,
                        UserTypeId = Constants.USER_TYPE_GUEST,
                        Status     = true
                    };
                    Current.Context.User.Add(newUser);
                    Current.Context.SaveChanges();
                    Current.setSessionItem("userInfo", newUser);
                }
            }

            return(Json(new { success = true }));
        }
Ejemplo n.º 23
0
        public async Task AddAsync(FacebookUserModel entity)
        {
            FacebookUser   facebookUser   = new FacebookUser();
            PasswordResult passwordResult = PasswordHash.Encrypt(entity.Password);

            facebookUser.FirstName       = entity.FirstName;
            facebookUser.LastName        = entity.LastName;
            facebookUser.Email           = entity.Email;
            facebookUser.MobileNo        = entity.MobileNo;
            facebookUser.GenderAO        = entity.GenderAO;
            facebookUser.LoginStatus     = entity.LoginStatus;
            facebookUser.DateOfBirth     = entity.DateOfBirth;
            facebookUser.CreatedDateTime = entity.CreatedDateTime;
            facebookUser.Password        = passwordResult.Signature;
            facebookUser.Salt            = passwordResult.Salt;

            await Uow.RegisterNewAsync(facebookUser);

            await Uow.CommitAsync();
        }
Ejemplo n.º 24
0
        public async Task <object> GetBy(FacebookUserModel parameters)
        {
            var isMobile = await Uow.Repository <FacebookUser>().SingleOrDefaultAsync(t => t.MobileNo == parameters.MobileNo);

            if (isMobile != null && PasswordHash.VerifySignature(parameters.Password, isMobile.Password, isMobile.Salt))
            {
                return("suuccess with mobile");
            }

            else
            {
                var isEmail = await Uow.Repository <FacebookUser>().SingleOrDefaultAsync(t => t.Email == parameters.Email);

                if (isEmail != null && PasswordHash.VerifySignature(parameters.Password, isEmail.Password, isEmail.Salt))
                {
                    return("suuccess with email");
                }
                else
                {
                    return("Invalid credentials");
                }
                // return "Invalid credentials";
            }
        }
Ejemplo n.º 25
0
 public Task DeleteAsync(FacebookUserModel parameters)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 26
0
        public async Task UpdateAsync(FacebookUserModel entity)
        {
            await Uow.RegisterDirtyAsync(entity);

            await Uow.CommitAsync();
        }
Ejemplo n.º 27
0
        public ActionResult FacebookLoginCallback(string state, string code)
        {
            if (string.IsNullOrEmpty(state) || state != SessionManager.FBstate)
            {
                return(ErrorPage());
            }

            string        returnUrl   = SessionManager.ReturnUrl;
            List <string> exceptRoute = new List <string> {
                "FacebookLoginCallback", "Confirm"
            };

            if (exceptRoute.Any(x => returnUrl.Contains(x)))
            {
                returnUrl = "";
            }

            SessionManager.ReturnUrl     = "";
            SessionManager.FBstate       = "";
            SessionManager.ExternalLogin = null;

            string errorMessage = "", successMessage = "";
            var    tokenModel = new FacebookTokenModel();
            var    userModel  = new FacebookUserModel();
            var    loginModel = new LoginViewModel();

            //1.取得access_token
            string url = "https://graph.facebook.com/v3.1/oauth/access_token?"
                         + "client_id=" + ApplicationHelper.ApiKey.FacebookAppId
                         + "&client_secret=" + ApplicationHelper.ApiKey.FacebookAppSecret
                         + "&redirect_uri=" + RouteHelper.BaseUrl() + Url.Action("FacebookLoginCallback", "Member")
                         + "&code=" + code;

            try
            {
                var request  = (HttpWebRequest)WebRequest.Create(url);
                var response = (HttpWebResponse)request.GetResponse();
                var reader   = new StreamReader(response.GetResponseStream());

                string jsonStr = reader.ReadToEnd().ToString();
                tokenModel = _Json.JsonToModel <FacebookTokenModel>(jsonStr);

                reader.Close();
                response.Close();
            }
            catch (Exception)
            {
                errorMessage = "無法取得Facebook存取權";
            }

            //2.取得使用者資訊
            if (string.IsNullOrEmpty(errorMessage))
            {
                try
                {
                    url = "https://graph.facebook.com/me?fields=id,name,email&access_token=" + tokenModel.access_token;

                    var request  = (HttpWebRequest)WebRequest.Create(url);
                    var response = (HttpWebResponse)request.GetResponse();
                    var reader   = new StreamReader(response.GetResponseStream());

                    var jsonStr = reader.ReadToEnd().ToString();
                    userModel = _Json.JsonToModel <FacebookUserModel>(jsonStr);

                    reader.Close();
                    response.Close();
                }
                catch (Exception)
                {
                    errorMessage = "取得Facebook使用者錯誤";
                }
            }

            //3.Login/SignUp
            if (string.IsNullOrEmpty(errorMessage))
            {
                var model = new ExternalLoginViewModel
                {
                    ExternalType = ExternalType.Facebook,
                    ExternalKey  = userModel.id,
                    UserName     = userModel.name,
                    Email        = userModel.email
                };

                //FB新註冊, 一律先到確認頁 > 送出驗證Email
                if (!service.ExistExternalLogin(model))
                {
                    SessionManager.ExternalLogin = model;
                    return(RedirectToAction("SignUp", model));
                }

                //可外部登入
                loginModel = new LoginViewModel
                {
                    Account   = userModel.id,
                    LoginType = LoginType.Facebook
                };
            }

            return(LoginHelper(loginModel, returnUrl, errorMessage, successMessage));
        }
Ejemplo n.º 28
0
 public HashSet <string> UpdateValidation(FacebookUserModel entity)
 {
     return(ValidationMessages);
 }
Ejemplo n.º 29
0
 public HashSet <string> DeleteValidation(FacebookUserModel parameters)
 {
     return(ValidationMessages);
 }
Ejemplo n.º 30
0
 public async Task <object> GetAsync(FacebookUserModel parameters)
 {
     // throw new NotImplementedException();
     return(0);
 }