Ejemplo n.º 1
0
        public ActionResult SendingSystem()
        {
            MailsViewModel model = new MailsViewModel();

            model.SendingSystems = mng.Mails.GetSendingSystems();
            return(View(model));
        }
Ejemplo n.º 2
0
        public JsonResult NotifyPortalDown(string institution, string ip, string mailReceiver)
        {
            institution  = institution ?? "";
            ip           = ip ?? "";
            mailReceiver = mailReceiver ?? "";

            try
            {
                var emailContent = new MailsViewModel
                {
                    Code       = institution,
                    Email      = mailReceiver,
                    MailMethod = MailSendMethod.PortalDown,
                    Subject    = $"{institution} portal is inaccessible",
                    PortalUrl  = ip
                };

                var emailResponse = emailSender.SendEmail(emailContent);
                _context.InaccessibiltyLog.Add(new InaccessibiltyLog
                {
                    Ip           = ip,
                    Institution  = institution,
                    MailReceiver = mailReceiver,
                    DateCreated  = DateTime.UtcNow.AddHours(3)
                });

                _context.SaveChanges();
                return(Json(""));
            }
            catch (Exception ex)
            {
                return(Json(""));
            }
        }
Ejemplo n.º 3
0
        public ActionResult MailStatuses()
        {
            MailsViewModel model = new MailsViewModel();

            model.mailStatuses = mng.Mails.GetMailStatuses();
            return(View(model));
        }
Ejemplo n.º 4
0
        private void NotifyPortalDown(ClientIp ip)
        {
            var mailReceiver = "*****@*****.**";

            try
            {
                var emailContent = new MailsViewModel
                {
                    Code       = ip.Institution,
                    Email      = mailReceiver,
                    MailMethod = MailSendMethod.PortalDown,
                    Subject    = $"{ip.Institution} portal is inaccessible",
                    PortalUrl  = ip.Ip
                };

                var emailResponse = emailSender.SendEmail(emailContent);
                _context.InaccessibiltyLog.Add(new InaccessibiltyLog
                {
                    Ip           = ip.Ip,
                    Institution  = ip.Institution,
                    MailReceiver = mailReceiver,
                    DateCreated  = DateTime.UtcNow.AddHours(3)
                });
            }
            catch (Exception)
            {
            }
        }
Ejemplo n.º 5
0
        public ActionResult Mails()
        {
            MailsViewModel model = new MailsViewModel();

            model.System   = mng.Mail.GetSystems();
            model.Statuses = mng.Mail.GetStatuses();
            return(View(model));
        }
Ejemplo n.º 6
0
        public bool SendEmail(MailsViewModel mailsViewModel)
        {
            try
            {
                mailsViewModel.Email = string.IsNullOrEmpty(_configuration["RegTestEmail:EmailAddress"]) ? mailsViewModel.Email : _configuration["RegTestEmail:EmailAddress"];
                var emailAddress = new EmailAddress
                {
                    Name    = mailsViewModel.Firstname + "<" + mailsViewModel.UserCode + ">",
                    Address = mailsViewModel.Email
                };

                var UnisolPortalUrl  = mailsViewModel.PortalUrl;
                var varificationLink = $"{UnisolPortalUrl}/login/confirm/{mailsViewModel.Code}";
                if (mailsViewModel.MailMethod == MailSendMethod.PasswordReset)
                {
                    varificationLink = $"{UnisolPortalUrl}/login/reset-password/{mailsViewModel.Code}";
                }

                var emailSettings = _context.Settings.FirstOrDefault();
                var address       = new EmailAddress
                {
                    Name    = emailSettings == null ? _configuration["Settings:DefaultInstitutionName"] : emailSettings.Name,
                    Address = emailSettings == null ? _configuration["RegTestEmail:EmailAddress"] : emailSettings.EmailUserName
                };

                address = emailSettings == null ? _emailConfiguration.SmtpFromName : address;

                var logoUrl       = emailSettings.LogoImageUrl.Split("/");
                var assetUrl      = Path.Combine(_env.WebRootPath, logoUrl[1]);
                var imageFlderUrl = Path.Combine(assetUrl, logoUrl[2]);
                var logoImageUrl  = Path.Combine(imageFlderUrl, logoUrl[3]);

                var emailMessage = new EmailMessage
                {
                    ToAddresses = new List <EmailAddress> {
                        emailAddress
                    },
                    Content       = getMailMessage(mailsViewModel.Firstname, varificationLink, mailsViewModel.Code, address, mailsViewModel.MailMethod),
                    Subject       = mailsViewModel.Subject,
                    FromAddresses = new List <EmailAddress> {
                        address
                    },
                    InstitutionLogo = logoImageUrl
                };

                var interfaceResponse = _emailService.Send(emailMessage, emailSettings);
                return(interfaceResponse.Result);
            }
            catch (Exception ex)
            {
                logger.Error($"\t EmailConfigurationError: \t {ex}");
                return(false);
            }
        }
