public async Task <T> GetAsync(Expression <Func <T, bool> > predicate)
        {
            T          obj;
            HttpClient client   = new HttpClient();
            var        response = await client.GetAsync(FirebaseDatabase.DatabaseURL).ConfigureAwait(false);

            var responseData = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                var settings = new JsonSerializerSettings
                {
                    NullValueHandling     = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };
                obj = JsonConvert.DeserializeObject <T>(responseData, settings);
                Collection.Upsert(obj);
                return(obj);
            }
            else
            {
                obj = Collection.FindOne(predicate);
                if (obj == null)
                {
                    if (!response.IsSuccessStatusCode)
                    {
                        throw FireFormsException.from(response.StatusCode);
                    }
                }
                return(obj);
            }
        }
Ejemplo n.º 2
0
        public async Task <FirebaseUser> RefreshToken(FirebaseUser firebaseUser)
        {
            HttpClient client = new HttpClient();
            var        nvc    = new List <KeyValuePair <string, string> >();

            nvc.Add(new KeyValuePair <string, string>("grant_type", "refresh_token"));
            nvc.Add(new KeyValuePair <string, string>("refresh_token", firebaseUser.refreshToken));
            var response = await client.PostAsync(RefreshTokenUrl, new FormUrlEncodedContent(nvc)).ConfigureAwait(false);

            var responseData = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            if (responseData == "null")
            {
                throw new Exception(response.StatusCode.ToString());
            }
            if (!response.IsSuccessStatusCode)
            {
                throw FireFormsException.from(response.StatusCode);
            }
            var settings = new JsonSerializerSettings
            {
                NullValueHandling     = NullValueHandling.Ignore,
                MissingMemberHandling = MissingMemberHandling.Ignore
            };
            var obj = JsonConvert.DeserializeObject <Dictionary <string, string> >(responseData, settings);

            firebaseUser.expiresIn    = obj["expires_in"];
            firebaseUser.refreshToken = obj["refresh_token"];
            firebaseUser.idToken      = obj["id_token"];
            if (Collection != null)
            {
                Upsert(firebaseUser);
            }
            return(firebaseUser);
        }
        public async Task DeleteAsync(Expression <Func <T, bool> > predicate)
        {
            var        mobj     = BsonMapper.Global.ToDocument <T>(Collection.FindOne(predicate));
            var        link     = FirebaseDatabase.FirebaseUser.idToken == null ? $"{FirebaseDatabase.DatabaseURL}/{FirebaseDatabase.Target}/{mobj["_id"].AsString}.json" : $"{FirebaseDatabase.DatabaseURL}/{FirebaseDatabase.Target}/{mobj["_id"].AsString}.json?auth={FirebaseDatabase.FirebaseUser.idToken}";
            HttpClient client   = new HttpClient();
            var        response = await client.DeleteAsync(link).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                Collection.Delete(mobj["_id"].AsString);
            }
            else
            {
                throw FireFormsException.from(response.StatusCode);
            }
        }
        public async Task <StatusEnum> UpsertAsync(T obj)
        {
            Collection.Upsert(obj);
            var        mobj     = BsonMapper.Global.ToDocument <T>(obj);
            HttpClient client   = new HttpClient();
            var        link     = FirebaseDatabase.FirebaseUser.idToken == null ? $"{FirebaseDatabase.DatabaseURL}/{FirebaseDatabase.Target}/{mobj["_id"].AsString}.json" : $"{FirebaseDatabase.DatabaseURL}/{FirebaseDatabase.Target}/{mobj["_id"].AsString}.json?auth={FirebaseDatabase.FirebaseUser.idToken}";
            var        response = await client.PutAsync(link, new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                return(StatusEnum.ALLSUCCESS);
            }
            else
            {
                throw FireFormsException.from(response.StatusCode);
            }
        }
        public async Task <IEnumerable <T> > GetAllAsync()
        {
            Dictionary <string, T> obj;
            IEnumerable <T>        values;
            HttpClient             client = new HttpClient();

            try
            {
                var response = await client.GetAsync(FirebaseDatabase.FullUri).ConfigureAwait(false);

                var responseData = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                if (responseData == "null")
                {
                    return(null);
                }
                if (!response.IsSuccessStatusCode)
                {
                    throw FireFormsException.from(response.StatusCode);
                }
                var settings = new JsonSerializerSettings
                {
                    NullValueHandling     = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };
                try
                {
                    obj    = JsonConvert.DeserializeObject <Dictionary <string, T> >(responseData, settings);
                    values = obj.Values;
                }
                catch (JsonSerializationException)
                {
                    try
                    {
                        var arr = JsonConvert.DeserializeObject <IEnumerable <T> >(responseData, settings);
                        values = arr.Where(x => x != null).ToArray <T>();
                    }
                    catch (JsonSerializationException)
                    {
                        var arr = JsonConvert.DeserializeObject <T>(responseData, settings);
                        values = new[] { arr };
                    }
                }
                try
                {
                    Collection.Upsert(values);
                }
                catch (Exception)
                {
                    throw;
                }
                return(values);
            }
            catch (UnauthorizedException)
            {
                throw;
            }
            catch (NotFoundException)
            {
                values = Collection.FindAll();

                if (values == null)
                {
                    throw FireFormsException.from(System.Net.HttpStatusCode.NotFound);
                }
                return(values);
            }
            catch (InternalServerErrorException)
            {
                throw;
            }
            catch (PreconditionFailedException)
            {
                throw;
            }
            catch (BadRequestException)
            {
                throw;
            }
            catch (Exception)
            {
                throw;
            }
        }