Пример #1
0
        public async Task <ActionResult> AddMember(int teamId, string email)
        {
            TelimenaUser telimenaUser = this.unitOfWork.Users.FirstOrDefault(x => x.UserName == this.User.Identity.Name);

            var getTeamResult = await this.GetTeamManagedByUser(teamId, telimenaUser.Id);

            if (getTeamResult.ErrorResult != null)
            {
                return(getTeamResult.ErrorResult);
            }

            TelimenaUser newUser = this.unitOfWork.Users.FirstOrDefault(x => x.Email == email);

            if (newUser == null)
            {
                return(this.HttpNotFound($"User with email [{email}] does not exist"));
            }



            getTeamResult.Team.AssociateUser(newUser);
            await this.unitOfWork.CompleteAsync().ConfigureAwait(false);

            return(new HttpStatusCodeResult(HttpStatusCode.OK, $"Added user [{newUser.Email}] to [{getTeamResult.Team.Name}]"));
        }
Пример #2
0
        public void TestSetUserAsMainForSecondDeveloper()
        {
            TelimenaUserManager manager = new TelimenaUserManager(new UserStore <TelimenaUser>(this.Context));
            AccountUnitOfWork   unit    = new AccountUnitOfWork(null, manager, this.Context);

            GetTwoUsers(unit);

            TelimenaUser jim  = unit.UserManager.FindByNameAsync(Helpers.GetName("*****@*****.**")).GetAwaiter().GetResult();
            TelimenaUser jack = unit.UserManager.FindByNameAsync(Helpers.GetName("*****@*****.**")).GetAwaiter().GetResult();

            DeveloperTeam jackDev = unit.DeveloperRepository.FirstOrDefault(x => x.MainUser.Id == jack.Id);
            DeveloperTeam jimDev  = unit.DeveloperRepository.FirstOrDefault(x => x.MainUser.Id == jim.Id);

            Assert.AreEqual(jackDev.Id, jack.GetDeveloperAccountsLedByUser().Single().Id);
            Assert.AreEqual(jimDev.Id, jim.GetDeveloperAccountsLedByUser().Single().Id);

            jimDev.SetMainUser(jack);
            unit.Complete();

            Assert.IsNotNull(jimDev.AssociatedUsers.Single(x => x.Id == jim.Id));
            Assert.IsNotNull(jimDev.AssociatedUsers.Single(x => x.Id == jack.Id));

            Assert.AreEqual(1, jim.AssociatedDeveloperAccounts.Count());
            Assert.AreEqual(jack, jimDev.MainUser);

            Assert.AreEqual(0, jim.GetDeveloperAccountsLedByUser().Count());
            Assert.AreEqual(2, jack.GetDeveloperAccountsLedByUser().Count());

            Assert.IsNotNull(jack.GetDeveloperAccountsLedByUser().Single(x => x.Id == jackDev.Id));
            Assert.IsNotNull(jack.GetDeveloperAccountsLedByUser().Single(x => x.Id == jimDev.Id));
        }
Пример #3
0
        /// <summary>
        /// Indexes this instance.
        /// </summary>
        /// <returns>ActionResult.</returns>
        public async Task <ActionResult> Index(int id)
        {
            TelimenaUser telimenaUser = this.unitOfWork.Users.FirstOrDefault(x => x.UserName == this.User.Identity.Name);

            var getTeamResult = await this.GetTeam(id, telimenaUser.Id);

            if (getTeamResult.ErrorResult != null)
            {
                return(getTeamResult.ErrorResult);
            }

            var model = new TeamViewModel()
            {
                Name = getTeamResult.Team.Name, TeamId = getTeamResult.Team.Id
            };

            foreach (TelimenaUser user in getTeamResult.Team.AssociatedUsers)
            {
                model.TeamMembers.Add(new SelectListItem()
                {
                    Value = user.Email, Text = user.DisplayName
                });
            }

            return(this.View("Index", model));
        }