Ejemplo n.º 7
0
        private JsonResult CreateAdminUser(RegisterViewModel request)
        {
            try
            {
                var adminCheck = _context.Users.FirstOrDefault(u => u.UserName == request.RegNumber);
                if (adminCheck != null)
                {
                    if (adminCheck.UserName == request.RegNumber)
                    {
                        return(Json(new ReturnData <HrpEmployee>
                        {
                            Success = false,
                            Message = "Please user a different username"
                        }));
                    }

                    if (adminCheck.Email == request.Email)
                    {
                        return(Json(new ReturnData <HrpEmployee>
                        {
                            Success = false,
                            Message = "Please user a different email address"
                        }));
                    }
                }

                var user = new User
                {
                    Email        = request.Email,
                    UserName     = request.RegNumber,
                    Code         = Guid.NewGuid().ToString(),
                    UserGroupsId = request.UserGroup,
                    Role         = Role.Admin
                };

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

                mailMethod = MailSendMethod.AccountConfirmation;
                var subject      = "Account Creation";
                var emailContent = new MailsViewModel
                {
                    UserCode   = user.UserName,
                    Firstname  = request.Email,
                    Code       = user.Code,
                    Email      = request.Email,
                    PortalUrl  = request.PortalUrl,
                    MailMethod = mailMethod,
                    Subject    = subject
                };
                var success = emailSender.SendEmail(emailContent);
                var msg     = "Account created successfully. ";
                return(Json(new ReturnData <bool>
                {
                    Success = success,
                    Message = success ? msg + "Check email inbox" : msg
                }));
            }
            catch (Exception ex)
            {
                return(Json(new ReturnData <bool>
                {
                    Success = false,
                    Message = ex.Message
                }));
            }
        }
