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); }
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" }); }