Esempio n. 1
0
        public async Task <ActionResult <string> > loginFacebookUser(FacebookLoginDTO model)
        {
            try
            {
                Gebruiker user = _gebruikerRepository.GetBy(model.Email);

                if (user != null)
                {
                    try
                    {
                        Debug.WriteLine(user);
                        //await _signInManager.SignInAsync(user, true);
                        string token = GetToken(user);
                        return(Created("", token)); //returns only the token
                    }

                    catch (Exception e)
                    {
                        return(BadRequest(e.Message));
                    }
                }
                else
                {
                    Gebruiker g = new Gebruiker
                    {
                        Email      = model.Email,
                        Voornaam   = model.Voornaam,
                        Achternaam = model.Achternaam,
                        //Foto = model.Foto,
                        Type     = Enum.GebruikerType.Leiding,
                        UserName = model.Email,
                        //TelNr = model.TelNr
                        IsFacebookUser = true
                    };

                    var result = await _userManager.CreateAsync(g);

                    if (result.Succeeded)
                    {
                        _gebruikerRepository.SaveChanges();
                        string token = GetToken(g);
                        return(Created("", token));
                    }
                    return(BadRequest());
                }
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }
        private FacebookLoginDTO FillFaceBookDto(dynamic payload)
        {
            FacebookLoginDTO data = new FacebookLoginDTO();

            data.FacebookId = payload.id;
            if (IsPropertyExist(payload, "email"))
            {
                data.Email = payload.email;
            }
            if (IsPropertyExist(payload, "name"))
            {
                data.Username = payload.name;
            }

            return(data);
        }
        public FacebookLoginDTO ValidateAndGet(string facebookToken)
        {
            string fbAppSecret = ConfigurationManager.AppSettings["FbAppSecret"];
            string prof        = ComputeHmacSha256Hash(facebookToken, fbAppSecret);
            string url         = "https://graph.facebook.com/v2.5/me?fields=id,email,name&access_token=" + facebookToken
                                 + "&appsecret_proof=" + prof;

            using (var client = new HttpClient())
            {
                var res = client.GetAsync(url).Result;
                if (res.IsSuccessStatusCode)
                {
                    var              json    = res.Content.ReadAsStringAsync().Result;
                    dynamic          payload = JObject.Parse(json);
                    FacebookLoginDTO data    = FillFaceBookDto(payload);
                    return(data);
                }
            }
            return(null);
        }
        public UserFacebook LoginFacebook(FacebookLoginDTO model)
        {
            var existingUser = _oAuthRepository.Get(model.FacebookId);

            if (existingUser != null)
            {
                if (IsBlocked(existingUser.UserId))
                {
                    throw new UserBlockedException();
                }
                return(existingUser);
            }
            else
            {
                var guid = Guid.NewGuid().ToString();
                return(_oAuthRepository.Add(new UserFacebook()
                {
                    FacebookId = model.FacebookId, Username = model.Username, UserId = guid
                }));
            }
        }
        public IHttpActionResult LoginFacebook([FromBody] string facebookToken)
        {
            if (facebookToken == null)
            {
                return(BadRequest("Token is missing"));
            }
            try
            {
                FacebookLoginDTO model = _facebookValidator.ValidateAndGet(facebookToken);
                if (model == null)
                {
                    return(BadRequest("invalid token"));
                }
                UserFacebook facebookUser = _authManager.LoginFacebook(model);

                var token = _token.GenerateKey(facebookUser.UserId, model.Username, facebookUser.IsAdmin, facebookToken);

                if (_authManager.IsNewFacebookUser(model.FacebookId))
                {
                    _authManager.AddUserToIdentity(facebookUser.UserId, model.Username, model.Email, token);
                    _authManager.AddUserToSocial(facebookUser.UserId, model.Username, token);
                }

                HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                response.Headers.Add("x-auth-token", token);
                return(ResponseMessage(response));
            }
            catch (UserBlockedException ube)
            {
                return(BadRequest(ube.Message));
            }
            catch (Exception e)
            {
                _log.Error(e);
                return(InternalServerError());
            }
        }