public void UserActivationNotActivated()
        {
            const string testUserid = "testuser";
            var testUser = new AuthUser()
                               {
                                   Id = testUserid,
                                   ActivationCode = "sasa"
                               };
            
            using (var session = MasterStore.OpenSession())
            {
                session.Store(testUser);
                session.SaveChanges();
            }
            //ARRANGE
            var controller = GetAuthenticatedControllerMock<AdministrationController>(Orguser);

            //set controller context. 
            controller.ControllerContext = new ControllerContext(GetContext(false), new RouteData(), controller);

            var result = controller.ActivationForEmployee(testUserid);
            var jsonresponse = ValidateAndUnwrapJsonResult(result);

            dynamic data = jsonresponse.Data.ToDynamic();
            Assert.IsFalse(data.HasActivated);
            Assert.AreEqual(data.UserId,testUser.Id);
            Assert.IsNull(jsonresponse.ErrorMessage);
        }
        /// <summary>
        /// Get AuthUserViewmodel from given AuthUser and User
        /// </summary>
        /// <param name="au">AuthUser object</param>
        /// <param name="ou">Corresponding OrgUser object</param>
        /// <returns></returns>
        public static AuthUserViewModel FromUser(AuthUser au, User ou)
        {
            
            if(!au.Id.Equals(ou.Id))
                   throw new ArgumentException("AuthUser and User have different Ids");

            return new AuthUserViewModel
                       {
                           Id = au.Id, 
                           ActivationCode = au.ActivationCode, 
                           DateOfBirth = ou.DateOfBirth, 
                           EmailAddress = ou.EmailAddress, 
                           FirstName = ou.FirstName,
                           LastName = ou.LastName, 
                           NameIdentifier = au.NameIdentifier,
                           OrgKey = au.OrgKey,
                           PersonnelNumber = ou.PersonnelNumber,
                           Position = ou.Position,
                       };
        }
