public async Task <IHttpActionResult> Authenticate(CredentialsDTO credentials)
        {
            Fr8AccountDO account;
            TerminalDO   terminalDO;

            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                terminalDO = _terminal.GetByNameAndVersion(credentials.Terminal.Name, credentials.Terminal.Version);
                account    = _security.GetCurrentAccount(uow);
            }

            var response = await _authorization.AuthenticateInternal(
                account,
                terminalDO,
                credentials.Domain,
                credentials.Username,
                credentials.Password,
                credentials.IsDemoAccount
                );

            return(Ok(new TokenResponseDTO
            {
                TerminalId = response.AuthorizationToken?.TerminalID,
                TerminalName = terminalDO.Name,
                AuthTokenId = response.AuthorizationToken?.Id.ToString(),
                Error = response.Error
            }));
        }
        /// <summary>
        /// Create Subroute entity.
        /// </summary>
        public void Create(IUnitOfWork uow, SubplanDO subplan)
        {
            if (subplan == null)
            {
                throw new ArgumentNullException(nameof(subplan));
            }

            subplan.Fr8Account  = _security.GetCurrentAccount(uow);
            subplan.CreateDate  = DateTime.UtcNow;
            subplan.LastUpdated = subplan.CreateDate;

            var curPlan = uow.PlanRepository.GetById <PlanDO>(subplan.RootPlanNodeId);

            if (curPlan == null)
            {
                throw new MissingObjectException($"Plan with Id {subplan.RootPlanNodeId} doesn't exist");
            }

            var curPlanNode = uow.PlanRepository.GetById <PlanNodeDO>(subplan.ParentPlanNodeId);

            if (curPlanNode == null)
            {
                throw new MissingObjectException($"Parent plan-node with Id {subplan.ParentPlanNodeId} doesn't exist");
            }

            subplan.RootPlanNode   = curPlan;
            subplan.ParentPlanNode = curPlanNode;

            curPlanNode.AddChildWithDefaultOrdering(subplan);
        }
Exemple #3
0
 protected Fr8AccountDO GetUserTerminalOperatesOn()
 {
     using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
     {
         return(_security.GetCurrentAccount(uow));
     }
 }
        //This method finds and returns single SolutionPageDTO that holds some documentation of Activities that is obtained from a solution by aame
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="activityDTO"></param>
        /// <param name="isSolution">This parameter controls the access level: if it is a solution case
        /// we allow calls without CurrentAccount; if it is not - we need a User to get the list of available activities</param>
        /// <returns>Task<DocumentationResponseDTO></returns>
        public async Task <T> GetActivityDocumentation <T>(ActivityDTO activityDTO, bool isSolution = false) where T : class
        {
            //activityResponce can be either of type SolutoinPageDTO or ActivityRepsonceDTO
            T   activityResponce;
            var userId = Guid.NewGuid().ToString();

            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                var allActivityTemplates = ObjectFactory.GetInstance <IEnumerable <ActivityTemplateDTO> >();
                if (isSolution)
                {
                    //Get the list of all actions that are solutions from database
                    allActivityTemplates = _planNode.GetSolutions(uow);
                }
                else
                {
                    var curUser = _security.GetCurrentAccount(uow);
                    userId = curUser.Id;
                    allActivityTemplates = _planNode.GetAvailableActivities(uow, curUser);
                }
                //find the activity by the provided name

                // To prevent mismatch between db and terminal solution lists, Single or Default used
                var curActivityTerminalDTO = allActivityTemplates
                                             .OrderByDescending(x => int.Parse(x.Version))
                                             .FirstOrDefault(a => a.Name == activityDTO.ActivityTemplate.Name);
                //prepare an Activity object to be sent to Activity in a Terminal
                //IMPORTANT: this object will not be hold in the database
                //It is used to transfer data
                //as ActivityDTO is the first mean of communication between The Hub and Terminals

                // Since there can be mismatched data between db and terminal solution list, we should make a null check here
                if (curActivityTerminalDTO == null)
                {
                    return(null);
                }
                var curActivityDTO = new ActivityDTO
                {
                    Id               = Guid.NewGuid(),
                    Label            = curActivityTerminalDTO.Label,
                    ActivityTemplate = new ActivityTemplateSummaryDTO
                    {
                        Name            = curActivityTerminalDTO.Name,
                        Version         = curActivityTerminalDTO.Version,
                        TerminalName    = curActivityTerminalDTO.Terminal.Name,
                        TerminalVersion = curActivityTerminalDTO.Terminal.Version
                    },
                    AuthToken = new AuthorizationTokenDTO
                    {
                        UserId = null
                    },
                    Documentation = activityDTO.Documentation
                };

                activityResponce = await GetDocumentation <T>(curActivityDTO);
            }
            return(activityResponce);
        }
