コード例 #1
0
        public async Task RaiseAsync(Event evt)
        {
            if (evt.Name.Contains("Login"))
            {
                if (evt.EventType == EventTypes.Success)
                {
                    UserLoginSuccessEvent successEvent = evt as UserLoginSuccessEvent;
                    UserAudit             user         = UserAudit.CreateAuditEvent(successEvent.SubjectId.ToString(), successEvent.Username, successEvent.DisplayName, successEvent.Name, successEvent.Id.ToString(), evt.EventType.ToString(), evt.RemoteIpAddress);
                    await _context.UserAuditEvents.AddAsync(user);

                    await _context.SaveChangesAsync();
                }
                else
                {
                    UserLoginFailureEvent failEvent = evt as UserLoginFailureEvent;
                    UserAudit             user      = UserAudit.CreateAuditEvent(failEvent.Username.ToString(), failEvent.Id.ToString(), failEvent.Name, failEvent.EventType.ToString(), evt.RemoteIpAddress);
                    await _context.UserAuditEvents.AddAsync(user);

                    await _context.SaveChangesAsync();
                }
            }
            else if (evt.Name.Contains("Logout"))
            {
                UserLogoutSuccessEvent failEvent = evt as UserLogoutSuccessEvent;
                UserAudit user = UserAudit.CreateAuditEvent(failEvent.SubjectId.ToString(), failEvent.DisplayName, failEvent.DisplayName, failEvent.Name, failEvent.Id.ToString(), evt.EventType.ToString(), evt.RemoteIpAddress);
                await _context.UserAuditEvents.AddAsync(user);

                await _context.SaveChangesAsync();
            }
        }
コード例 #2
0
        public async Task AddUserAndAddAudit_Commit_RecordsExsists()
        {
            //arrange
            var user  = User.CreateSample();
            var audit = UserAudit.CreateSample(user.Id);

            IMongoDatabase db = _mongoRsResource.CreateDatabase();
            await db.CreateCollectionAsync("users");

            await db.CreateCollectionAsync("audit");

            using (IClientSessionHandle session =
                       await _mongoRsResource.Client.StartSessionAsync())
            {
                var repo = new UserRepositoryWithTransaction(db);
                session.StartTransaction();

                //act
                await repo.AddAsync(user, session);

                await repo.AddAuditAsync(audit, session);

                await session.CommitTransactionAsync();
            }


            //assert
            User createdUser = await GetUserAsync(db, user.Id);

            createdUser.Should().BeEquivalentTo(user);

            UserAudit createdAudit = await GetUserAuditAsync(db, audit.Id);

            createdAudit.Should().BeEquivalentTo(audit);
        }
コード例 #3
0
        public ActionResult Login(LoginModel model)
        {
            if (ModelState.IsValid)
            {
                var userModel = new UserAudit
                {
                    CompanyId = model.CompanyId,
                    Login     = model.Login,
                    Password  = model.Password,
                    SessionId = model.SessionId,
                };

                if (ContextManager.Authorize(userModel))
                {
                    var userToUpdate = ContextManager.GetCompanyUser(model.CompanyId);

                    if (userToUpdate != null)
                    {
                        userToUpdate.LastAuthorization = DateTime.Now;
                        userToUpdate.SessionId         = model.SessionId;

                        ContextManager.SaveUserAudit(userToUpdate);
                    }

                    return(RedirectToAction("Details", "Company", new { id = model.CompanyId }));
                }
                else
                {
                    model.Successful = false;
                    ModelState.AddModelError("Login", "Login/Password is wrong");
                }
            }
            return(View(model));
        }