Beispiel #3
0
 /// <summary>
 /// A user also is an AuthUser
 /// </summary>
 /// <returns></returns>
 public IAuthUser ToAuthUser()
 {
     
     //else
     //{
     //    var UserName = null;
     //}
     var authUser= new AuthUser
                {
                 Id = Id,
                 ActivationCode = Guid.NewGuid().ToString(),
                 OrgKey = OrgKey,
                 UserName = EmailAddress,
                };
     if (EmailAddress != null)
     {
         authUser.UserName = EmailAddress;
     }
     return authUser;
 }
        public static ExtractedUserData ExtractUserData(string orgKey, string fileData, ref List<string> errorlines, int ignoreLines = 0)
        {
            var sr = new StringReader(fileData);
            string line;
            //ignore first line(s). 
            for (var i = 0; i < ignoreLines; i++)
            {
                sr.ReadLine();
            }

            //parse each line
            var re =
                new Regex(
                    @"^(?<personnelnumber>[^\t]+)\t(?<firstname>[^\t]+)\t(?<lastname>[^\t]+)\t(?<position>[^\t]+)\t(?<email>[^\t]*)\t(?<managers>[^\t]*)$");

            var orgusers = new Dictionary<string, User>();
            var authusers = new Dictionary<string, AuthUser>();
            var managers = new Dictionary<string, string>();

            while ((line = sr.ReadLine()) != null)
            {
                var match = re.Match(line);
                if (match.Success)
                {
                    //create new users. 
                    var au = new AuthUser
                                 {
                                     ActivationCode = Guid.NewGuid().ToString(),
                                     Id = IlluminateDatabase.GenerateId<AuthUser>(),
                                     OrgKey = orgKey
                                 };
                    var ou = new User
                                 {
                                     Id = au.Id,
                                     OrgKey = au.OrgKey,
                                     EmailAddress = match.Groups["email"].Captures[0].Value,
                                     PersonnelNumber = match.Groups["personnelnumber"].Captures[0].Value,
                                     FirstName = match.Groups["firstname"].Captures[0].Value,
                                     LastName = match.Groups["lastname"].Captures[0].Value,
                                     Position = match.Groups["position"].Captures[0].Value,

                                 };


                    managers.Add(ou.PersonnelNumber, match.Groups["managers"].Captures[0].Value);
                    authusers.Add(ou.PersonnelNumber, au);
                    orgusers.Add(ou.PersonnelNumber, ou);
                }
                else
                {
                    errorlines.Add(line);
                }
            }

            //who can manage others? 
            foreach (var a in managers)
            {
                var mlist = a.Value.Replace("\"", String.Empty).Replace(" ", String.Empty).Split(',');
                    //remove " and split on ,
                foreach (var m in mlist)
                {

                    if (!String.IsNullOrWhiteSpace(m) && orgusers.ContainsKey(m)) //check manager exists in import. 
                    {
                        var manager = orgusers[m];
                        var user = orgusers[a.Key];

                        //set manager as manager
                        manager.Roles.Add(Role.GetRole(Role.BuiltInRole.Manager));
                        //add to user's managers. 
                        user.AddManager(manager);
                    }
                }
            }


            var ret = new ExtractedUserData {Authusers = authusers, Orgusers = orgusers};

            return ret; 

        }
        public ActionResult Create(CreateOrganisationViewModel covm)
        {
            ViewBag.Modules = Modules; 
            ModelState.Remove("Id");
            if (ModelState.IsValid)
            {
                DocumentStore ds; 
                

                //check orgkey is ok. 
                if (MvcApplication.DataBase.GetOrgStore(covm.OrgKey)!=null)
                {
                    throw new Exception(String.Format("Organisation key {0} already exists", covm.OrgKey));
                }

                var org = Mapper.Map<OrganisationViewModel, Organisation>(covm);
                org.OrgKey = org.OrgKey.ToLower();
                
                AuthUser authuser;
                IDocumentStore newOrgStore;
                //create new org record in master store
                using (var session = MasterStore.OpenSession())
                {
                    org.CreatedOn = DateTime.Now;
                    org.IsLive = true;
                    session.Store(org);
                    session.SaveChanges();
                    newOrgStore =CreateOrgDatabase(org,session);

                    //create administrator and email
                    authuser = new AuthUser
                    {
                        ActivationCode = Guid.NewGuid().ToString(),
                        Id = IlluminateDatabase.GenerateId<User>(),
                        OrgKey = org.OrgKey
                    };
                    session.Store(authuser);
                    session.SaveChanges();

                }
                
                var orgUser = new User
                                {
                                    CreatedDate = DateTime.Now,
                                    EmailAddress = covm.AdministratorEmail,
                                    Id = authuser.Id,
                                    FirstName = covm.AdministratorName.Split(' ')[0],
                                    LastName = covm.AdministratorName.Split(' ')[1],
                                    Roles = { Role.GetRole(Role.BuiltInRole.Administrator), Role.GetRole(Role.BuiltInRole.Manager), Role.GetRole(Role.BuiltInRole.Analytics) },
                                    OrgKey = org.OrgKey
                                };
                using (var orgSession = newOrgStore.OpenSession())
                {
                    orgSession.Store(orgUser);
                    orgSession.SaveChanges();
                }
                ProvisionNewDatabase(newOrgStore);
                EmailActivation(authuser, orgUser,newOrgStore);
                
                covm = Mapper.Map<Organisation, CreateOrganisationViewModel>(org); 
            }


            return View("Edit", covm);
        }
        public virtual void EmailActivation(AuthUser au, User ou, IDocumentStore orgStore)
        {

            //check not already activated. Work this out from 
            if (String.IsNullOrEmpty(au.ActivationCode))
            {
                throw new Exception("User is already activated");
            }

            var activationurl = String.Format("{0}://{1}/{2}", Request.Url.Scheme, ConfigurationManager.AppSettings["ActivationUrl"], au.ActivationCode);

            var notification = new Notification
                                   {
                                       Title = "New Administrator account for Illuminate",
                                       Body = Email.GetActivationEmailBody(ou, activationurl,au.ActivationCode,""),
                                       Id = IlluminateDatabase.GenerateId<Notification>(),
                                       NotificationRecipients = new[]
                                                                    {
                                                                        new NotificationRecipient
                                                                            {
                                                                                Users = new[] {ou.ToSimpleUser()},
                                                                                NotificationDeliveryTypes =
                                                                                    NotificationDeliveryTypes.Email
                                                                            }
                                                                    },
                                       SendDate = DateTime.Now
                                   };

            using (var session = orgStore.OpenSession())
            {
                session.Store(notification);
                session.SaveChanges();
            }
            
        }