public async Task <IActionResult> Create(CredentialEditViewModel credentialVM)
        {
            if (!ModelState.IsValid)
            {
                return(View(credentialVM));
            }

            var credential = new Credential
            {
                Description     = credentialVM.Description,
                Value           = credentialVM.Value,
                UserCredentials = new List <UserCredential>(),
            };

            foreach (var userId in credentialVM.SelectedUser)
            {
                credential.UserCredentials.Add(new UserCredential
                {
                    UserId = userId
                });
            }

            _db.Add(credential);
            await _db.SaveChangesAsync();

            return(RedirectToAction(nameof(Index)));
        }
        public async Task <IActionResult> Create()
        {
            var users = await GetUsersAsync(x => true);

            var credentialVM = new CredentialEditViewModel
            {
                Users = users,
            };

            return(View(credentialVM));
        }
        public async Task <IActionResult> Edit(Guid?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var credential = await _db.Credentials.Include(x => x.UserCredentials)
                             .ThenInclude(x => x.User)
                             .FirstOrDefaultAsync(m => m.Id == id);

            if (credential == null)
            {
                return(NotFound());
            }

            var unusedUsers = await _db.Users
                              .Where(x => !IsUserUnderCredential(x, credential))
                              .OrderBy(x => x.Name)
                              .Select(x =>
                                      new SelectListItem
            {
                Text  = x.Name,
                Value = x.Id.ToString()
            })
                              .ToListAsync();

            var credentialTipp = new SelectListItem()
            {
                Text  = "--- select user ---",
                Value = null
            };

            unusedUsers.Insert(0, credentialTipp);
            var dropdown = new SelectList(unusedUsers, "Value", "Text");

            var credentialVM = new CredentialEditViewModel();

            {
                credentialVM.Id          = credential.Id;
                credentialVM.Description = credential.Description;
                credentialVM.Value       = credential.Value;
                credentialVM.UserList    = credential.UserCredentials.Select(x => new UserViewModel
                {
                    UserId   = x.UserId,
                    UserName = x.User.Name
                }).ToList();

                credentialVM.Users = dropdown;
            };

            return(View(credentialVM));
        }
        public async Task <IActionResult> Details(Guid id)
        {
            var credential = await _db.Credentials
                             .Include(x => x.UserCredentials)
                             .ThenInclude(x => x.User)
                             .FirstOrDefaultAsync(m => m.Id == id);

            if (credential == null)
            {
                return(NotFound());
            }

            var identity = User.Identity as ClaimsIdentity;
            var username = identity.Claims.FirstOrDefault(c => c.Type == "preferred_username")?.Value;

            if (!credential.UserCredentials.Any(x => x.User.Name == username))
            {
                return(Unauthorized());
            }

            var credentialVM = new CredentialEditViewModel();

            {
                credentialVM.Id          = credential.Id;
                credentialVM.Description = credential.Description;
                credentialVM.Value       = credential.Value;
                credentialVM.UserList    = credential.UserCredentials
                                           .Select(x => new UserViewModel
                {
                    UserId   = x.UserId,
                    UserName = x.User.Name
                })
                                           .ToList();
            };

            return(View(credentialVM));
        }
        public async Task <IActionResult> Edit(CredentialEditViewModel credentialVM)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var credential = await _db.Credentials.Include(x => x.UserCredentials).FirstOrDefaultAsync(m => m.Id == credentialVM.Id);

                    {
                        credential.Description = credentialVM.Description;
                        credential.Value       = credentialVM.Value;

                        foreach (Guid userId in credentialVM.SelectedUser)
                        {
                            var user = _db.Find <User>(userId);
                            credential.UserCredentials.Add(new UserCredential {
                                User = user, Credential = credential
                            });
                        }
                    }
                    await _db.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!CredentialExists(credentialVM.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Edit", new { id = credentialVM.Id }));
            }
            return(View(credentialVM));
        }