Beispiel #1
0
        public async Task <UserProfileDto?> UpdateUserAccountAsync(
            int locationId, IEnumerable <Claim> claims, UpdateNameEmailDto update)
        {
            var user_id = claims?.FirstOrDefault(x => x.Type == "ID");
            int id;

            if (!int.TryParse(user_id?.Value, out id))
            {
                return(null);
            }
            var user = await _context.Users
                       .Include(x => x.UserKeyMappings)
                       .ThenInclude(x => x.Keyholder)
                       .Include(x => x.ChangeEmailRequests)
                       .Include(x => x.UserLocations)
                       .FirstOrDefaultAsync(x => x.UserID == id);

            var keyholdemap = user?.UserKeyMappings?.FirstOrDefault(x => x.LocationId == locationId);

            if (keyholdemap == null)
            {
                return(null);
            }
            ;
            if (update.name != null)
            {
                user.Name = update.name;
            }
            Task save;

            if (update.email != null)
            {
                var email = EmailOperations.sendVerificationEmail(
                    user.Name, update.email, user.VerificationToken, true);
                user.Email                   = update.email;
                user.VerificationToken       = Authentication.generateEmailTokenHash();
                user.VerificationTokenExpiry = DateTime.UtcNow.AddDays(1);

                var changeRequest = new ChangeEmailRequest()
                {
                    User                    = user,
                    RequestedOn             = DateTime.UtcNow,
                    Email                   = update.email,
                    VerificationToken       = user.VerificationToken,
                    VerificationTokenExpiry = user.VerificationTokenExpiry,
                };
                await _context.EmailChangeRequests.AddAsync(changeRequest);

                _context.Users.Update(user);
                await email;
                save = _context.SaveChangesAsync();
            }
            else
            {
                _context.Users.Update(user);
                save = _context.SaveChangesAsync();
            }

            var model = _mapper.Map <UserProfileDto>(user);

            model.locationId = locationId;
            var tookit = _mapper.Map <ToolkitInfoDto>(keyholdemap.Keyholder);

            model.toolkitInfo = tookit;
            await save;

            return(model);
        }
Beispiel #2
0
        public async Task <IActionResult> UpdateUserProfile([FromRoute] int locationId, UpdateNameEmailDto update)
        {
            var ret = await _repository.UpdateUserAccountAsync(locationId, User.Claims, update);

            if (ret == null)
            {
                return(BadRequest());
            }
            return(Ok(ret));
        }