コード例 #1
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public void RecoverPassword(string username)
        {
            using (var db = new RAAPMasterEntities())
            {
                var dataUser = db.Users.FirstOrDefault(u => u.Username == username);
                if (dataUser == null)
                {
                    throw new RAAPConflictException("Invalid username!");
                }

                dataUser.NewPasswordGuid = Guid.NewGuid();
                db.SaveChanges();

                var mailMessage = new MailMessage
                {
                    Subject    = "CRMAP - Recover your password",
                    IsBodyHtml = false,
                    Body       = "Hi," + Environment.NewLine + Environment.NewLine +
                                 "To reset your CRMAP password, please use the following link:" + Environment.NewLine +
                                 "https://www.kamude.no/WebClient/changepassword/" + dataUser.NewPasswordGuid + Environment.NewLine +
                                 "" + Environment.NewLine +
                                 "Best regards," + Environment.NewLine +
                                 "CRMAP Team" + Environment.NewLine +
                                 "https://www.kamude.no/"
                };

                mailMessage.To.Add(new MailAddress(dataUser.Email));
                var mailClient = new SmtpClient();
                mailClient.Send(mailMessage);
            }
        }
コード例 #2
0
 public Contracts.Soa.SoaFile GetFile(Guid guid)
 {
     using (var db = new RAAPEntities(GetConnectionString()))
     {
         var dbFile = db.SoaFiles.FirstOrDefault(f => f.Guid == guid);
         Contracts.Soa.SoaFile file = null;
         if (dbFile == null)
         {
             using (var master = new RAAPMasterEntities())
             {
                 dbFile = master.SoaFiles.FirstOrDefault(f => f.Guid == guid);
                 if (dbFile != null)
                 {
                     file          = dbFile.ToContract();
                     file.Template = true;
                 }
             }
         }
         else
         {
             file = dbFile.ToContract();
         }
         return(file);
     }
 }
コード例 #3
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public void ChangePassword(Contracts.User.ChangePassword changePassword)
        {
            using (var db = new RAAPMasterEntities())
            {
                var dataUser = db.Users.FirstOrDefault(u => u.UserId == changePassword.UserId);
                if (dataUser == null)
                {
                    throw new RAAPNotFoundException("Item not found.");
                }

                if (!Common.Security.Password.VerifyHash(dataUser.CreatedOn.Date.Ticks.ToString(), dataUser.PasswordHash, changePassword.Password))
                {
                    throw new RAAPConflictException("Invalid password!");
                }

                if (changePassword.NewPassword != changePassword.NewPasswordRepeat)
                {
                    throw new RAAPConflictException("Passwords it not matching!");
                }

                if (string.IsNullOrEmpty(changePassword.Password) || changePassword.Password.Length < 8)
                {
                    throw new RAAPConflictException("Password must at least be 8 characters.");
                }

                dataUser.PasswordHash = Common.Security.Password.ComputeHash(changePassword.NewPassword, dataUser.CreatedOn.Date.Ticks.ToString());
                db.SaveChanges();
            }
        }
コード例 #4
0
        public void Update(List <Contracts.Soa.SoaChapter> chapters)
        {
            var isoCodes = chapters.Select(c => c.IsoCode).Distinct();

            if (isoCodes.Count() > 1)
            {
                throw new ArgumentException("Multiple IsoCodes", "IsoCode");
            }
            var isoCode = isoCodes.First();

            var types = chapters.Select(c => c.SoaType).Distinct();

            if (types.Count() > 1)
            {
                throw new ArgumentException("Multiple SoA types", "SoaType");
            }
            var type = types.First();

            using (var db = new RAAPMasterEntities())
            {
                //Update existing chapters
                //Delete chapters not in db
                var dbChapters = db.SoaChapters.Where(c => c.SoaType == type).ToDictionary(c => c.Id);
                UpdateSoaChapters(chapters, dbChapters, isoCode);
                db.SoaChapters.RemoveRange(dbChapters.Values);

                //Add new chapters to db
                AddNewSoaChapters(chapters, null, db, isoCode);

                db.SaveChanges();
            }
        }
