Example #1
0
        public object Any(User request)
        {
            TableRepository tableRepository = new TableRepository();
            var             userQuery       = tableRepository.GetTable(Tables.Users).CreateQuery <UserEntry>();

            string username = request.Username;

            username = TableEntityHelper.RemoveDiacritics(username);
            username = TableEntityHelper.ToAzureKeyString(username);

            var user = (from k in userQuery
                        where k.RowKey == username
                        select k).FirstOrDefault();

            if (user == null)
            {
                return(HttpError.NotFound(username + " do not exist"));
            }

            var badges = tableRepository.Get <UserBadgeEntry>(Tables.UserBadges, user.GetUserId().ToString());

            // "No similar question found... yet !"
            return(new UserResponse
            {
                Created = user.CreatedDate,
                Badges = badges.Select(k => new BadgeResponse
                {
                    Name = k.GetName(),
                    Awarded = k.Awarded,
                }).ToArray()
            });
        }
Example #2
0
        public static T[] Search <T>(string search, string tableName) where T : ITableEntity, new()
        {
            search = search.ToLowerInvariant();

            string[] terms = search.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);


            ConcurrentBag <string> bag = new ConcurrentBag <string>();


            Parallel.ForEach(terms, term =>
            {
                try
                {
                    term = $"{tableName}-{term}";

                    term = TableEntityHelper.RemoveDiacritics(term);
                    term = TableEntityHelper.ToAzureKeyString(term);

                    // todo : use a local cache to avoid multiple useless queries on term

                    TableRepository tableRepository = new TableRepository();
                    var query = tableRepository.GetTable(Tables.Indexes).CreateQuery <IndexEntry>();

                    var result = from k in query
                                 where k.RowKey == term
                                 select k.PartitionKey;

                    foreach (var id in result)
                    {
                        bag.Add(id);
                    }
                }
                catch
                {
                    // pas de log ?
                }
            });

            ConcurrentBag <T> bagResult = new ConcurrentBag <T>();

            IEnumerable <string> idsToSearch = bag.Distinct();

            Parallel.ForEach(idsToSearch, id =>
            {
                TableRepository tableRepository = new TableRepository();
                var query = tableRepository.GetTable(tableName).CreateQuery <T>();

                var result = from k in query
                             where k.RowKey == id
                             select k;

                foreach (var data in result)
                {
                    bagResult.Add(data);
                }
            });

            return(bagResult.ToArray());
        }
Example #3
0
        public IUserAuth GetUserAuthByUserName(string userNameOrEmail)
        {
            CloudTable userTable = _tableRepository.GetTable(Tables.Users);

            TableQuery <UserEntry> userQuery = userTable.CreateQuery <UserEntry>();

            var username = userNameOrEmail;
            var email    = userNameOrEmail;

            username = TableEntityHelper.RemoveDiacritics(username);
            username = TableEntityHelper.ToAzureKeyString(username);

            var result = (from k in userQuery
                          where k.RowKey == username || k.Email == email
                          select k).ToArray();

            return(result.FirstOrDefault());
        }
Example #4
0
        public IUserAuth CreateUserAuth(IUserAuth newUser, string password)
        {
            UserEntry user = newUser as UserEntry;

            ValidateNewUser(user, password);
            AssertNoExistingUser(user);

            var    saltedHash = HostContext.Resolve <IHashProvider>();
            string salt;
            string hash;

            saltedHash.GetHashAndSaltString(password, out hash, out salt);

            user.PartitionKey = Guid.NewGuid().ToString();
            user.RowKey       = newUser.UserName;
            user.RowKey       = TableEntityHelper.RemoveDiacritics(user.RowKey);
            user.RowKey       = TableEntityHelper.ToAzureKeyString(user.RowKey);

            //user.Id = 0;
            user.PasswordHash = hash;
            user.Salt         = salt;
            var digestHelper = new DigestAuthFunctions();

            user.DigestHa1Hash = digestHelper.CreateHa1(user.UserName, DigestAuthProvider.Realm, password);
            user.CreatedDate   = DateTime.UtcNow;
            user.ModifiedDate  = user.CreatedDate;

            //var userId = user.Id.ToString(CultureInfo.InvariantCulture);
            //if (!newUser.UserName.IsNullOrEmpty())
            //{
            //    redis.SetEntryInHash(IndexUserNameToUserId, newUser.UserName, userId);
            //}
            //if (!newUser.Email.IsNullOrEmpty())
            //{
            //    redis.SetEntryInHash(IndexEmailToUserId, newUser.Email, userId);
            //}
            SaveUserAuth(user);

            return(user);
        }