Exemple #5
0
        public IHttpActionResult Get()
        {
            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                IList <ContainerDO> curContainer = _containerService
                                                   .GetByFr8Account(
                    uow,
                    _security.GetCurrentAccount(uow),
                    _security.IsCurrentUserHasRole(Roles.Admin),
                    null
                    );

                if (curContainer.Any())
                {
                    return(Ok(curContainer.Select(Mapper.Map <ContainerDTO>)));
                }
                return(Ok());
            }
        }
Exemple #6
0
        private async Task <IHttpActionResult> CreateSolution(string solutionName)
        {
            var userId = User.Identity.GetUserId();

            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                ActivityTemplateDO activityTemplate;

                var activityTemplateInfo = _activityTemplate.GetActivityTemplateInfo(solutionName);

                if (!string.IsNullOrEmpty(activityTemplateInfo.Version))
                {
                    activityTemplate = _activityTemplate
                                       .GetQuery()
                                       .FirstOrDefault(x => x.Name == activityTemplateInfo.Name && x.Version == activityTemplateInfo.Version);
                }
                else
                {
                    activityTemplate = _activityTemplate.GetQuery()
                                       .Where(x => x.Name == solutionName)
                                       .AsEnumerable()
                                       .OrderByDescending(x => int.Parse(x.Version))
                                       .FirstOrDefault();
                }
                if (activityTemplate == null)
                {
                    throw new MissingObjectException($"Activity template (solution) name {solutionName} doesn't exist");
                }
                ObjectFactory.GetInstance <ITracker>().Track(_security.GetCurrentAccount(uow), "Loaded Solution", new Segment.Model.Properties().Add("Solution Name", solutionName));
                var result = await _activity.CreateAndConfigure(
                    uow,
                    userId,
                    activityTemplate.Id,
                    name : activityTemplate.Label,
                    createPlan : true);

                return(Ok(PlanMappingHelper.MapPlanToDto((PlanDO)result)));
            }
        }
        public IHttpActionResult Get()
        {
            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                var currentUser = _security.GetCurrentAccount(uow);
                var models      = _terminal.GetAll()
                                  .Where(u => u.UserDO != null && u.UserDO.Id == currentUser.Id)
                                  .Select(Mapper.Map <TerminalDTO>)
                                  .ToList();

                return(Ok(models));
            }
        }
        public IHttpActionResult Details(int id)
        {
            FileDTO fileDto = null;

            if (_security.IsCurrentUserHasRole(Roles.Admin))
            {
                fileDto = Mapper.Map <FileDTO>(_fileService.GetFileByAdmin(id));
            }
            else
            {
                string userId;

                using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
                {
                    userId = _security.GetCurrentAccount(uow).Id;
                }

                fileDto = Mapper.Map <FileDTO>(_fileService.GetFile(id, userId));
            }

            return(Ok(fileDto));
        }
Exemple #9
0
        public void CreateOrUpdate(IUnitOfWork uow, PlanDO submittedPlan)
        {
            if (submittedPlan.Id == Guid.Empty)
            {
                submittedPlan.Id         = Guid.NewGuid();
                submittedPlan.PlanState  = PlanState.Inactive;
                submittedPlan.Fr8Account = _security.GetCurrentAccount(uow);
                if (string.IsNullOrEmpty(submittedPlan.Name))
                {
                    submittedPlan.Name = "Untitled Plan " + (UserPlansCount(uow, _security.GetCurrentUser()) + 1);
                }

                submittedPlan.ChildNodes.Add(new SubplanDO(true)
                {
                    Id   = Guid.NewGuid(),
                    Name = "Starting Subplan"
                });

                uow.PlanRepository.Add(submittedPlan);
            }
            else
            {
                var curPlan = uow.PlanRepository.GetById <PlanDO>(submittedPlan.Id);
                if (curPlan == null)
                {
                    throw new EntityNotFoundException();
                }

                curPlan.Name         = submittedPlan.Name;
                curPlan.Description  = submittedPlan.Description;
                curPlan.Category     = submittedPlan.Category;
                curPlan.LastUpdated  = DateTimeOffset.UtcNow;
                curPlan.IsApp        = submittedPlan.IsApp;
                curPlan.AppLaunchURL = submittedPlan.AppLaunchURL;
            }
        }