コード例 #5
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
 public List <SimpleSearchResult> Search(string query, int companyId)
 {
     using (var db = new RAAPMasterEntities())
     {
         if (companyId != 1)
         {
             return(db.Users.Where(u => (u.FirstName.Contains(query) || u.LastName.Contains(query) ||
                                         (u.FirstName + " " + u.LastName).Contains(query)) && u.CompanyId == companyId)
                    .OrderBy(a => a.LastName).ThenBy(a => a.FirstName)
                    .Take(20)
                    .Select(a => new SimpleSearchResult {
                 Id = a.UserId, Name = a.FirstName + " " + a.LastName
             }).ToList());
         }
         else
         {
             return(db.Users.Where(u => u.FirstName.Contains(query) || u.LastName.Contains(query) ||
                                   (u.FirstName + " " + u.LastName).Contains(query))
                    .OrderBy(a => a.LastName).ThenBy(a => a.FirstName)
                    .Take(20)
                    .Select(a => new SimpleSearchResult {
                 Id = a.UserId, Name = a.FirstName + " " + a.LastName
             }).ToList());
         }
     }
 }
コード例 #6
0
 public Contracts.Soa.SoaStatistics GetAssetSoaStatistics(int assetId, int soaType, string isoCode)
 {
     //Return list of items where deadline is in the past, deadline in the future or not implemented
     using (var master = new RAAPMasterEntities())
     {
         var chapterNames = master.SoaChapters.Where(s => s.SoaType == soaType).Select(s => new { ChapterId = s.Id, Name = s.SoaChapterItems.FirstOrDefault(sci => sci.IsoCode == isoCode).Description }).ToDictionary(s => s.ChapterId);
         using (var db = new RAAPEntities(GetConnectionString()))
         {
             var notImplemented = db.Asset_SoaChapter.Where(a => a.AssetId == assetId && !a.Implemented && a.Soa.SoaType == soaType).Select(a => new { SoaId = a.SoaId, ChapterId = a.Soa.SoaChapterId, Deadline = a.Deadline }).ToList();
             var result         = new Contracts.Soa.SoaStatistics()
             {
                 InProgress = notImplemented.Where(n => n.Deadline >= DateTime.Now).Select(n => new Contracts.Soa.SoaStatisticsItem()
                 {
                     Id = n.SoaId, Name = chapterNames[n.ChapterId].Name
                 }).ToList(),
                 DeadlinePassed = notImplemented.Where(n => n.Deadline < DateTime.Now).Select(n => new Contracts.Soa.SoaStatisticsItem()
                 {
                     Id = n.SoaId, Name = chapterNames[n.ChapterId].Name
                 }).ToList(),
                 NotImplemented = notImplemented.Where(n => !n.Deadline.HasValue).Select(n => new Contracts.Soa.SoaStatisticsItem()
                 {
                     Id = n.SoaId, Name = chapterNames[n.ChapterId].Name
                 }).ToList()
             };
             return(result);
         }
     }
 }
コード例 #7
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public static User ToDataModel(this CreateUser create, RAAPMasterEntities db)
        {
            var dataModel = new User
            {
                Email        = create.Email,
                CompanyId    = create.CompanyId,
                FirstName    = create.FirstName,
                LastName     = create.LastName,
                Username     = create.Username,
                CreatedOn    = DateTime.Now,
                UpdatedOn    = DateTime.Now,
                PasswordHash = "TODO",
                Title        = create.Title,
                Phone        = create.Phone,
                Department   = create.Department
            };

            if (create.Roles != null)
            {
                foreach (var role in create.Roles)
                {
                    var roleToAdd = db.Roles.FirstOrDefault(r => r.Role1 == role);
                    dataModel.Roles.Add(roleToAdd);
                }
            }

            return(dataModel);
        }
コード例 #8
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        internal void SetNewPassword(Guid newPasswordGuid, string newPassword, string newPasswordRepeat)
        {
            using (var db = new RAAPMasterEntities())
            {
                var user = db.Users.FirstOrDefault(u => u.NewPasswordGuid == newPasswordGuid);
                if (user == null)
                {
                    throw new RAAPConflictException("Invalid password recovery id!");
                }

                if (string.IsNullOrEmpty(newPassword) || newPassword.Length < 8)
                {
                    throw new RAAPConflictException("Password must at least be 8 characters.");
                }

                if (newPassword != newPasswordRepeat)
                {
                    throw new RAAPConflictException("Passwords don't match! Please repeat your password.");
                }

                user.NewPasswordGuid = null;
                user.PasswordHash    = Common.Security.Password.ComputeHash(newPassword, user.CreatedOn.Date.Ticks.ToString());
                db.SaveChanges();
            }
        }