コード例 #4
0
        public static bool Authorize(UserAudit model)
        {
            var user = new UserAudit();

            using (var session = Store.OpenSession())
            {
                user = session.Query <UserAudit, UserAudits_All>()
                       .Customize(cu => cu.WaitForNonStaleResults())
                       .Where(u => u.CompanyId == model.CompanyId)
                       .FirstOrDefault();

                if (user == null)
                {
                    return(true);
                }
                else if (model.SessionId == user.SessionId && ((DateTime.Now - model.LastAuthorization).Hours < 1) && model.SessionId != Guid.Empty)
                {
                    return(true);
                }
                else if (user.CompanyId == model.CompanyId && user.Login == model.Login && user.Password == model.Password)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
コード例 #5
0
        public override async Task <SignInResult> PasswordSignInAsync(TUser user, string password, bool isPersistent, bool lockoutOnFailure)
        {
            var result = await base.PasswordSignInAsync(user, password, isPersistent, lockoutOnFailure);

            var appUser = user as IdentityUser;

            if (appUser != null) // We can only log an audit record if we can access the user object and it's ID
            {
                var ip = _contextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();

                UserAudit auditRecord = null;

                switch (result.ToString())
                {
                case "Succeeded":
                    auditRecord = UserAudit.CreateAuditEvent(appUser.Id, UserAuditEventType.Login, ip);
                    break;

                case "Failed":
                    auditRecord = UserAudit.CreateAuditEvent(appUser.Id, UserAuditEventType.FailedLogin, ip);
                    break;
                }

                if (auditRecord != null)
                {
                    _db.UserAuditEvents.Add(auditRecord);
                    await _db.SaveChangesAsync();
                }
            }

            return(result);
        }
コード例 #6
0
 public static void SaveUserAudit(UserAudit model)
 {
     using (var session = Store.OpenSession())
     {
         session.Store(model);
         session.SaveChanges();
     }
 }
コード例 #7
0
        //POST : /api/ApplicationUser/Login
        public async Task <IActionResult> Login(LoginModel model)
        {
            var user = await _userManager.FindByNameAsync(model.UserName);

            if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
            {
                try
                {
                    var tokenDescriptor = new SecurityTokenDescriptor
                    {
                        Subject            = new ClaimsIdentity(new Claim[] { new Claim("UserID", user.Id.ToString()) }),
                        Expires            = DateTime.UtcNow.AddDays(1),
                        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_appSettings.JWT_Secret)), SecurityAlgorithms.HmacSha256Signature)
                    };
                    var tokenHandler  = new JwtSecurityTokenHandler();
                    var securityToken = tokenHandler.CreateToken(tokenDescriptor);
                    var access_token  = tokenHandler.WriteToken(securityToken);

                    UserAudit userAudit = new UserAudit
                    {
                        userId     = user.Id,
                        ActionDate = DateTimeOffset.UtcNow,
                        ActionName = "Login",
                        Status     = "Success"
                    };
                    _authenticationContext.Add(userAudit);
                    _authenticationContext.SaveChanges();

                    return(Ok(new { access_token }));
                }
                catch (Exception)
                {
                    UserAudit userAudit = new UserAudit
                    {
                        userId     = user.Id,
                        ActionDate = DateTimeOffset.UtcNow,
                        ActionName = "Login",
                        Status     = "Failed - System Error"
                    };
                    _authenticationContext.Add(userAudit);
                    _authenticationContext.SaveChanges();
                    return(BadRequest(new { message = "Funtion System Error." }));;
                }
            }
            else
            {
                UserAudit userAudit = new UserAudit
                {
                    userId     = user.Id,
                    ActionDate = DateTimeOffset.UtcNow,
                    ActionName = "Login",
                    Status     = "Failed - Username or password is incorrect."
                };
                _authenticationContext.Add(userAudit);
                _authenticationContext.SaveChanges();
                return(BadRequest(new { message = "Username or password is incorrect." }));
            }
        }
コード例 #8
0
        private async Task <UserAudit> GetUserAuditAsync(IMongoDatabase db, string id)
        {
            IMongoCollection <UserAudit> col = db.GetCollection <UserAudit>("audit");
            UserAudit audit = await col.AsQueryable()
                              .Where(x => x.Id == id)
                              .FirstOrDefaultAsync();

            return(audit);
        }
コード例 #9
0
        public static UserAudit GetUserBySession(Guid sessionId)
        {
            var user = new UserAudit();

            using (var session = Store.OpenSession())
            {
                user = session.Query <UserAudit, UserAudits_All>()
                       .Customize(cu => cu.WaitForNonStaleResults())
                       .Where(u => u.SessionId == sessionId)
                       .FirstOrDefault();
            }
            return(user);
        }
        public async void AuditEvent(object sender, UserAuditEventArgs e)
        {
            var userAudit = new UserAudit
            {
                ActionType       = e.UserActionType,
                DateTime         = e.DateTime,
                EventDescription = e.EventDescription,
                UserId           = e.UserId,
            };

            await _repository.AddAsync(userAudit);

            await _repository.Commit();
        }
