Beispiel #1
0
        internal SigninProgressResponseModel CalculateStudentProgess(int studentId)
        {
            using (var db = new SAMEntities())
            {
                //Sign In

                var eventTypeId = CrossCuttingConcerns.EventLog.EventType.User_Authentication.GetEnumValue();

                //Get the current week
                var currentDateTimeFormatInfo = DateTimeFormatInfo.CurrentInfo;
                var calendar   = currentDateTimeFormatInfo.Calendar;
                var weekNumber = calendar.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday); //46

                var eventSeverityId      = (int)CrossCuttingConcerns.EventLog.EventSeverity.Informational;
                var authenticationEvents = db.EventLogs.Where(x => x.UserId == studentId && x.EventTypeId == eventTypeId && x.EventSeverityId == eventSeverityId).ToList();

                //HINT: Check that the number of records is not greater than 5 - try removing duplicates --> student might sign in more than once on the same day. LINQ: Distinct
                var       signedInDates          = authenticationEvents.Count(x => calendar.GetWeekOfYear(x.CreateDate, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday) == weekNumber);
                const int requiredSigninDayCount = 5;

                var responseModel = new SigninProgressResponseModel();

                responseModel.CreateProgressItem("Days Attended", signedInDates);
                responseModel.CreateProgressItem("Days Required Attendance", requiredSigninDayCount);

                return(responseModel);
            }
        }
Beispiel #2
0
        private StudentAccessCardLinkResponse LinkCardToStudent(int userId)
        {
            var response = new StudentAccessCardLinkResponse();
            var cardId   = GetCardId();

            using (var data = new SAMEntities())
            {
                //Check if the card exists by joining on the userId and the cardId to make a composite Primary Key
                var existingAccessCard = data.AccessCards.FirstOrDefault(x => x.CardId == cardId && x.UserId == userId);
                if (existingAccessCard == null)
                {
                    //The card is available to be assigned

                    //go get the card
                    var availableCard = data.AccessCards.FirstOrDefault(x => x.CardId == cardId);
                    var currentUser   = data.Users.FirstOrDefault(x => x.Id == userId);

                    //Link the card to the user
                    availableCard.UserId = currentUser.Id;

                    try
                    {
                        data.SaveChanges();
                        response.WasOperationSuccessful = true;
                        response.SetUserId(userId);
                    }
                    catch
                    {
                        response.SetErrorMessage("Errors occured while linking card to the student");
                    }
                }
            }
            return(response);
        }
Beispiel #3
0
        internal List <UserModel> StudentList(string studentid = "")
        {
            var students = new List <UserModel>();

            using (var db = new SAMEntities())
            {
                var users     = db.Users.Where(x => !x.IsAdmin).ToList();
                var eventLogs = db.EventLogs.Distinct().ToList();

                foreach (var user in users)
                {
                    var registrationEventLog = eventLogs.FirstOrDefault(x => x.UserId == user.Id && x.EventTypeId == CrossCuttingConcerns.EventLog.EventType.Admin_Register_Student.GetEnumValue());
                    var signinEventLog       = eventLogs.LastOrDefault(x => x.UserId == user.Id && x.EventTypeId == CrossCuttingConcerns.EventLog.EventType.User_Authorisation.GetEnumValue());
                    students.Add(new UserModel
                    {
                        //Username = user.AccessCards.ToString(), -- this maps to the access cards table
                        FirstName        = user.FirstName,
                        LastName         = user.LastName,
                        Email            = user.Email,
                        CellPhone        = user.CellPhone,
                        RegistrationDate = registrationEventLog.CreateDate.ToShortDateString(),
                        SigninDate       = signinEventLog == null ? "Not Logged In" : signinEventLog.CreateDate.ToShortDateString(),
                        SigninTime       = signinEventLog == null ? "Not Logged In" : signinEventLog.CreateDate.ToShortTimeString(),
                    });
                }
                return(students);
            }
        }
        public void LogEvent(int userId, EventType eventType, EventSeverity severity)
        {
            using (var db = new SAMEntities())
            {
                try
                {
                    var eventSeverity        = severity.ToString();
                    var eventTypeDescription = eventType.ToString();
                    var eventTypeId          = eventType.GetEnumValue();

                    var eventLog = new SAM1.EventLog
                    {
                        CreateDate      = DateTime.Now,
                        UserId          = userId,
                        EventSeverityId = (int)severity,
                        MetaData        = metaData,
                        EventTypeId     = eventTypeId,
                    };

                    db.EventLogs.Add(eventLog);
                    db.SaveChanges();
                }
                catch (DbEntityValidationException ex)
                {
                    var errorMessages = ex.EntityValidationErrors
                                        .SelectMany(x => x.ValidationErrors)
                                        .Select(x => x.ErrorMessage + " " + x.PropertyName);

                    var fullErrorMessage = string.Join(" => ", errorMessages);
                    var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
                    throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
                }
            }
        }