Пример #4
0
        public PartialViewResult ProgramsList()
        {
            TelimenaUser user     = this.work.Users.GetByPrincipal(this.User);
            var          programs = this.work.Programs.GetProgramsVisibleToUser(user, this.User);

            ProgramsListViewModel model = new ProgramsListViewModel();

            var list = new List <ProgramMenuEntry>();

            foreach (Program program in programs)
            {
                var entry = new ProgramMenuEntry()
                {
                    ProgramName         = program.Name
                    , TelemetryKey      = program.TelemetryKey
                    , DeveloperTeamId   = program.DeveloperTeam.Id
                    , DeveloperTeamName = program.DeveloperTeam.Name
                    ,
                };
                list.Add(entry);
            }

            model.Programs = list.GroupBy(x => x.DeveloperTeamId);

            return(this.PartialView("_ProgramsList", model));
        }
Пример #5
0
        public async Task <ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (this.ModelState.IsValid)
            {
                TelimenaUser user = await this.unitOfWork.UserManager.FindAsync(model.Email, model.Password).ConfigureAwait(false);

                if (user != null)
                {
                    if (user.IsActivated)
                    {
                        user.LastLoginDate = DateTime.UtcNow;
                        await this.unitOfWork.UserManager.UpdateAsync(user).ConfigureAwait(false);

                        ClaimsIdentity ident = await this.unitOfWork.UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie).ConfigureAwait(false);

                        this.unitOfWork.AuthManager.SignIn(new AuthenticationProperties {
                            IsPersistent = false
                        }, ident);
                        if (user.MustChangePassword)
                        {
                            return(this.RedirectToAction("ChangePassword"));
                        }

                        return(this.Redirect(returnUrl ?? this.Url.Action("Index", "Home")));
                    }

                    return(this.View("WaitForActivationInfo"));
                }
            }

            this.ModelState.AddModelError("", "Invalid username or password");
            return(this.View(model));
        }
Пример #6
0
        public async Task <ActionResult> RenameTeam(int teamId, string newName)
        {
            if (!newName.IsUrlFriendly())
            {
                var properName     = newName.MakeUrlFriendly();
                var properNameHint = "";
                if (properName != null)
                {
                    properNameHint = $" Proposed name: {properName}";
                }

                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, $"Team name should only contain letters and numbers or hyphens. " +
                                                $"Also it needs to begin and end with a letter or digit.{properNameHint}"));
            }
            TelimenaUser telimenaUser = this.unitOfWork.Users.FirstOrDefault(x => x.UserName == this.User.Identity.Name);

            var getTeamResult = await this.GetTeam(teamId, telimenaUser.Id);

            if (getTeamResult.ErrorResult != null)
            {
                return(getTeamResult.ErrorResult);
            }

            var existingTeam = await this.unitOfWork.Developers.FirstOrDefaultAsync(x => x.Name == newName).ConfigureAwait(false);

            if (existingTeam != null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Conflict, $"A [{existingTeam.Name}] team already exists"));
            }

            getTeamResult.Team.Name = newName;
            await this.unitOfWork.CompleteAsync().ConfigureAwait(false);

            return(new HttpStatusCodeResult(HttpStatusCode.OK, $"Renamed team to [{getTeamResult.Team.Name}]"));
        }
Пример #7
0
        public async Task <ActionResult> ToggleRoleActivation(string userId, bool activateRole, string roleName)
        {
            TelimenaUser user = await this.userManager.FindByIdAsync(userId).ConfigureAwait(false);

            try
            {
                if (activateRole)
                {
                    await this.userManager.AddToRoleAsync(user.Id, roleName).ConfigureAwait(false);
                }
                else
                {
                    await this.userManager.RemoveFromRoleAsync(user.Id, roleName).ConfigureAwait(false);
                }

                bool isInRole = await this.userManager.IsInRoleAsync(user.Id, roleName).ConfigureAwait(false);

                this.telemetryClient.TrackTrace($"User [{user.UserName}] role [{roleName}] status changed. Is in role: [{isInRole}].");
                return(this.Json(isInRole));
            }
            catch (Exception ex)
            {
                this.telemetryClient.TrackException(new InvalidOperationException($"Error while toggling role activation to [{activateRole}]. Role: [{roleName}]. User [{user.UserName}]", ex));
                return(null);
            }
        }
