Ejemplo n.º 1
0
        public static async Task <FirebaseContactInfo> GetAccountInfo(string firebaseToken)
        {
            var result = new FirebaseContactInfo();
            //todo
            //use string format like $"Got {posts.Count()} posts"
            var accountInfoUrl = FirebaseRestApiUrl + "getAccountInfo?key=" + FirebaseApiKey;
            var json           = JsonConvert.SerializeObject(new
            {
                idToken = firebaseToken
            });

            var client = new HttpClient();
            HttpResponseMessage response = await client.PostAsync(accountInfoUrl, new StringContent(json, Encoding.UTF8, "application/json"));

            if (response.IsSuccessStatusCode)
            {
                var jsonResult = await response.Content.ReadAsStringAsync();

                result = JsonConvert.DeserializeObject <FirebaseContactInfo>(jsonResult);
            }
            client.Dispose();

            return(result);
        }
Ejemplo n.º 2
0
        public async Task <RequestResult> GetAuthToken([FromBody] FirebaseClientData user)
        {
            FirebaseContactInfo contactInfo = await FirebaseAuth.GetAccountInfo(user.accessToken);

            if (contactInfo != null)
            {
                var currentFirebaseUser = contactInfo.users.FirstOrDefault(u => u.email == user.email);
                var ownUser             = await this.usersService.GetByEmail(user.email);

                if (ownUser != null)
                {
                    //TODO refresh(store new) firebase access token?
                    return(AuthenticateUser(ownUser));
                }
                else
                {
                    var newUser = await this.usersService.Add(new User()
                    {
                        Name          = currentFirebaseUser.displayName != null ? currentFirebaseUser.displayName : currentFirebaseUser.email,
                        Email         = currentFirebaseUser.email,
                        PhotoUrl      = currentFirebaseUser.photoUrl,
                        Username      = currentFirebaseUser.displayName != null ? currentFirebaseUser.displayName : currentFirebaseUser.email, //TODO ensure username is unique
                        FirebaseToken = user.accessToken,
                        FirebaseInfo  = currentFirebaseUser
                    });

                    return(AuthenticateUser(newUser));
                }
            }

            return(new RequestResult
            {
                State = RequestState.Failed,
                Message = "Invalid User"
            });
        }