public UserInvite InviteUser(Guid userInvitedById, Guid groupId, string email)
        {
            email = email.ToLower();

            Group group = this.groupRepo.FindById(groupId);

            if (this.userRepo.Find(x => x.Email == email).Any())
            {
                throw new ValidationException("This user already exists in the system");
            }

            UserInvite userInvite = this.userInviteRepo.FindOne(x => x.Email == email);

            if (userInvite == null)
            {
                userInvite = UserInvite.Create(userInvitedById, email);
                userInvite.Add(group);
                this.userInviteRepo.Add(userInvite);
            }
            else
            {
                userInvite.Add(group);
            }

            return(userInvite);
        }
        public static UserInvite Create(Guid userInvitedById, string email)
        {
            if (userInvitedById == Guid.Empty)
            {
                throw new ValidationException("User invited by Id can't be empty");
            }

            if (String.IsNullOrEmpty(email))
            {
                throw new ValidationException("Email can't be empty");
            }

            if (!Regex.IsMatch(email, StringValidation.Email, RegexOptions.IgnoreCase))
            {
                throw new ValidationException("Invalid email specified");
            }

            UserInvite userInvite = new UserInvite();

            userInvite.Id              = Guid.NewGuid();
            userInvite.InviteKey       = Guid.NewGuid();
            userInvite.Email           = email;
            userInvite.InvitedByUserId = userInvitedById;
            userInvite.DateCreated     = TimeProvider.Current.UtcNow;
            userInvite.DateModified    = TimeProvider.Current.UtcNow;
            userInvite.groupIds        = new List <Guid>();

            DomainEvents.Raise <UserInvited>(new UserInvited(userInvite));

            return(userInvite);
        }
        public override bool Equals(object obj)
        {
            UserInvite compareTo = obj as UserInvite;

            if (compareTo == null)
            {
                throw new Exception("Can't compare objects of different types");
            }

            return(compareTo.Email == this.Email && compareTo.tenantId == this.tenantId);
        }
        public void UninviteUser(Guid userInvitedById, Guid groupId, string email)
        {
            email = email.ToLower();

            Group      group      = this.groupRepo.FindById(groupId);
            UserInvite userInvite = this.userInviteRepo.FindOne(x => x.Email == email);

            if (userInvite == null)
            {
                throw new ValidationException("Can't uninvite unexisting user");
            }

            userInvite.Remove(group);
            if (userInvite.GroupIds.Count == 0)
            {
                this.userInviteRepo.Remove(userInvite);
            }
        }
        public void Add(User user)
        {
            if (this.userRepo.Count() == 0)
            {
                this.userRepo.Add(user);
                return;
            }

            if (this.userRepo.Find(x => x.IDPID == user.IDPID).Any())
            {
                throw new ValidationException("User with this IDPID already exists");
            }

            if (this.userRepo.Find(x => x.Email == user.Email).Any())
            {
                throw new ValidationException("User with this email already exists");
            }

            UserInvite userInvite =
                this.userInviteRepo.FindOne(x => x.Email == user.Email);

            if (userInvite == null)
            {
                throw new ValidationException("There is no invite for the user with this email address");
            }

            this.userRepo.Add(user);

            IEnumerable <Group> groups = this.groupRepo.Find(x => userInvite.GroupIds.Contains(x.Id));

            foreach (Group group in groups)
            {
                group.Add(user);
            }

            this.userInviteRepo.Remove(userInvite);
        }
 public UserInvited(UserInvite invite)
 {
     this.Invite = invite;
 }
        public void RemoveUserInvite(Guid userInviteId)
        {
            UserInvite userInvite = this.userInviteRepo.FindById(userInviteId);

            this.userInviteRepo.Remove(userInvite);
        }
        public void ReInviteUser(Guid userInviteId)
        {
            UserInvite userInvite = this.userInviteRepo.FindById(userInviteId);

            userInvite.ResendInvite();
        }