Пример #8
0
        public void RegisterTest()
        {
            TelimenaUserManager manager = new TelimenaUserManager(new UserStore <TelimenaUser>(this.Context));
            AccountUnitOfWork   unit    = new AccountUnitOfWork(null, manager, this.Context);
            AccountController   sut     = new AccountController(unit, new Mock <ILog>().Object);

            RegisterViewModel model = new RegisterViewModel
            {
                Name = "Jim Beam"
                , ConfirmPassword = "******"
                , Password        = "******"
                , Email           = "*****@*****.**"
                , Role            = TelimenaRoles.Developer
            };

            ViewResult result = sut.Register(model).GetAwaiter().GetResult() as ViewResult;

            Assert.AreEqual("WaitForActivationInfo", result.ViewName);

            TelimenaUser user = unit.UserManager.FindByNameAsync(model.Email).GetAwaiter().GetResult();

            Assert.AreEqual("Jim Beam", user.DisplayName);
            Assert.IsTrue(user.RegisteredDate.Date == DateTime.UtcNow.Date);
            //Assert.IsFalse(user.IsActivated);
            Assert.IsTrue(unit.UserManager.IsInRoleAsync(user.Id, TelimenaRoles.Developer).GetAwaiter().GetResult());
            Assert.IsTrue(unit.UserManager.IsInRoleAsync(user.Id, TelimenaRoles.Viewer).GetAwaiter().GetResult());

            DeveloperTeam developerTeam = unit.DeveloperRepository.SingleOrDefault(x => x.MainUser.Id == user.Id);

            Assert.AreEqual(user.DisplayName, developerTeam.MainUser.DisplayName);
            Assert.AreEqual(user.Email, developerTeam.MainEmail);

            Assert.AreEqual(developerTeam, user.GetDeveloperAccountsLedByUser().Single());
        }
Пример #9
0
        public Updater Add(string fileName, string internalName, TelimenaUser user)
        {
            var updater = new Updater(fileName, internalName);

            this.TelimenaPortalContext.Updaters.Add(updater);
            updater.DeveloperTeam = user.AssociatedDeveloperAccounts.FirstOrDefault(x => x.MainUserId == user.Id);
            return(updater);
        }
Пример #10
0
        private IQueryable <Program> GetProgramsVisibleToUserImpl(TelimenaUser user, IPrincipal principal)
        {
            if (principal != null && principal.IsInRole(TelimenaRoles.Admin))
            {
                return(this.portalContext.Programs);
            }

            return(this.portalContext.Programs.Where(x => x.DeveloperTeam != null && (x.DeveloperTeam.MainUserId == user.Id || x.DeveloperTeam.AssociatedUsers.Any(a => a.Id == user.Id))));
        }
Пример #11
0
        /// <summary>
        /// Gets all programs summary counts.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <returns>Task&lt;AllProgramsSummaryData&gt;.</returns>
        public async Task <AllProgramsSummaryData> GetAllProgramsSummaryCounts(IPrincipal user)
        {
            TelimenaUser   telimenaUser = this.unitOfWork.Users.FirstOrDefault(x => x.UserName == user.Identity.Name);
            List <Program> programs     = await this.unitOfWork.Programs.GetProgramsVisibleToUserAsync(telimenaUser, user).ConfigureAwait(false);

            AllProgramsSummaryData summary = await this.unitOfWork.GetAllProgramsSummaryCounts(programs).ConfigureAwait(false);

            return(summary);
        }