コード例 #9
0
        public Contracts.Soa.SoaFile AddFile(int soaChapterId, string fileName, bool masterDb = false)
        {
            fileName = Path.GetFileName(fileName);
            var dbFile = new SoaFile()
            {
                SoaChapterId = soaChapterId,
                FileName     = fileName,
                Guid         = Guid.NewGuid()
            };

            if (masterDb)
            {
                using (var db = new RAAPMasterEntities())
                {
                    db.SoaFiles.Add(dbFile);
                    db.SaveChanges();
                    return(dbFile.ToContract());
                }
            }
            else
            {
                using (var db = new RAAPEntities(GetConnectionString()))
                {
                    db.SoaFiles.Add(dbFile);
                    db.SaveChanges();
                    return(dbFile.ToContract());
                }
            }
        }
コード例 #10
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public IdentityUser GetIdentityUserByLogin(string username, string password)
        {
            try
            {
                using (var db = new RAAPMasterEntities())
                {
                    var user = db.Users.Include("Roles").FirstOrDefault(u => u.Username == username);
                    if (user == null)
                    {
                        return(null);
                    }

                    if (
                        !Common.Security.Password.VerifyHash(user.CreatedOn.Date.Ticks.ToString(), user.PasswordHash,
                                                             password))
                    {
                        return(null);
                    }

                    return(user.Convert());
                }
            }
            catch (Exception exception)
            {
                throw;
            }
        }
コード例 #11
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public Contracts.User.User Update(Contracts.User.UpdateUser update)
        {
            using (var db = new RAAPMasterEntities())
            {
                var user = db.Users.FirstOrDefault(u => u.UserId == update.UserId);
                if (user == null)
                {
                    throw new RAAPNotFoundException("Item not found.");
                }

                if (db.Users.Any(a => a.Email == update.Email && a.UserId != update.UserId))
                {
                    throw new RAAPConflictException("Email is already in use!");
                }

                if (db.Users.Any(a => a.Username == update.Username && a.UserId != update.UserId))
                {
                    throw new RAAPConflictException("Username is already in use!");
                }

                user.ApplyUpdate(update);
                user.Roles.Clear();
                db.SaveChanges();

                foreach (var role in update.Roles)
                {
                    var roleToAdd = db.Roles.FirstOrDefault(r => r.Role1 == role);
                    roleToAdd.Users.Add(user);
                }

                db.SaveChanges();

                return(user.ToContract(true));
            }
        }
コード例 #12
0
        private static Dictionary <int, Contracts.Soa.SoaChapter> GetChapters(RAAPMasterEntities dbMaster, int type, string isoCode)
        {
            var chapters =
                dbMaster.SoaChapters.Where(c => c.SoaType == type).OrderBy(s => s.Id).AsEnumerable().Select(s => s.ToContract(isoCode)).ToDictionary(s => s.Id);

            chapters.Values.Where(c => c.ParentId.HasValue).ForEach(c => chapters[c.ParentId.Value].SubChapters.Add(c));
            dbMaster.SoaFiles.Where(f => chapters.Keys.Contains(f.SoaChapterId)).ForEach(f => chapters[f.SoaChapterId].Files.Add(new Contracts.Soa.SoaFile(f.FileName, f.SoaChapterId, f.Guid, true)));
            return(chapters);
        }
コード例 #13
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
 public List <Contracts.Language.Language> GetAvailableLanguages()
 {
     using (var db = new RAAPMasterEntities())
     {
         return(db.Languages.OrderBy(l => l.Name).Select(l => new Contracts.Language.Language
         {
             Name = l.Name,
             IsoCode = l.IsoCode
         }).ToList());
     }
 }
コード例 #14
0
 public List <SimpleSearchResult> Search(string query)
 {
     using (var db = new RAAPMasterEntities())
     {
         return(db.Companies.Where(a => a.Name.Contains(query))
                .OrderBy(a => a.Name)
                .Take(20)
                .Select(a => new SimpleSearchResult {
             Id = a.CompanyId, Name = a.Name
         }).ToList());
     }
 }
コード例 #15
0
        public Contracts.Help.HelpEntry Get(int helpId)
        {
            using (var db = new RAAPMasterEntities())
            {
                var dbItem = db.Helps.FirstOrDefault(h => h.HelpId == helpId);
                if (dbItem == null)
                {
                    return(null);
                }

                return(dbItem.ToContract());
            }
        }