Beispiel #5
0
        //WORKS
        internal LogonResponseModel AuthenticateUser(LogonUserModel user)
        {
            var responseModel = new LogonResponseModel();

            //1) Go to the db and get the userId
            using (var db = new SAMEntities())
            {
                var authenticatedAccessCard = db.AccessCards.FirstOrDefault(x => x.UserId == user.UserId);
                var authenticatedUser       = db.Users.FirstOrDefault(x => x.Id == authenticatedAccessCard.UserId);

                bool isAuthenticated = false;
                if (authenticatedAccessCard != null)
                {
                    //2) Go and check the challenge inputted == the stored challenge in the db
                    isAuthenticated = string.Equals(authenticatedUser.AuthenticationCode, user.ChallengeResponse);
                    responseModel.IsAuthenticated = isAuthenticated;
                }

                responseModel.SetAuthenticationUrl(isAuthenticated, authenticatedUser);
                responseModel.SetUserId(authenticatedUser);

                if (!isAuthenticated)
                {
                    responseModel.SetErrorMessage("Invalid username or password");
                    eventLogger.LogEvent(authenticatedUser.Id, CrossCuttingConcerns.EventLog.EventType.User_Authentication, CrossCuttingConcerns.EventLog.EventSeverity.Error);
                }
                else
                {
                    eventLogger.LogEvent(authenticatedUser.Id, CrossCuttingConcerns.EventLog.EventType.User_Authentication, CrossCuttingConcerns.EventLog.EventSeverity.Informational);
                }

                return(responseModel);
            }
        }
Beispiel #6
0
 // GET: Account
 public ActionResult Index()
 {
     using (var db = new SAMEntities())
     {
         return(View(db.Users.ToList()));
     }
 }
Beispiel #7
0
        internal StudentAccessCardModel GetStudentAccessCards()
        {
            var reponseModel = new StudentAccessCardModel();

            using (var data = new SAMEntities())
            {
                var accessCards = data.AccessCards.ToList();

                var accessCardIds         = accessCards.Where(x => x.UserId != null).Select(x => x.UserId).ToList();
                var dataAvailableStudents = data.Users.Where(x => !accessCardIds.Contains(x.Id)).ToList(); // it will be on - the admin

                var availableStudents  = new List <StudentModel>();
                var linkedStudentCards = new List <StudentAccessCard>();

                var linkedStudents = data.Users.Where(x => accessCardIds.Contains(x.Id) && !x.IsAdmin).ToList();
                foreach (var item in linkedStudents)
                {
                    var accessCard = accessCards.FirstOrDefault(x => x.UserId != null && x.UserId == item.Id);
                    linkedStudentCards.Add(new StudentAccessCard
                    {
                        Id       = accessCard.Id,
                        CardId   = accessCard.CardId,
                        LinkDate = accessCard.CreateDate,
                        Student  = new StudentModel
                        {
                            Id        = item.Id,
                            FirstName = item.FirstName,
                            LastName  = item.LastName,
                            Email     = item.Email,
                            CellPhone = item.CellPhone,
                        }
                    });
                }
                reponseModel.LinkedStudentAccessCards = linkedStudentCards;

                foreach (var item in dataAvailableStudents)
                {
                    availableStudents.Add(new StudentModel
                    {
                        Id        = item.Id,
                        FirstName = item.FirstName,
                        LastName  = item.LastName,
                        Email     = item.Email,
                        CellPhone = item.CellPhone
                    });
                }
                reponseModel.AvailableStudents = availableStudents;
            }

            return(reponseModel);
        }