Пример #12
0
        /// <summary>
        /// Gets all programs.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <returns>Task&lt;List&lt;ProgramSummary&gt;&gt;.</returns>
        public async Task <List <AppUsersSummaryData> > GetAppUsersSummary(IPrincipal user)
        {
            TelimenaUser   telimenaUser = this.unitOfWork.Users.FirstOrDefault(x => x.UserName == user.Identity.Name);
            List <Program> programs     = await this.unitOfWork.Programs.GetProgramsVisibleToUserAsync(telimenaUser, user).ConfigureAwait(false);

            var summary = (await this.unitOfWork.GetAppUsersSummary(programs, null, null).ConfigureAwait(false)).ToList();

            return(summary);
        }
Пример #13
0
        public async Task <ActionResult> ToggleUserActivation(string userId, bool isActive)
        {
            TelimenaUser user = await this.userManager.FindByIdAsync(userId).ConfigureAwait(false);

            user.IsActivated = !isActive;
            await this.userManager.UpdateAsync(user).ConfigureAwait(false);

            this.telemetryClient.TrackTrace($"User [{user.UserName}] activation status changed to [{user.IsActivated}]");
            return(this.Json(user.IsActivated));
        }
Пример #14
0
        public void TestRemoveUserFromDeveloper()
        {
            TelimenaUserManager manager = new TelimenaUserManager(new UserStore <TelimenaUser>(this.Context));
            AccountUnitOfWork   unit    = new AccountUnitOfWork(null, manager, this.Context);

            GetTwoUsers(unit);

            TelimenaUser jim  = unit.UserManager.FindByNameAsync(Helpers.GetName("*****@*****.**")).GetAwaiter().GetResult();
            TelimenaUser jack = unit.UserManager.FindByNameAsync(Helpers.GetName("*****@*****.**")).GetAwaiter().GetResult();

            DeveloperTeam jackDev = unit.DeveloperRepository.FirstOrDefault(x => x.MainUser.Id == jack.Id);
        }
Пример #15
0
        public PartialViewResult TeamsList()
        {
            TelimenaUser user  = this.work.Users.GetByPrincipal(this.User);
            var          teams = user.AssociatedDeveloperAccounts;
            var          model = new TeamsListViewModel();

            model.Teams = teams.Select(x => new TeamsMenuEntry()
            {
                TeamId = x.Id, TeamName = x.Name
            });
            return(this.PartialView("_TeamsList", model));
        }
Пример #16
0
        public static async Task <TelimenaUser> CreateTelimenaUser(TelimenaPortalContext context, string email, string displayName = null, [CallerMemberName] string caller = "")
        {
            TelimenaUserManager manager = new TelimenaUserManager(new UserStore <TelimenaUser>(context));

            AccountUnitOfWork unit = new AccountUnitOfWork(null, manager, context);


            TelimenaUser user = new TelimenaUser(caller + "_" + email, caller + "_" + (displayName ?? email.ToUpper()));
            await unit.RegisterUserAsync(user, "P@ssword", TelimenaRoles.Developer).ConfigureAwait(false);

            unit.Complete();
            return(user);
        }
