예제 #1
0
 public bool UserAccountUpdated([FromBody]  IncomingUserAccountUpdate projectRuleData)
 {
     using (var context = new UsersContext(Context, Configuration))
     {
         context.UpdateUserAccount(projectRuleData);
     }
     return(true);
 }
예제 #2
0
        internal void UpdateUserAccount(IncomingUserAccountUpdate userData)
        {
            var userAccount = Context.UserAccounts.FirstOrDefault(x => x.Id == userData.Id);

            Context.Attach(userAccount);
            userAccount.Email = userData.Email;
            if (!string.IsNullOrEmpty(userData.Password))
            {
                // generate a 128-bit salt using a secure PRNG
                byte[] salt = new byte[128 / 8];
                using (var rng = RandomNumberGenerator.Create())
                {
                    rng.GetBytes(salt);
                }
                Console.WriteLine($"Salt: {Convert.ToBase64String(salt)}");

                // derive a 256-bit subkey (use HMACSHA1 with 10,000 iterations)
                string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                           password: userData.Password,
                                                           salt: salt,
                                                           prf: KeyDerivationPrf.HMACSHA1,
                                                           iterationCount: 10000,
                                                           numBytesRequested: 256 / 8));
                userAccount.Salt     = Convert.ToBase64String(salt);
                userAccount.Password = hashed;
                Context.Entry(userAccount).Property("Password").IsModified = true;
                Context.Entry(userAccount).Property("Salt").IsModified     = true;
            }
            userAccount.FirstName = userData.FirstName;
            userAccount.LastName  = userData.LastName;
            Context.Update(userAccount);
            Context.SaveChanges();
            var rights         = default(UserRights);
            var getCommonRight = Context.UserRights.FirstOrDefault(x => x.ManageIterations == userData.Rights.IterationOptions &&
                                                                   x.ManageUserdays == userData.Rights.ScheduleManagement &&
                                                                   x.UpdateUserRights == userData.Rights.EditUserRights &&
                                                                   x.ViewOtherPeoplesWork == userData.Rights.ViewWorkItems &&
                                                                   x.WorkItemRule == userData.Rights.WorkItemOption &&
                                                                   x.ChatChannelsRule == userData.Rights.ChatChannels);

            if (getCommonRight != null)
            {
                rights = getCommonRight;
            }
            else
            {
                var newRights = Context.UserRights.Add(new UserRights {
                    ManageIterations     = Convert.ToInt16(userData.Rights.IterationOptions),
                    ManageUserdays       = Convert.ToInt16(userData.Rights.ScheduleManagement),
                    ChatChannelsRule     = Convert.ToInt16(userData.Rights.ChatChannels),
                    UpdateUserRights     = Convert.ToInt16(userData.Rights.EditUserRights),
                    ViewOtherPeoplesWork = Convert.ToInt16(userData.Rights.ViewWorkItems),
                    WorkItemRule         = Convert.ToInt16(userData.Rights.WorkItemOption)
                });
                rights = newRights.Entity;
                Context.SaveChanges();
            }

            Context.AssociatedProjectMemberRights.Add(new AssociatedProjectMemberRights {
                ProjectId     = userData.ProjectId,
                RightsId      = rights.Id,
                UserAccountId = userAccount.Id
            });
            Context.SaveChanges();
        }