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