コード例 #16
0
        public Contracts.Company.Company GetSingle(int id)
        {
            using (var db = new RAAPMasterEntities())
            {
                var item = db.Companies.FirstOrDefault(c => c.CompanyId == id);
                if (item == null)
                {
                    throw new RAAPNotFoundException("Item not found.");
                }

                return(item.ToContract());
            }
        }
コード例 #17
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public bool IsEmailAvailable(string email)
        {
            if (string.IsNullOrEmpty(email) || email.Length < 2)
            {
                return(false);
            }

            using (var db = new RAAPMasterEntities())
            {
                var dbUser = db.Users.Any(u => u.Email == email);
                return(!dbUser);
            }
        }
コード例 #18
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public bool IsUsernameAvailable(string username)
        {
            if (string.IsNullOrEmpty(username) || username.Length < 2)
            {
                return(false);
            }

            using (var db = new RAAPMasterEntities())
            {
                var dbUser = db.Users.Any(u => u.Username == username);
                return(!dbUser);
            }
        }
コード例 #19
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
 public void Delete(int id)
 {
     using (var db = new RAAPMasterEntities())
     {
         var user = db.Users.FirstOrDefault(a => a.UserId == id);
         if (user == null)
         {
             throw new RAAPNotFoundException("Item not found.");
         }
         user.Roles.Clear();
         db.Users.Remove(user);
         db.SaveChanges();
     }
 }
コード例 #20
0
 public IEnumerable <Contracts.Soa.SoaChapter> Get(int type, string isoCode)
 {
     using (var db = new RAAPMasterEntities())
     {
         try
         {
             return(GetChapters(db, type, isoCode).Values.Where(c => !c.ParentId.HasValue));
         }
         catch (Exception exception)
         {
             throw;
         }
     }
 }
コード例 #21
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public void UpdateProfileImage(int userId, byte[] image, string contentType)
        {
            using (var db = new RAAPMasterEntities())
            {
                var dbUser = db.Users.FirstOrDefault(u => u.UserId == userId);
                if (dbUser == null)
                {
                    throw new RAAPNotFoundException("Item not found.");
                }

                dbUser.ProfileImage         = image;
                dbUser.ProfileImageFiletype = contentType;

                db.SaveChanges();
            }
        }
コード例 #22
0
        public Contracts.Help.HelpEntry GetBySlug(string slug, string language)
        {
            using (var db = new RAAPMasterEntities())
            {
                var dbItem = db.Helps.FirstOrDefault(h => h.Slug == slug && h.Language == language);
                if (dbItem == null)
                {
                    return new Contracts.Help.HelpEntry {
                               Slug = slug, Language = language
                    }
                }
                ;

                return(dbItem.ToContract());
            }
        }
コード例 #23
0
        public Contracts.Help.HelpEntry Create(Contracts.Help.CreateHelpEntry create)
        {
            using (var db = new RAAPMasterEntities())
            {
                if (db.Helps.Any(a => a.Slug == create.Slug && a.Language == create.Language))
                {
                    throw new RAAPConflictException("Slug & language combination is already in use!");
                }

                var help = create.ToDataModel();
                db.Helps.Add(help);
                db.SaveChanges();

                return(db.Helps.FirstOrDefault(u => u.HelpId == help.HelpId).ToContract());
            }
        }
コード例 #24
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public Contracts.User.User Create(CreateUser create)
        {
            try
            {
                using (var db = new RAAPMasterEntities())
                {
                    if (db.Users.Any(a => a.Email == create.Email))
                    {
                        throw new RAAPConflictException("Email is already in use!");
                    }

                    if (db.Users.Any(a => a.Username == create.Username))
                    {
                        throw new RAAPConflictException("Username is already in use!");
                    }

                    if (string.IsNullOrEmpty(create.Password) || create.Password.Length < 4)
                    {
                        throw new RAAPConflictException("Password must at least be 4 characters.");
                    }

                    if (create.Password != create.PasswordRepeat)
                    {
                        throw new RAAPConflictException("Please repeat your password correctly.");
                    }


                    var user = create.ToDataModel(db);
                    user.PasswordHash = Common.Security.Password.ComputeHash(create.Password,
                                                                             user.CreatedOn.Date.Ticks.ToString());

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

                    // add default role to all users
                    //var sysadminRole = db.Roles.FirstOrDefault(r => r.Role1 == "SystemAdministrator");
                    //sysadminRole.Users.Add(user);
                    db.SaveChanges();

                    return(db.Users.Include("Company").FirstOrDefault(u => u.UserId == user.UserId).ToContract(true));
                }
            }
            catch (Exception exception)
            {
                throw;
            }
        }