Пример #17
0
        public async Task <RegisterProgramResponse> Register(RegisterProgramRequest request)
        {
            try
            {
                if (!ApiRequestsValidator.IsRequestValid(request, out List <string> errors))
                {
                    return(new RegisterProgramResponse(new BadRequestException(string.Join(", ", errors))));
                }

                if (await this.Work.Programs.GetByTelemetryKey(request.TelemetryKey).ConfigureAwait(false) != null)
                {
                    return(new RegisterProgramResponse(new BadRequestException($"Use different telemetry key")));
                }

                TelimenaUser user = await this.Work.Users.FirstOrDefaultAsync(x => x.UserName == this.User.Identity.Name).ConfigureAwait(false);

                if (user == null)
                {
                    return(new RegisterProgramResponse(new BadRequestException($"Cannot find user [{this.User.Identity.Name}]")));
                }
                DeveloperTeam developerTeam = user.GetDeveloperAccountsLedByUser().FirstOrDefault();
                if (developerTeam == null)
                {
                    return(new RegisterProgramResponse(new BadRequestException($"Cannot find developer account associated with user [{user.UserName}]")));
                }

                Program program = new Program(request.Name, request.TelemetryKey)
                {
                    Description = request.Description
                };

                ProgramAssembly primaryAss = new ProgramAssembly()
                {
                    Name      = Path.GetFileNameWithoutExtension(request.PrimaryAssemblyFileName),
                    Extension = Path.GetExtension(request.PrimaryAssemblyFileName)
                };

                await this.Work.RegisterProgram(developerTeam, program, primaryAss).ConfigureAwait(false);

                program = await this.Work.Programs.GetByTelemetryKey(request.TelemetryKey).ConfigureAwait(false);

                var url = this.Url?.Link("Default", new { Controller = "ProgramManagement", Action = "Index", telemetryKey = program.TelemetryKey });
                return(new RegisterProgramResponse(program.TelemetryKey, program.DeveloperTeam.PublicId, url));
            }
            catch (Exception ex)
            {
                return(new RegisterProgramResponse(ex));
            }
        }
Пример #18
0
        public async Task <Tuple <IdentityResult, IdentityResult> > RegisterUserAsync(TelimenaUser user, string password, params string[] roles)
        {
            IdentityResult registerResult = await this.UserManager.CreateAsync(user, password).ConfigureAwait(false);

            if (registerResult.Succeeded)
            {
                TelimenaUser addedUser = await this.UserManager.FindByIdAsync(user.Id).ConfigureAwait(false);

                addedUser.IsActivated = true;
                IdentityResult roleResult = await this.HandleRoleRegistrationAsync(roles, addedUser).ConfigureAwait(false);

                return(new Tuple <IdentityResult, IdentityResult>(registerResult, roleResult));
            }

            return(new Tuple <IdentityResult, IdentityResult>(registerResult, null));
        }
Пример #19
0
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (this.ModelState.IsValid)
            {
                if (!this.ValidateRegistrationModel(model))
                {
                    return(this.View(model));
                }

                TelimenaUser user = new TelimenaUser(model.Email, model.Name);

                Tuple <IdentityResult, IdentityResult> results = await this.unitOfWork.RegisterUserAsync(user, model.Password, TelimenaRoles.Viewer, model.Role).ConfigureAwait(false);

                await this.unitOfWork.CompleteAsync().ConfigureAwait(false);

                if (results.Item1.Succeeded)
                {
                    if (results.Item2 != null && results.Item2.Succeeded || results.Item2 == null)
                    {
                        this.logger.Info($"User [{user.GetNameAndIdString()}] user registered and added to proper roles");
                        return(this.View("WaitForActivationInfo"));
                    }

                    this.logger.Info(
                        $"User [{user.GetNameAndIdString()}] user registered but errors occurred while adding to roles: [{string.Join(",", results.Item2.Errors)}");
                    foreach (string resultError in results.Item2.Errors)
                    {
                        this.ModelState.AddModelError("", resultError);
                    }
                }
                else
                {
                    foreach (string resultError in results.Item1.Errors)
                    {
                        this.ModelState.AddModelError("", resultError);
                    }
                }
            }
            else
            {
                this.ModelState.AddModelError("", "Something went wrong during registration");
            }

            // If we got this far, something failed, redisplay form
            return(this.View(model));
        }