Ejemplo n.º 8
0
        public JsonResult ResetPassword(RegisterViewModel request)
        {
            request.Password = request.Password ?? "";
            var requiredFields = new List <Tuple <string, string, DataType> >
            {
                Tuple.Create("username", request.RegNumber, DataType.Default),
            };

            var validUserInputs = _validateService.Validate(requiredFields);

            if (!validUserInputs.Valid)
            {
                return(Json(new ReturnData <string>
                {
                    Message = validUserInputs.Errors,
                    Success = validUserInputs.Valid
                }));
            }

            try
            {
                var registeredUser = _context.Users.FirstOrDefault(u => (u.UserName.ToUpper().Equals(request.RegNumber.ToUpper())) || (u.Code.ToString() == request.RegNumber) || (u.Id.ToString() == request.RegNumber));
                if (registeredUser == null)
                {
                    return(Json(new ReturnData <string>
                    {
                        Success = false,
                        Message = "Username not found"
                    }));
                }

                if (string.IsNullOrEmpty(registeredUser.UserName))
                {
                    return(Json(new ReturnData <string>
                    {
                        Success = false,
                        Message = "Username not found"
                    }));
                }

                registeredUser.PasswordHash = registeredUser.PasswordHash ?? "";
                var hashedNewPassword = SecurePasswordHasher.Hash(request.Password);
                if (hashedNewPassword.ToUpper().Equals(registeredUser.PasswordHash.ToUpper()))
                {
                    return(Json(new ReturnData <string>
                    {
                        Success = false,
                        Message = "Kindly use a different password from the previous"
                    }));
                }

                var userResetPassword = new UserResetPassword();

                if ((request.Role == Role.Admin) || (request.Role == Role.All))
                {
                    userResetPassword             = _context.UserResetPasswords.FirstOrDefault(u => u.UserId == registeredUser.Id && u.Status == false);
                    registeredUser.PasswordHash   = SecurePasswordHasher.Hash(request.Password);
                    registeredUser.EmailConfirmed = true;
                    registeredUser.Status         = true;
                    if (userResetPassword != null)
                    {
                        userResetPassword.Status = true;
                        _context.Update(userResetPassword);
                    }

                    _context.Update(registeredUser);
                    _context.SaveChanges();

                    return(Json(new ReturnData <string>
                    {
                        Success = true,
                        Message = "Password reset successful"
                    }));
                }

                userResetPassword = new UserResetPassword
                {
                    UserId      = registeredUser.Id,
                    ResetCode   = Guid.NewGuid().ToString(),
                    DateCreated = DateTime.Now,
                    Status      = false
                };
                var success = false;

                var userGroup = _context.UserGroups.FirstOrDefault(u => u.Id == registeredUser.UserGroupsId);

                mailMethod = MailSendMethod.PasswordReset;
                var subject = "Reset Account Password";
                if (userGroup?.Role == Role.Student)
                {
                    var classStatus  = _context.Settings.FirstOrDefault()?.ClassStatus;
                    var result       = _unisolApiProxy.CheckStudentExists(request.RegNumber, classStatus).Result;
                    var jdata        = new ProcessJsonReturnResults <UserDetails>(result).UnisolApiData;
                    var emailContent = new MailsViewModel {
                        UserCode   = request.RegNumber,
                        Firstname  = jdata.Data.Names,
                        Code       = userResetPassword.ResetCode,
                        Email      = registeredUser.Email,
                        MailMethod = mailMethod,
                        PortalUrl  = request.PortalUrl,
                        Subject    = subject
                    };
                    success = emailSender.SendEmail(emailContent);
                }
                if (userGroup?.Role == Role.Staff)
                {
                    var result       = _unisolApiProxy.CheckEmployeeExists(request.RegNumber).Result;
                    var jdata        = JsonConvert.DeserializeObject <ReturnData <HrpEmployee> >(result);
                    var emailContent = new MailsViewModel
                    {
                        UserCode   = request.RegNumber,
                        Firstname  = jdata.Data.Names,
                        PortalUrl  = request.PortalUrl,
                        Code       = userResetPassword.ResetCode,
                        Email      = registeredUser.Email,
                        MailMethod = mailMethod,
                        Subject    = subject
                    };
                    success = emailSender.SendEmail(emailContent);
                }

                if (success)
                {
                    registeredUser.Code = userResetPassword.ResetCode;
                    _context.SaveChanges();

                    var email = registeredUser.Email.Split('@');
                    return(Json(new ReturnData <bool>
                    {
                        Success = true,
                        Message = $"We have sent a link to reset your password, please check your email ({email[0].Substring(0, 1)}*****{email[0].Substring(email[0].Length - 2)}@{email[1]})."
                    }));
                }
                return(Json(new ReturnData <bool>
                {
                    Success = false,
                    Message = "There was a problem while trying reset your password, please contact admin"
                }));
            }
            catch (Exception ex)
            {
                return(Json(new ReturnData <string>
                {
                    Success = false,
                    Message = "Something went wrong, please try again after sometime.",
                    Error = new Error(ex)
                }));
            }
        }