コード例 #25
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public ProfileImage GetProfileImage(int userId)
        {
            using (var db = new RAAPMasterEntities())
            {
                var dbUser = db.Users.FirstOrDefault(u => u.UserId == userId);
                if (dbUser == null)
                {
                    throw new RAAPNotFoundException("Item not found.");
                }

                return(new ProfileImage
                {
                    ContentType = dbUser.ProfileImageFiletype,
                    Image = dbUser.ProfileImage
                });
            }
        }
コード例 #26
0
        public ProfileImage GetProfileImage(int companyId)
        {
            using (var db = new RAAPMasterEntities())
            {
                var item = db.Companies.FirstOrDefault(u => u.CompanyId == companyId);
                if (item == null)
                {
                    throw new RAAPNotFoundException("Item not found.");
                }

                return(new ProfileImage
                {
                    ContentType = item.ProfileImageFiletype,
                    Image = item.ProfileImage
                });
            }
        }
コード例 #27
0
 internal List <Contracts.Asset.AssetSoaList> GetAssetSoas(int assetId, string isoCode)
 {
     using (var master = new RAAPMasterEntities())
     {
         var chapterNames = master.SoaChapters.Where(s => s.SoaType != 2).Select(s => new { ChapterId = s.Id, Name = s.SoaChapterItems.FirstOrDefault(sci => sci.IsoCode == isoCode).Description }).ToDictionary(s => s.ChapterId);
         using (var db = new RAAPEntities(GetConnectionString()))
         {
             var relevantSoas   = db.Soas.Where(s => s.Relevance && s.SoaType != 2).Select(s => new { SoaId = s.SoaId, SoaType = s.SoaType, ChapterId = s.SoaChapterId }).ToDictionary(s => s.SoaId);
             var registeredSoas = db.Asset_SoaChapter.Where(s => s.AssetId == assetId).ToDictionary(s => s.SoaId);
             var soas           = relevantSoas.Select(r => ConvertToDataContract(registeredSoas.ContainsKey(r.Key) ? registeredSoas[r.Key] : null, r.Key, r.Value.SoaType, chapterNames[r.Value.ChapterId].Name)).ToLookup(s => s.SoaType);
             var result         = new List <Contracts.Asset.AssetSoaList>();
             soas.ForEach(i => result.Add(new Contracts.Asset.AssetSoaList()
             {
                 AssetId = assetId, SoaType = i.Key, AssetSoas = i.ToList()
             }));
             return(result);
         }
     }
 }
コード例 #28
0
        public void Delete(int id)
        {
            using (var db = new RAAPMasterEntities())
            {
                var company = db.Companies.FirstOrDefault(a => a.CompanyId == id);
                if (company == null)
                {
                    throw new RAAPNotFoundException("Item not found.");
                }

                if (company.Users.Any())
                {
                    throw new RAAPConflictException("You must remove connected users before you delete this company");
                }

                db.Companies.Remove(company);
                db.SaveChanges();
            }
        }
コード例 #29
0
ファイル: UserService.cs プロジェクト: lulzzz/RiskAssessment
        public void SetPassword(SetPassword setPassword)
        {
            using (var db = new RAAPMasterEntities())
            {
                var dataUser = db.Users.FirstOrDefault(u => u.UserId == setPassword.UserId);
                if (dataUser == null)
                {
                    throw new RAAPNotFoundException("Item not found.");
                }

                if (string.IsNullOrEmpty(setPassword.Password) || setPassword.Password.Length < 4)
                {
                    throw new RAAPConflictException("Password must at least be 4 characters.");
                }

                dataUser.PasswordHash = Common.Security.Password.ComputeHash(setPassword.Password, dataUser.CreatedOn.Date.Ticks.ToString());
                db.SaveChanges();
            }
        }
コード例 #30
0
        internal Contracts.Soa.SoaChapter AddTemplate(Contracts.Soa.SoaChapter soa)
        {
            var isoCode = soa.IsoCode;

            if (soa.SoaType == 3)
            {
                using (var db = new RAAPMasterEntities())
                {
                    var chapter = soa.ToDataModel(null, db, isoCode);
                    db.SoaChapters.Add(chapter);
                    db.SaveChanges();
                    return(chapter.ToContract(isoCode));
                }
            }
            else
            {
                throw new ArgumentException("Invalid SoaType", "SoaType");
            }
        }