Example #1
0
        /// <summary>
        /// Gets a Tuple, containing queries for tracks, users, and playlists.
        /// Please note that this process can take considerably long.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="limit"></param>
        /// <returns></returns>
        public Tuple <TrackQueryObject, UserQueryObject, PlaylistQueryObject> GetAllQuery(string query, int limit)
        {
            TrackQueryObject    tracks    = GetTrackQuery(query, limit);
            UserQueryObject     users     = GetUserQuery(query, limit);
            PlaylistQueryObject playlists = GetPlaylistQuery(query, limit);

            return(Tuple.Create(tracks, users, playlists));
        }
Example #2
0
        public async Task ExecuteUserQuery()
        {
            var mockManager        = new QueryMockManager();
            var expectedPredicate  = new SimplePredicate(nameof(User.NickName), ValueComparingOperator.StringContains, "Misko");
            var mapperMock         = mockManager.ConfigureMapperMock <User, UserDto, UserFilterDto>();
            var queryMock          = mockManager.ConfigureQueryMock <User>();
            var productQueryObject = new UserQueryObject(mapperMock.Object, queryMock.Object);

            var unused = await productQueryObject.ExecuteQuery(new UserFilterDto { SubName = "Misko" });

            Assert.AreEqual(mockManager.CapturedPredicate, expectedPredicate);
        }
Example #3
0
        public async Task ApplyWhereClause_EmptyFilter_ReturnsNull()
        {
            var mockManager     = new QueryMockManager();
            var mapperMock      = mockManager.ConfigureMapperMock <User, UserDto, UserFilterDto>();
            var queryMock       = mockManager.ConfigureQueryMock <User>();
            var userQueryObject = new UserQueryObject(mapperMock.Object, queryMock.Object);

            var filter = new UserFilterDto();
            var temp   = await userQueryObject.ExecuteQuery(filter);

            Assert.AreEqual(null, mockManager.CapturedPredicate);
        }
Example #4
0
        /// <summary>
        /// Get the next page in a user query.
        /// </summary>
        /// <param name="link"></param>
        /// <returns></returns>
        public UserQueryObject GetNextUserInQuery(string link)
        {
            using (Stream s = jsonClient.GetStreamAsync(link).Result)
                using (StreamReader sr = new StreamReader(s))
                    using (JsonReader reader = new JsonTextReader(sr))
                    {
                        JsonSerializer  serializer    = new JsonSerializer();
                        UserQueryObject newUserObject = serializer.Deserialize <UserQueryObject>(reader);
                        link = newUserObject.next_href;

                        return(newUserObject);
                    }
        }
Example #5
0
        public async Task ApplyWhereClause_SimpleFilterByBornBefore_ReturnsCorrectPredicate()
        {
            DateTime filterBornBefore  = new DateTime(2018, 12, 12);
            var      mockManager       = new QueryMockManager();
            var      expectedPredicate = new CompositePredicate(
                new List <IPredicate>
            {
                new SimplePredicate(nameof(User.Birthdate), ValueComparingOperator.LessThan, filterBornBefore)
            }, LogicalOperator.AND);
            var mapperMock      = mockManager.ConfigureMapperMock <User, UserDto, UserFilterDto>();
            var queryMock       = mockManager.ConfigureQueryMock <User>();
            var userQueryObject = new UserQueryObject(mapperMock.Object, queryMock.Object);

            var filter = new UserFilterDto {
                BornBefore = filterBornBefore
            };
            var temp = await userQueryObject.ExecuteQuery(filter);

            Assert.AreEqual(expectedPredicate, mockManager.CapturedPredicate);
        }
Example #6
0
        public async Task ApplyWhereClause_SimpleFilterByEmail_ReturnsCorrectPredicate()
        {
            const string filteredEmail     = "*****@*****.**";
            var          mockManager       = new QueryMockManager();
            var          expectedPredicate = new CompositePredicate(
                new List <IPredicate>
            {
                new SimplePredicate(nameof(User.Email), ValueComparingOperator.Equal, filteredEmail)
            }, LogicalOperator.AND);
            var mapperMock      = mockManager.ConfigureMapperMock <User, UserDto, UserFilterDto>();
            var queryMock       = mockManager.ConfigureQueryMock <User>();
            var userQueryObject = new UserQueryObject(mapperMock.Object, queryMock.Object);

            var filter = new UserFilterDto {
                Email = filteredEmail
            };
            var temp = await userQueryObject.ExecuteQuery(filter);

            Assert.AreEqual(expectedPredicate, mockManager.CapturedPredicate);
        }
 public HttpResponseMessage UserQuery([FromBody] UserQueryObject uqo)
 {
     return(Request.CreateResponse(HttpStatusCode.OK, new UserDiagnosisResponseObject()));
 }