Ejemplo n.º 9
0
        private ReturnData <bool> CreateStaffUser(RegisterViewModel request, bool isAdmin, bool isTest)
        {
            var result = _unisolApiProxy.CheckEmployeeExists(request.RegNumber).Result;
            var jdata  = JsonConvert.DeserializeObject <ReturnData <HrpEmployee> >(result);

            if (!jdata.Success)
            {
                return new ReturnData <bool>
                       {
                           Success = false,
                           Message = jdata.Message
                       }
            }
            ;

            var defaultStaffGroup = _context.UserGroups.FirstOrDefault(u => u.Status && u.IsDefault && u.Role == Role.Staff);

            if (defaultStaffGroup == null)
            {
                logger.Error($"UserRegistrationDefaultStaffGroup: \t Students default group not set");

                return(new ReturnData <bool>
                {
                    Success = false,
                    Message = "There was a problem while creating your account, please contact admin"
                });
            }

            var groupId  = string.IsNullOrEmpty(request.UserGroup.ToString()) || request.UserGroup < 1 ? defaultStaffGroup.Id : request.UserGroup;
            var register = jdata.Data;
            var user     = new User
            {
                UserName       = request.RegNumber,
                Email          = register.Wemail,
                UserGroupsId   = groupId,
                Code           = Guid.NewGuid().ToString(),
                EmailConfirmed = isAdmin,
                Role           = Role.Staff,
                PasswordHash   = SecurePasswordHasher.Hash(request.Password)
            };

            if (!isAdmin)
            {
                groupId = defaultStaffGroup.Id;

                mailMethod = MailSendMethod.AccountConfirmation;
                var subject      = "Account Creation";
                var emailContent = new MailsViewModel
                {
                    UserCode   = request.RegNumber,
                    Firstname  = register.Names,
                    Code       = user.Code,
                    Email      = register.Wemail,
                    MailMethod = mailMethod,
                    Subject    = subject,
                    PortalUrl  = request.PortalUrl
                };
                var success = emailSender.SendEmail(emailContent);
                if (!success)
                {
                    return new ReturnData <bool>
                           {
                               Success = false,
                               Message = "A problem occurred while sending an email for account creation, please contact admin"
                           }
                }
                ;
            }

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

            return(new ReturnData <bool>
            {
                Success = true,
                Message = "Account created successfully"
            });
        }
Ejemplo n.º 10
0
        private ReturnData <bool> CreateStudentUser(RegisterViewModel request, bool isAdmin, bool isTest)
        {
            var classStatus = _context.Settings.FirstOrDefault()?.ClassStatus ?? "Active";
            var result      = _unisolApiProxy.CheckStudentExists(request.RegNumber, classStatus).Result;
            var jdata       = new ProcessJsonReturnResults <Register>(result).UnisolApiData;

            if (!jdata.Success)
            {
                return new ReturnData <bool>
                       {
                           Success = false,
                           Message = jdata.Message
                       }
            }
            ;

            var defaultStudentGroup = _context.UserGroups.FirstOrDefault(u => u.Status && u.IsDefault && u.Role == Role.Student);

            if (defaultStudentGroup == null)
            {
                logger.Error($"UserRegistrationDefaultStudentGroup: \t Students default group not set");

                return(new ReturnData <bool>
                {
                    Success = false,
                    Message = "There was a problem while creating your account, please contact admin"
                });
            }

            var groupId           = request.UserGroup == 0 ? defaultStudentGroup.Id : request.UserGroup;
            var register          = jdata.Data;
            var passwordConfirmed = isAdmin ? true : false;
            var user = new User
            {
                UserName       = request.RegNumber,
                Email          = register.Email,
                UserGroupsId   = groupId,
                Code           = Guid.NewGuid().ToString(),
                EmailConfirmed = passwordConfirmed,
                Status         = passwordConfirmed,
                Role           = Role.Student,
                PasswordHash   = SecurePasswordHasher.Hash(request.Password)
            };

            if (!isAdmin)
            {
                groupId    = defaultStudentGroup.Id;
                mailMethod = MailSendMethod.AccountConfirmation;
                var subject = "Account Creation";
                if (!isTest)
                {
                    var emailContent = new MailsViewModel
                    {
                        UserCode   = request.RegNumber,
                        Firstname  = register.Names,
                        Code       = user.Code,
                        Email      = register.Email,
                        MailMethod = mailMethod,
                        Subject    = subject,
                        PortalUrl  = request.PortalUrl
                    };
                    var emailResponse = emailSender.SendEmail(emailContent);
                    if (!emailResponse)
                    {
                        return new ReturnData <bool>
                               {
                                   Success = false,
                                   Message = "Sorry, an error has been encountered while sending an email. Kindly contact admin"
                               }
                    }
                    ;
                }
            }

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

            return(new ReturnData <bool>
            {
                Success = true,
                Message = "Account created successfully"
            });
        }