Пример #20
0
        public PartialViewResult ProgramsList()
        {
            TelimenaUser          user     = this.work.Users.GetByPrincipal(this.User);
            IEnumerable <Program> programs = this.work.Programs.GetProgramsVisibleToUser(user, this.User);

            ProgramsListViewModel model = new ProgramsListViewModel();

            foreach (Program program in programs)
            {
                if (!model.Programs.ContainsKey(program.TelemetryKey))
                {
                    model.Programs.Add(program.TelemetryKey, program.Name);
                }
            }

            return(this.PartialView("_ProgramsList", model));
        }
Пример #21
0
        public async Task <IHttpActionResult> Upload()
        {
            try
            {
                string reqString             = HttpContext.Current.Request.Form["Model"];
                UploadUpdaterRequest request = JsonConvert.DeserializeObject <UploadUpdaterRequest>(reqString);

                HttpPostedFile uploadedFile = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files[0] : null;
                if (uploadedFile != null && uploadedFile.ContentLength > 0)
                {
                    TelimenaUser user = await this.work.Users.GetByPrincipalAsync(this.User).ConfigureAwait(false);

                    Updater updater = await this.work.UpdaterRepository.GetUpdater(request.UpdaterInternalName).ConfigureAwait(false);

                    if (updater == null)
                    {
                        updater = this.work.UpdaterRepository.Add(uploadedFile.FileName, request.UpdaterInternalName, user);
                    }

                    if (user.AssociatedDeveloperAccounts.All(x => x.Id != updater.DeveloperTeam.Id))
                    {
                        return(this.BadRequest(
                                   $"Updater '{updater.InternalName}' is managed by a team that you don't belong to - '{updater.DeveloperTeam.Name}'"));
                    }

                    if (uploadedFile.FileName != updater.FileName && !uploadedFile.FileName.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase))
                    {
                        return(this.BadRequest(
                                   $"Incorrect file. Expected {updater.FileName} or a zip package with it"));
                    }

                    UpdaterPackageInfo pkg =
                        await this.work.UpdaterRepository.StorePackageAsync(updater, request.MinimumCompatibleToolkitVersion, uploadedFile.InputStream, this.fileSaver).ConfigureAwait(false);

                    await this.work.CompleteAsync().ConfigureAwait(false);

                    return(this.Ok($"Uploaded package {pkg.Version} with ID {pkg.Id}"));
                }

                return(this.BadRequest("Empty attachment"));
            }
            catch (Exception ex)
            {
                return(this.BadRequest(ex.Message));
            }
        }
Пример #22
0
        public async Task <ActionResult> RenameTeam(string newName)
        {
            var existingTeam = await this.unitOfWork.Developers.FirstOrDefaultAsync(x => x.Name == newName).ConfigureAwait(false);

            if (existingTeam != null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Conflict, $"A [{existingTeam.Name}] team already exists"));
            }
            TelimenaUser telimenaUser = this.unitOfWork.Users.FirstOrDefault(x => x.UserName == this.User.Identity.Name);

            DeveloperTeam team = await this.unitOfWork.Developers.FirstOrDefaultAsync(x => x.MainUser.Id == telimenaUser.Id).ConfigureAwait(false);

            team.Name = newName;
            await this.unitOfWork.CompleteAsync().ConfigureAwait(false);

            return(new HttpStatusCodeResult(HttpStatusCode.OK, $"Renamed team to [{team.Name}]"));
        }
Пример #23
0
        public async Task <ActionResult> RemoveMember(string email)
        {
            TelimenaUser userToBeRemoved = this.unitOfWork.Users.FirstOrDefault(x => x.Email == email);

            if (userToBeRemoved == null)
            {
                return(this.HttpNotFound($"User with email [{email}] does not exist"));
            }
            TelimenaUser telimenaUser = this.unitOfWork.Users.FirstOrDefault(x => x.UserName == this.User.Identity.Name);

            DeveloperTeam team = await this.unitOfWork.Developers.FirstOrDefaultAsync(x => x.MainUser.Id == telimenaUser.Id).ConfigureAwait(false);

            team.RemoveAssociatedUser(userToBeRemoved);
            await this.unitOfWork.CompleteAsync().ConfigureAwait(false);

            return(new HttpStatusCodeResult(HttpStatusCode.OK, $"Removed user [{userToBeRemoved.Email}] from [{team.Name}]"));
        }