Exemple #10
0
        public PagedResultDTO <T> GetHistory <T, TS>(IUnitOfWork uow, PagedQueryDTO pagedQueryDto, IQueryable <TS> historyQuery) where T : HistoryItemDTO where TS : HistoryItemDO
        {
            ValidateInputQuery(ref pagedQueryDto);
            //get the current account
            var curAccount = _security.GetCurrentAccount(uow);

            var filteredResult = FilterHistoryItems(historyQuery, pagedQueryDto, curAccount);

            var totalItemCountForCurrentCriterias = filteredResult.Count();

            filteredResult = filteredResult.Page(pagedQueryDto.Page.Value, pagedQueryDto.ItemPerPage.Value);

            return(new PagedResultDTO <T>()
            {
                Items = filteredResult.ToList().Select(Mapper.Map <T>).ToList(),
                CurrentPage = pagedQueryDto.Page.Value,
                TotalItemCount = totalItemCountForCurrentCriterias
            });
        }
        public bool IsCurrentUserInAdminRole()
        {
            ISecurityServices _security = ObjectFactory.GetInstance <ISecurityServices>();
            bool isAdmin = false;

            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                //get the current account
                var curAccount = _security.GetCurrentAccount(uow);
                //get the roles to check if the account has admin role
                var curAccountRoles = curAccount.Roles;
                //get the role id
                var adminRoleId = uow.AspNetRolesRepository.GetQuery().Single(r => r.Name == Roles.Admin).Id;
                //provide all facts if the user has admin role
                if (curAccountRoles.Any(x => x.RoleId == adminRoleId))
                {
                    isAdmin = true;
                }
            }

            return(isAdmin);
        }
Exemple #12
0
        public IHttpActionResult Get()
        {
            using (var uow = ObjectFactory.GetInstance <IUnitOfWork>())
            {
                if (_securityServices.UserHasPermission(PermissionType.ManageFr8Users, nameof(Fr8AccountDO)))
                {
                    Expression <Func <Fr8AccountDO, bool> > predicate = x => true;
                    return(Ok(GetUsers(uow, predicate)));
                }

                int?organizationId;
                if (_securityServices.UserHasPermission(PermissionType.ManageInternalUsers, nameof(Fr8AccountDO)))
                {
                    var currentUser = _securityServices.GetCurrentAccount(uow);
                    organizationId = currentUser.OrganizationId;

                    Expression <Func <Fr8AccountDO, bool> > predicate = x => x.OrganizationId == organizationId;
                    return(Ok(GetUsers(uow, predicate)));
                }

                //todo: show not authorized messsage in activityStream.
                return(Ok(new List <UserDTO>(0)));
            }
        }
Exemple #13
0
        public IList <FactDO> GetByObjectId(IUnitOfWork unitOfWork, string id)
        {
            //here we should determine type of ObjectId, to look at it`s owner in appropriate table
            //but it is non trivial action so for now select facts where userid is the same as fr8UserId

            if (_securityServices.IsCurrentUserHasRole(Data.States.Roles.Admin))
            {
                return
                    (unitOfWork.FactRepository.GetQuery().Where(
                         fact =>
                         fact.ObjectId == id
                         ).ToList());
            }
            else
            {
                var fr8UserId = _securityServices.GetCurrentAccount(unitOfWork).Id;
                return
                    (unitOfWork.FactRepository.GetQuery().Where(
                         fact =>
                         fact.ObjectId == id &&
                         fact.Fr8UserId.Equals(fr8UserId, StringComparison.InvariantCultureIgnoreCase))
                     .ToList());
            }
        }