Ejemplo n.º 11
0
        public JsonResult AddNews(NewsViewModel newsViewModel, string userCode)
        {
            try
            {
                var token = _tokenValidator.Validate(HttpContext);
                if (!token.Success)
                {
                    return(Json(new ReturnData <string>
                    {
                        Success = false,
                        NotAuthenticated = true,
                        Message = $"Unauthorized:-{token.Message}",
                    }));
                }

                if (token.Role == Role.Student)
                {
                    return(Json(new ReturnData <string>
                    {
                        Success = false,
                        NotAuthenticated = true,
                        Message = "Sorry, you are not authorized to perform this action",
                    }));
                }

                newsViewModel.DateCreated = DateTime.UtcNow;
                var portalNewsTypes = _context.PortalNewsTypes.Any();
                var message         = portalNewsTypes ? "Please select news category" : "Please create news category";
                if (newsViewModel.PortalNewsTypeId == 0)
                {
                    return(Json(new ReturnData <string>
                    {
                        Success = false,
                        Message = message
                    }));
                }

                if (string.IsNullOrEmpty(newsViewModel.NewsBody))
                {
                    return(Json(new ReturnData <string>
                    {
                        Success = false,
                        Message = "Message can not be empty"
                    }));
                }

                var creator = _context.Users.FirstOrDefault(u => u.UserName == userCode);
                var news    = new PortalNews
                {
                    NewsBody         = newsViewModel.NewsBody,
                    DateCreated      = newsViewModel.DateCreated,
                    ExpiryDate       = newsViewModel.ExpiryDate,
                    NewsStatus       = newsViewModel.NewsStatus,
                    NewsTitle        = newsViewModel.NewsTitle,
                    PortalNewsTypeId = newsViewModel.PortalNewsTypeId,
                    SendEmailFlag    = newsViewModel.SendEmailFlag,
                    TargetAudience   = newsViewModel.TargetAudience,
                    CreatorId        = creator.Id,
                    TargetGroups     = newsViewModel.TargetGroups
                };

                if (newsViewModel.Id.HasValue && newsViewModel.Id.Value > 0)
                {
                    _context.PortalNews.Update(news);
                }
                else
                {
                    _context.PortalNews.Add(news);
                }

                if (newsViewModel.SendEmailFlag)
                {
                    //int[] groupIds = newsViewModel.TargetAudience.Split(',').Select(s => int.TryParse(s, out int n) ? n : 0).ToArray();
                    var users = _context.Users.Where(u => u.UserGroupsId == newsViewModel.TargetAudience).ToList();
                    foreach (var user in users)
                    {
                        var emailContent = new MailsViewModel
                        {
                            UserCode   = user.UserName,
                            Firstname  = "",
                            Code       = newsViewModel.NewsBody,
                            Email      = user.Email,
                            MailMethod = MailSendMethod.NewsPosting,
                            PortalUrl  = newsViewModel.portalUrl,
                            Subject    = newsViewModel.NewsTitle
                        };

                        emailSender.SendEmail(emailContent);
                    }
                }

                _context.SaveChanges();

                return(Json(new ReturnData <string>
                {
                    Success = true,
                    Message = "Successful"
                }));
            }
            catch (Exception ex)
            {
                return(Json(new ReturnData <string>
                {
                    Success = false,
                    Message = "An error occurred,please retry : " + ex.Message
                }));
            }
        }