Пример #24
0
        public async Task <ActionResult> ChangePassword(ChangePasswordViewModel model)
        {
            if (this.ModelState.IsValid)
            {
                if (model.NewPasswordRepeated != model.NewPassword)
                {
                    this.ModelState.AddModelError("", "Provided new password does not match the repeated password");
                }
                else if (model.OldPassword == model.NewPassword)
                {
                    this.ModelState.AddModelError("", "New password must be different from the old one");
                }
                else
                {
                    TelimenaUser user = await this.unitOfWork.UserManager.FindAsync(this.User.Identity.Name, model.OldPassword).ConfigureAwait(false);

                    if (user != null)
                    {
                        IdentityResult result =
                            await this.unitOfWork.UserManager.ChangePasswordAsync(this.User.Identity.GetUserId(), model.OldPassword, model.NewPassword).ConfigureAwait(false);

                        if (result.Succeeded)
                        {
                            user.MustChangePassword = false;
                            await this.unitOfWork.UserManager.UpdateAsync(user).ConfigureAwait(false);

                            model.IsSuccess = true;
                            this.logger.Info($"[{this.User.Identity.Name}] password changed");
                            return(this.View(model));
                        }

                        foreach (string error in result.Errors)
                        {
                            this.ModelState.AddModelError("", error);
                        }
                    }
                    else
                    {
                        this.ModelState.AddModelError("", "Incorrect current password provided");
                    }
                }
            }

            return(this.View(model));
        }
Пример #25
0
        public static async Task <Mock <HttpRequestContext> > SetupUserIntoRequestContext(TelimenaPortalContext context, string devName, string devEmail, [CallerMemberName] string caller = "")
        {
            TelimenaUser teliUsr = context.Users.FirstOrDefault(x => x.Email == devEmail);

            if (teliUsr == null)
            {
                teliUsr = await CreateTelimenaUser(context, devEmail, devName, caller).ConfigureAwait(false);
            }

            GenericIdentity  identity  = new GenericIdentity(teliUsr.UserName);
            GenericPrincipal principal = new GenericPrincipal(identity, new[] { TelimenaRoles.Developer });
            ClaimsPrincipal  usr       = new ClaimsPrincipal(principal);

            Mock <HttpRequestContext> requestContext = new Mock <HttpRequestContext>();

            requestContext.Setup(x => x.Principal).Returns(usr);
            return(requestContext);
        }
Пример #26
0
        public void TestAddSecondUserToDeveloperTwice()
        {
            TelimenaUserManager manager = new TelimenaUserManager(new UserStore <TelimenaUser>(this.Context));
            AccountUnitOfWork   unit    = new AccountUnitOfWork(null, manager, this.Context);

            GetTwoUsers(unit);

            TelimenaUser jim  = unit.UserManager.FindByNameAsync(Helpers.GetName("*****@*****.**")).GetAwaiter().GetResult();
            TelimenaUser jack = unit.UserManager.FindByNameAsync(Helpers.GetName("*****@*****.**")).GetAwaiter().GetResult();


            DeveloperTeam jackDev = unit.DeveloperRepository.FirstOrDefault(x => x.MainUser.Id == jack.Id);

            jackDev.AssociateUser(jim);
            unit.Complete();
            jackDev.AssociateUser(jim);
            unit.Complete();

            Assert.AreEqual(2, jackDev.AssociatedUsers.Count);
        }