コード例 #11
0
        public static NewCompanyModel SaveNewCompany(NewCompanyModel model)
        {
            using (var session = Store.OpenSession())
            {
                var company = new Company
                {
                    Id          = model.Id,
                    Name        = model.Name,
                    Budget      = model.Budget,
                    AddressLine = model.AddressLine,
                    CompanyId   = model.CompanyId,
                    OwnerId     = model.OwnerId,
                };

                session.Store(company);

                if (model.Login != null && model.Password != null)
                {
                    var newCompanyId = company.Id;

                    var userAudit = new UserAudit
                    {
                        CompanyId         = newCompanyId,
                        Login             = model.Login,
                        Password          = model.Password,
                        LastAuthorization = DateTime.Now
                    };

                    session.Store(userAudit);

                    company.OwnerId = userAudit.Id;

                    session.Store(company);
                }


                if (model.employees != null && model.employees.Count > 0)
                {
                    foreach (var employee in model.employees)
                    {
                        employee.CompanyId = company.Id;
                        session.Store(employee);
                    }
                }

                session.SaveChanges();
            }
            return(model);
        }
コード例 #12
0
        public CpventaMntItemFrm(TipoMantenimiento tipoMnt, VwCpventadet vwCpventadetMnt, List <VwCpventadet> vwCpventadetList, CpVentaItem cpVentaItemParameter)
        {
            InitializeComponent();

            _errorProvider = new DXErrorProvider();
            var styleController = new StyleController();

            WinFormUtils.SetStyleController(this, styleController);

            TipoMnt              = tipoMnt;
            VwCpventadetMnt      = vwCpventadetMnt;
            VwCpventadetList     = vwCpventadetList;
            CpVentaItemParameter = cpVentaItemParameter;
            UserAudit            = new UserAudit();
        }
コード例 #13
0
        public async Task <IActionResult> OnGetAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            UserAudit = await _context.UserAudit.FirstOrDefaultAsync(m => m.UserAuditID == id);

            if (UserAudit == null)
            {
                return(NotFound());
            }
            return(Page());
        }
コード例 #14
0
        public override async Task SignOutAsync()
        {
            await base.SignOutAsync();

            var user = await _userManager.FindByIdAsync(_userManager.GetUserId(_contextAccessor.HttpContext.User)) as IdentityUser;

            if (user != null)
            {
                var ip = _contextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();

                var auditRecord = UserAudit.CreateAuditEvent(user.Id, UserAuditEventType.LogOut, ip);
                _db.UserAuditEvents.Add(auditRecord);
                await _db.SaveChangesAsync();
            }
        }
コード例 #15
0
        public async Task <IActionResult> OnPostAsync(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            UserAudit = await _context.UserAudit.FindAsync(id);

            if (UserAudit != null)
            {
                _context.UserAudit.Remove(UserAudit);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
コード例 #16
0
ファイル: UserAuditTest.cs プロジェクト: Mike343/Netcoders
        public void Test_UserAudit_ValueToAudit()
        {
            var audit = new UserAudit();

            audit.ValueToAudit(new User
            {
                Reputation = 10,
                Name = "test",
                Title = "test2",
                EmailAddress = "test3",
                Signature = "test4",
                Status = UserStatus.Activated
            });

            Assert.AreEqual(10, audit.Reputation, "Reputation");
            Assert.AreEqual("test", audit.Name, "Name");
            Assert.AreEqual("test2", audit.Title, "Title");
            Assert.AreEqual("test3", audit.EmailAddress, "EmailAddress");
            Assert.AreEqual("test4", audit.Signature, "Signature");
            Assert.AreEqual(UserStatus.Activated, audit.Status, "Status");
        }
コード例 #17
0
        public static void SaveCompany(CompanyCreateEditModel model)
        {
            using (var session = Store.OpenSession())
            {
                var company = new Company
                {
                    Id          = model.Id,
                    Name        = model.Name,
                    Budget      = model.Budget,
                    AddressLine = model.AddressLine,
                    CompanyId   = model.CompanyId,
                    OwnerId     = model.OwnerId,
                };

                session.Store(company);

                if (model.Login != null && model.Password != null)
                {
                    var newCompanyId = company.Id;

                    var userAudit = new UserAudit
                    {
                        CompanyId         = newCompanyId,
                        Login             = model.Login,
                        Password          = model.Password,
                        LastAuthorization = DateTime.Now
                    };

                    session.Store(userAudit);

                    company.OwnerId = userAudit.Id;

                    session.Store(company);
                }
                session.SaveChanges();
            }
        }
コード例 #18
0
 public async Task AddAuditAsync(UserAudit audit, IClientSessionHandle session)
 {
     IMongoCollection <UserAudit> col = _mongoDatabase.GetCollection <UserAudit>("audit");
     await col.InsertOneAsync(session, audit, options : null);
 }