Ejemplo n.º 12
0
        public JsonResult AddEvents(EventsViewModel eventsViewModel)
        {
            eventsViewModel.EventStartDate = eventsViewModel.EventStartDate.AddDays(1);
            eventsViewModel.EventEndDate   = eventsViewModel.EventEndDate.AddDays(1);
            var token = _tokenValidator.Validate(HttpContext);

            if (!token.Success)
            {
                return(Json(new ReturnData <string>
                {
                    Success = false,
                    NotAuthenticated = true,
                    Message = $"Unauthorized:-{token.Message}",
                }));
            }

            if (token.Role == Role.Student || token.Role == Role.Applicant)
            {
                return(Json(new ReturnData <string>
                {
                    Success = false,
                    NotAuthenticated = true,
                    Message = "Sorry, you are not authorized to access this page",
                }));
            }

            var typeId = eventsViewModel.portalEventsTypeId ?? 0;

            eventsViewModel.DateCreated = DateTime.UtcNow;
            if (typeId == 0)
            {
                return(Json(new ReturnData <string>
                {
                    Success = false,
                    Message = "Please select event category"
                }));
            }

            try
            {
                var events = new PortalEvents
                {
                    EventTitle        = eventsViewModel?.EventTitle ?? "",
                    EventDesc         = eventsViewModel?.EventDesc ?? "",
                    CreatedBy         = eventsViewModel.CreatedBy,
                    DateCreated       = eventsViewModel.DateCreated,
                    EventStartDate    = eventsViewModel.EventStartDate,
                    EventEndDate      = eventsViewModel.EventEndDate,
                    SendEmailFlag     = eventsViewModel.SendEmailFlag,
                    TargetAudience    = eventsViewModel.TargetAudience,
                    PortalEventTypeId = eventsViewModel.portalEventsTypeId,
                    EventVenue        = eventsViewModel?.EventVenue ?? "",
                    TargetGroups      = eventsViewModel?.TargetGroups ?? "",
                    Campus            = eventsViewModel?.Campus ?? "",
                    Department        = eventsViewModel?.Department ?? "",
                    School            = eventsViewModel?.School ?? "",
                    YearOfStudy       = eventsViewModel?.YearOfStudy ?? ""
                };

                if (eventsViewModel.Id.HasValue && eventsViewModel.Id.Value > 0)
                {
                    events.Id = events.Id;
                    _context.PortalEvents.Update(events);
                }
                else
                {
                    _context.PortalEvents.Add(events);
                }

                if (eventsViewModel.SendEmailFlag)
                {
                    var users = _context.Users.Where(u => u.UserGroupsId == eventsViewModel.TargetAudience).ToList();
                    foreach (var user in users)
                    {
                        var emailContent = new MailsViewModel
                        {
                            UserCode   = user?.UserName ?? "",
                            Firstname  = "",
                            Code       = eventsViewModel?.EventDesc ?? "",
                            Email      = user.Email,
                            MailMethod = MailSendMethod.EventPosting,
                            PortalUrl  = eventsViewModel?.PortalUrl ?? "",
                            Subject    = eventsViewModel?.EventTitle ?? ""
                        };

                        emailSender.SendEmail(emailContent);
                    }
                }

                _context.SaveChanges();

                return(Json(new ReturnData <string>
                {
                    Success = true,
                    Message = "Successful"
                }));
            }
            catch (Exception ex)
            {
                return(Json(new ReturnData <string>
                {
                    Success = false,
                    Message = "An error occurred,please retry : " + ex.Message
                }));
            }
        }