Beispiel #8
0
        //WORKS
        internal string RegisterStudent(UserModel userModel)
        {
            //perform businness rule validation
            // if (success)
            // write data by calling mmethod in Data Access Layer
            using (var db = new SAMEntities())
            {
                try
                {
                    var user = new User
                    {
                        //Username = userModel.Username,

                        FirstName          = userModel.FirstName,
                        LastName           = userModel.LastName,
                        Email              = userModel.Email,
                        CellPhone          = userModel.CellPhone,
                        PasswordHash       = userModel.Password.GenerateHash(),
                        IsAdmin            = userModel.IsAdmin,
                        AuthenticationCode = userModel.AuthenticationCode,
                        RegistrationDate   = DateTime.Now.ToUniversalTime(),
                        Address            = new Address
                        {
                            Complex    = userModel.Address.ComplexNumber,
                            Street     = userModel.Address.Street,
                            Suburb     = userModel.Address.Suburb,
                            City       = userModel.Address.City,
                            PostalCode = Convert.ToInt32(userModel.Address.PostalCode),
                        }
                    };

                    db.Users.Add(user);
                    db.SaveChanges();

                    eventLogger.LogEvent(user.Id, CrossCuttingConcerns.EventLog.EventType.Admin_Register_Student, CrossCuttingConcerns.EventLog.EventSeverity.Informational);

                    return($"{userModel.FirstName} {userModel.LastName} Successfully registered");
                }
                catch (DbEntityValidationException ex)
                {
                    var errorMessages = ex.EntityValidationErrors
                                        .SelectMany(x => x.ValidationErrors)
                                        .Select(x => x.ErrorMessage + " " + x.PropertyName);

                    var fullErrorMessage = string.Join(" => ", errorMessages);
                    var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
                    eventLogger.LogEvent(userModel.AdminUserId, CrossCuttingConcerns.EventLog.EventType.Admin_Register_Student, CrossCuttingConcerns.EventLog.EventSeverity.Error);
                    throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
                }
            }
        }
Beispiel #9
0
        internal StudentModel FindStudent(int studentId)
        {
            using (var db = new SAMEntities())
            {
                var dbStudent = db.Users.FirstOrDefault(x => x.Id == studentId && !x.IsAdmin);

                eventLogger.LogEvent(studentId, CrossCuttingConcerns.EventLog.EventType.User_Find_Student, CrossCuttingConcerns.EventLog.EventSeverity.Informational);

                return(dbStudent == null ? null : new StudentModel
                {
                    Id = dbStudent.Id,
                    FirstName = dbStudent.FirstName,
                    CellPhone = dbStudent.CellPhone,
                    LastName = dbStudent.LastName,
                    Email = dbStudent.Email,
                    //Username = dbStudent.Username,
                });
            }
        }
Beispiel #10
0
        internal string RegisterStudent(UserModel userModel)
        {
            //perform businness rule validation
            // if (success)
            // write data by calling mmethod in Data Access Layer

            using (var db = new SAMEntities())
            {
                try
                {
                    db.Users.Add(new User
                    {
                        Username     = userModel.Username,
                        FirstName    = userModel.FirstName,
                        LastName     = userModel.LastName,
                        Email        = userModel.Email,
                        CellPhone    = userModel.CellPhone,
                        PasswordHash = userModel.Password.GenerateHash(),
                        IsAdmin      = userModel.IsAdmin,
                        Address      = new Address
                        {
                            ComplexNumber = int.Parse(userModel.Address.ComplexNumber),
                            Street        = userModel.Address.Street,
                            Suburb        = userModel.Address.Suburb,
                            City          = userModel.Address.City,
                            PostalCode    = userModel.Address.PostalCode
                        }
                    });
                    db.SaveChanges();
                    return($"{userModel.FirstName} {userModel.LastName} Successfully registered");
                }
                catch (DbEntityValidationException ex)
                {
                    var errorMessages = ex.EntityValidationErrors
                                        .SelectMany(x => x.ValidationErrors)
                                        .Select(x => x.ErrorMessage + " " + x.PropertyName);

                    var fullErrorMessage = string.Join(" => ", errorMessages);
                    var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
                    throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
                }
            }
        }