Пример #27
0
        public void TestRemoveDeveloper()
        {
            TelimenaUserManager manager = new TelimenaUserManager(new UserStore <TelimenaUser>(this.Context));

            AccountUnitOfWork unit = new AccountUnitOfWork(null, manager, this.Context);

            GetTwoUsers(unit);
            TelimenaUser jack = unit.UserManager.FindByNameAsync(Helpers.GetName("*****@*****.**")).GetAwaiter().GetResult();
            TelimenaUser jim  = unit.UserManager.FindByNameAsync(Helpers.GetName("*****@*****.**")).GetAwaiter().GetResult();

            DeveloperTeam jackDev = unit.DeveloperRepository.FirstOrDefault(x => x.MainUser.Id == jack.Id);

            jackDev.AssociateUser(jim);

            unit.DeveloperRepository.Remove(jackDev);
            unit.Complete();
            Assert.IsNotNull(this.Context.Users.Single(x => x.Id == jack.Id));
            Assert.IsNotNull(this.Context.Users.Single(x => x.Id == jim.Id));
            Assert.IsNull(unit.DeveloperRepository.SingleOrDefault(x => x.Id == jackDev.Id));
        }
Пример #28
0
        public async Task <ActionResult> Index()
        {
            TelimenaUser telimenaUser = this.unitOfWork.Users.FirstOrDefault(x => x.UserName == this.User.Identity.Name);

            DeveloperTeam team = await this.unitOfWork.Developers.FirstOrDefaultAsync(x => x.MainUser.Id == telimenaUser.Id).ConfigureAwait(false);

            var model = new TeamViewModel()
            {
                Name = team.Name
            };

            foreach (TelimenaUser user in team.AssociatedUsers)
            {
                model.TeamMembers.Add(new SelectListItem()
                {
                    Value = user.Email, Text = user.DisplayName
                });
            }

            return(this.View("Index", model));
        }
Пример #29
0
        public static async Task <TelimenaUser> CreateTelimenaUser(TelimenaPortalContext context, string email, string displayName = null, [CallerMemberName] string caller = "")
        {
            TelimenaUserManager manager = new TelimenaUserManager(new UserStore <TelimenaUser>(context));

            AccountUnitOfWork unit = new AccountUnitOfWork(null, manager, context);


            TelimenaUser user   = new TelimenaUser(caller + "" + email, caller + "" + (displayName ?? email.ToUpper()));
            var          result = await unit.RegisterUserAsync(user, "P@ssword", TelimenaRoles.Developer).ConfigureAwait(false);

            if (!result.Item1.Succeeded)
            {
                var msg = result.Item1.Errors?.FirstOrDefault();
                if (msg != null && !msg.Contains("is already taken."))
                {
                    Assert.Fail($"Failed to register user {user.UserName}. Error: {result.Item1.Errors?.FirstOrDefault()}");
                }
            }
            unit.Complete();
            return(user);
        }
Пример #30
0
        public void TestRemoveUser()
        {
            TelimenaUserManager manager = new TelimenaUserManager(new UserStore <TelimenaUser>(this.Context));
            AccountUnitOfWork   unit    = new AccountUnitOfWork(null, manager, this.Context);

            GetTwoUsers(unit);
            TelimenaUser jack = unit.UserManager.FindByNameAsync(Helpers.GetName("*****@*****.**")).GetAwaiter().GetResult();

            DeveloperTeam jackDev   = unit.DeveloperRepository.FirstOrDefault(x => x.MainUser.Id == jack.Id);
            var           jackDevId = jackDev.Id;

            Assert.AreEqual(jackDevId, jack.AssociatedDeveloperAccounts.Single().Id);

            unit.UserManager.DeleteAsync(jack).GetAwaiter().GetResult();
            unit.Complete();
            Assert.IsNull(unit.UserManager.FindByNameAsync(jack.UserName).GetAwaiter().GetResult());

            jackDev = unit.DeveloperRepository.FirstOrDefault(x => x.Id == jackDevId);

            Assert.IsNull(jackDev.MainUser);
            Assert.AreEqual(Helpers.GetName("*****@*****.**"), jackDev.MainEmail);
        }