Example #8
0
        public static async Task Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            var storage             = CloudStorageAccount.Parse(StorageAccount);
            var cloudTableClient    = storage.CreateCloudTableClient();
            var usersTable          = cloudTableClient.GetTableReference("users");
            var userStatisticsTable = cloudTableClient.GetTableReference("userstatistics");
            await usersTable.CreateIfNotExistsAsync().ConfigureAwait(false);

            await userStatisticsTable.CreateIfNotExistsAsync().ConfigureAwait(false);

            // Get a Bearer Token with the App
            var    httpClient = new HttpClient();
            string token;

            try
            {
                var app = ConfidentialClientApplicationBuilder.Create(AppId)
                          .WithAuthority($"https://login.windows.net/{TenantId}/oauth2/token")
                          .WithRedirectUri("https://governance365function")
                          .WithClientSecret(AppSecret)
                          .Build();

                var authenticationProvider = new MsalAuthenticationProvider(app, Scopes);
                token = authenticationProvider.GetTokenAsync().Result;
                httpClient.DefaultRequestHeaders.Authorization =
                    new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
            }
            catch (Exception)
            {
                throw;
            }

            httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

            //initialize object for storing all user statistics
            UserQueryObject usersPage      = null;
            var             userStatistics = new UserStatisticsTableEntity()
            {
                PartitionKey     = "userstatistics",
                RowKey           = TenantId,
                DeactivatedUsers = 0,
                DeletedUsers     = 0,
                GuestUsers       = 0,
                InternalUsers    = 0,
                Users            = 0
            };

            //get all users (until nextlinnk is empty) and members/guests + sum up statistics
            do
            {
                if (string.IsNullOrEmpty(usersPage?.OdataNextLink?.ToString()))
                {
                    //first request
                    usersPage = JsonConvert.DeserializeObject <Governance365.Models.UserQueryObject>(await(await httpClient.GetAsync(usersUrl + UserSelectedProperties).ConfigureAwait(false)).Content.ReadAsStringAsync().ConfigureAwait(false));
                }
                else
                {
                    //next page request
                    usersPage = JsonConvert.DeserializeObject <Governance365.Models.UserQueryObject>(await(await httpClient.GetAsync(usersPage?.OdataNextLink?.ToString()).ConfigureAwait(false)).Content.ReadAsStringAsync().ConfigureAwait(false));
                }

                //batch request to store pages of users in Azure storage
                var userPageBatchOperation = new TableBatchOperation();
                foreach (var user in usersPage.Value)
                {
                    if (user.UserType != null)
                    {
                        userStatistics.Users++;
                        if (user.UserType.Equals("Member"))
                        {
                            userStatistics.InternalUsers++;
                        }
                        else if (user.UserType.Equals("Guest"))
                        {
                            userStatistics.GuestUsers++;
                        }
                        if (string.IsNullOrEmpty(user.AccountEnabled) && !bool.Parse(user.AccountEnabled))
                        {
                            userStatistics.DeactivatedUsers++;
                        }
                    }
                    user.PartitionKey = "user";
                    user.RowKey       = user.Id.ToString();
                    //add user entity to batch operation
                    userPageBatchOperation.Add(TableOperation.InsertOrReplace(user));
                }
                //write user page to Azure tabel storage
                await usersTable.ExecuteBatchAsync(userPageBatchOperation).ConfigureAwait(false);
            } while (!string.IsNullOrEmpty(usersPage.OdataNextLink?.ToString()));

            //write user statistics to table "userstatistics" -> single value with overwrite
            var insertUserStatisticsOperation = TableOperation.InsertOrReplace(userStatistics);
            await userStatisticsTable.ExecuteAsync(insertUserStatisticsOperation).ConfigureAwait(false);

            httpClient.Dispose();
        }
Example #9
0
 public UserService(UnitOfWork unitOfWork, UserQueryObject uquery)
 {
     this.unitOfWork = unitOfWork;
     userQueryObject = uquery;
 }