Beispiel #11
0
        // List of students
        //            if (string.IsNullOrEmpty(studentid))
        //{
        //}
        //else
        //{
        //}
        internal List <UserModel> StudentList(string studentid = "")
        {
            var modeluser = new List <UserModel>();

            using (var db = new SAMEntities())
            {
                var users = db.Users.ToList();

                users.ForEach(user =>
                {
                    modeluser.Add(new UserModel
                    {
                        Username  = user.Username.ToString(),
                        FirstName = user.FirstName,
                        LastName  = user.LastName,
                        Email     = user.Email,
                        CellPhone = user.CellPhone,
                    });
                });
            }
            return(modeluser);
        }
Beispiel #12
0
        //WORKS
        internal LogonResponseModel AuthoriseAccessCard()
        {
            var responseModel = new LogonResponseModel();

            // Read Student UID from Card
            var cardId = GetCardId();

            using (var db = new SAMEntities())
            {
                var scannedCard = db.AccessCards.FirstOrDefault(x => x.CardId == cardId && x.CardType == (int)AccessCardTypes.Administrator);
                if (scannedCard != null)
                {
                    var authorisedUser = db.Users.FirstOrDefault(u => u.Id == scannedCard.UserId && u.IsAdmin);
                    // Authenticate User
                    if (authorisedUser == null)
                    {
                        responseModel.IsAuthorised = false;
                        responseModel.SetErrorMessage("Invalid combination of card and userId");
                        eventLogger.LogEvent(scannedCard.CardId, CrossCuttingConcerns.EventLog.EventType.User_Authentication, CrossCuttingConcerns.EventLog.EventSeverity.Error);
                    }
                    else
                    {
                        responseModel.IsAuthorised = true;
                        responseModel.SetUserId(authorisedUser);
                    }

                    responseModel.SetAuthorisationUrl(responseModel.IsAuthorised, authorisedUser);
                }
                else
                {
                    throw new UnauthorizedAccessException("SAM does not recognize your card!");
                }
            }

            return(responseModel);
        }
Beispiel #13
0
        //Individual records/Details
        //internal UserModel StudentDetail()
        //{

        //    var modeluser = new UserModel();
        //    using (var db = new SAMEntities())
        //    {
        //        var users = db.Users;

        //        users.(user =>
        //        {

        //            modeluser.Add(new UserModel
        //            {
        //                Username = user.Username.ToString(),
        //                FirstName = user.FirstName,
        //                LastName = user.LastName,
        //                Email = user.Email,
        //                CellPhone = user.CellPhone,
        //            });
        //        });
        //    }
        //    return modeluser;
        //}
        internal LogonResponseModel LogOn(LogonUserModel userModel)
        {
            //Step 1 Generate hash for password
            var responseModel = new LogonResponseModel();
            var hash          = userModel.Password.GenerateHash();

            //Step2 : validate against dbHash
            using (var db = new SAMEntities())
            {
                var usr = db.Users.FirstOrDefault(u => u.Username == userModel.Username && u.PasswordHash == hash);
                responseModel.SetRedirectUrl(usr);
                if (usr == null)
                {
                    responseModel.SetErrorMessage("Invalid username or password");
                }
                else
                {
                    responseModel.IsAuthorised = true;
                    responseModel.SetUsername(usr.Username);
                }

                return(responseModel);
            }
        }