示例#1
0
        public ScenarioSession GetActiveScenarioSession(string userSubject)
        {
            _logger.Info($"{nameof(GetActiveScenarioSession)}({userSubject})");
            try
            {
                if (_activeScenarios.TryGetValue(userSubject, out ScenarioMonitoringData scenarioMonitoringData))
                {
                    return(_dataAccessService.GetScenarioSession(scenarioMonitoringData.ScenarioSessionId));
                }

                ScenarioSession scenarioSession = _dataAccessService.GetScenarioSessions(userSubject).FirstOrDefault();

                if (scenarioSession != null)
                {
                    ResumeScenario(userSubject, scenarioSession.ScenarioId);
                }

                return(scenarioSession);
            }
            catch (Exception ex)
            {
                _logger.Error($"{nameof(GetActiveScenarioSession)}({userSubject})", ex);
                throw;
            }
        }
示例#2
0
        public ScenarioSession AbandonScenario(string userSubject, int id)
        {
            _logger.Info($"{nameof(AbandonScenario)}({userSubject}, {id})");
            try
            {
                ScenarioDefinition scenarioDefinition = _scenarios[id];
                ScenarioSession    scenarioSession    = _dataAccessService.GetScenarioSessions(userSubject).FirstOrDefault(s => s.ScenarioId == id);

                if (scenarioSession == null)
                {
                    return(null);
                }

                IEnumerable <Client.DataLayer.Model.Scenarios.ScenarioAccount> scenarioAccounts = _dataAccessService.GetScenarioAccounts(scenarioSession.ScenarioSessionId);

                foreach (var scenarioAccount in scenarioAccounts)
                {
                    _executionContextManager.UnregisterExecutionServices(scenarioAccount.AccountId);
                }

                _activeScenarios.TryRemove(userSubject, out ScenarioMonitoringData scenarioMonitoringData);

                return(scenarioSession);
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed {nameof(AbandonScenario)}({userSubject}, {id})", ex);
                throw;
            }
        }
示例#3
0
        public ScenarioSession ResumeScenario(string userSubject, int id)
        {
            _logger.Info($"{nameof(ResumeScenario)}({userSubject}, {id})");
            try
            {
                ScenarioSession scenarioSession = _dataAccessService.GetScenarioSessions(userSubject).FirstOrDefault(s => s.ScenarioId == id);

                if (scenarioSession == null)
                {
                    throw new ScenarioSessionNotFoundException(userSubject, id);
                }

                bool needInitialize = false;
                if (!_activeScenarios.TryGetValue(userSubject, out ScenarioMonitoringData scenarioMonitoringData))
                {
                    needInitialize = true;
                }
                else if (scenarioMonitoringData.ScenarioId != id)
                {
                    needInitialize = true;
                }

                if (needInitialize)
                {
                    scenarioMonitoringData = new ScenarioMonitoringData
                    {
                        ScenarioId        = id,
                        ScenarioSessionId = scenarioSession.ScenarioSessionId,
                        ActivationTime    = scenarioSession.StartTime,
                        LastUseTime       = DateTime.UtcNow
                    };
                    _activeScenarios.AddOrUpdate(userSubject, scenarioMonitoringData, (k, v) => v);


                    ScenarioDefinition scenarioDefinition = _scenarios[id];
                    IEnumerable <Client.DataLayer.Model.Scenarios.ScenarioAccount> scenarioAccounts = _dataAccessService.GetScenarioAccounts(scenarioSession.ScenarioSessionId);

                    foreach (var scenarioAccount in scenarioAccounts)
                    {
                        AccountDescriptor account = _accountsService.GetById(scenarioAccount.AccountId);
                        if (account.AccountType == AccountType.IdentityProvider || account.AccountType == AccountType.ServiceProvider)
                        {
                            AccountDescriptor accountDescriptor = _accountsService.Authenticate(scenarioAccount.AccountId, "qqq");
                            _executionContextManager.InitializeStateExecutionServices(accountDescriptor.AccountId, accountDescriptor.SecretSpendKey);
                        }
                    }
                }
                else
                {
                    scenarioMonitoringData.LastUseTime = DateTime.UtcNow;
                }

                return(scenarioSession);
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed {nameof(ResumeScenario)}({userSubject}, {id})", ex);
                throw;
            }
        }
示例#4
0
        public ActionResult <ScenarioDto> GetActiveScenario()
        {
            try
            {
                _logger.Info($"{nameof(GetActiveScenario)}()");
                IEnumerable <ScenarioDefinition> scenarioDefinitions = _scenarioRunner.GetScenarioDefinitions();

                ScenarioSession scenarioSession = _scenarioRunner.GetActiveScenarioSession(User.Identity.Name);

                if (scenarioSession != null)
                {
                    ScenarioDefinition scenarioDefinition = scenarioDefinitions.FirstOrDefault(s => s.Id == scenarioSession.ScenarioId);
                    return(new ScenarioDto
                    {
                        Name = scenarioDefinition.Name,
                        Id = scenarioDefinition.Id.ToString(),
                        IsActive = scenarioSession != null,
                        CurrentStep = scenarioSession?.CurrentStep ?? 0,
                        SessionId = scenarioSession?.ScenarioSessionId ?? 0,
                        StartTime = scenarioSession?.StartTime ?? DateTime.MinValue,
                        Steps = scenarioDefinition.Steps.Select(s => new ScenarioStepDto {
                            Id = s.Id, Caption = s.Caption
                        }).ToArray()
                    });
                }

                return(null);
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed {nameof(GetActiveScenario)}()", ex);

                throw;
            }
        }
示例#5
0
        public IActionResult GetAll(long scenarioId = 0)
        {
            ScenarioSession scenarioSession = scenarioId > 0 ? _dataAccessService.GetScenarioSessions(User.Identity.Name).FirstOrDefault(s => s.ScenarioId == scenarioId) : null;

            if (scenarioSession != null)
            {
                IEnumerable <ScenarioAccount> scenarioAccounts = _dataAccessService.GetScenarioAccounts(scenarioSession.ScenarioSessionId);
                var serviceProviders = _accountsService.GetAll().Where(a => a.AccountType == AccountType.ServiceProvider && scenarioAccounts.Any(sa => sa.AccountId == a.AccountId)).Select(a => new ServiceProviderInfoDto
                {
                    Id          = a.AccountId.ToString(CultureInfo.InvariantCulture),
                    Description = a.AccountInfo,
                    Target      = a.PublicSpendKey.ToHexString()
                });

                return(Ok(serviceProviders));
            }
            else
            {
                var serviceProviders = _accountsService.GetAll().Where(a => !a.IsPrivate && a.AccountType == AccountType.ServiceProvider).Select(a => new ServiceProviderInfoDto
                {
                    Id          = a.AccountId.ToString(CultureInfo.InvariantCulture),
                    Description = a.AccountInfo,
                    Target      = a.PublicSpendKey.ToHexString()
                });

                return(Ok(serviceProviders));
            }
        }
示例#6
0
        private void CreateNewSession(ScenarioInfo info)
        {
            session?.UnregisterAllEvents();

            //session.SetScoreSystem(NagaUtils.FindObjectOfType<IScoreSystem>()); This got removed because the TimeTrial mode doesn't include score
            session = new ScenarioSession(statUI, info);
            session.SetHitMissDeterminer(NagaUtils.FindObjectsOfType <IHitMissDeterminer>()[0]); //maybe have a global notifier like KillNotifier? TODO;
            session.SetTimerEvent(scenarioTimer.onTimerTicked);
            session.SetKillNotifier(KillNotifier.onKill);
        }
示例#7
0
        public ScenarioSession SetupScenario(string userSubject, int id)
        {
            _logger.Info($"{nameof(SetupScenario)}({userSubject}, {id})");
            try
            {
                if (!_scenarios.ContainsKey(id))
                {
                    throw new ArgumentOutOfRangeException(nameof(id));
                }

                if (_activeScenarios.TryRemove(userSubject, out ScenarioMonitoringData scenarioMonitoringData))
                {
                    AbandonScenario(userSubject, scenarioMonitoringData.ScenarioId);
                }

                ScenarioDefinition scenarioDefinition = _scenarios[id];

                long scenarioSessionId = _dataAccessService.AddNewScenarionSession(userSubject, id);
                _dataAccessService.UpdateScenarioSessionStep(scenarioSessionId, 1);
                ScenarioSession scenarioSession = _dataAccessService.GetScenarioSession(scenarioSessionId);

                scenarioMonitoringData = new ScenarioMonitoringData
                {
                    ScenarioId        = id,
                    ScenarioSessionId = scenarioSessionId,
                    ActivationTime    = scenarioSession.StartTime,
                    LastUseTime       = DateTime.UtcNow
                };

                _activeScenarios.AddOrUpdate(userSubject, scenarioMonitoringData, (k, v) => scenarioMonitoringData);

                SetupIdentityProviders(scenarioDefinition, scenarioSessionId);

                SetupServiceProviders(scenarioDefinition, scenarioSessionId);

                SetupUsers(scenarioDefinition, scenarioSessionId);

                return(scenarioSession);
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed {nameof(ResumeScenario)}({userSubject}, {id})", ex);
                throw;
            }
        }
示例#8
0
        public ActionResult <ScenarioDto> ResumeScenario(int scenarioId)
        {
            IEnumerable <ScenarioDefinition> scenarioDefinitions = _scenarioRunner.GetScenarioDefinitions();
            ScenarioDefinition scenarioDefinition = scenarioDefinitions.FirstOrDefault(s => s.Id == scenarioId);

            ScenarioSession scenarioSession = _scenarioRunner.ResumeScenario(User.Identity.Name, scenarioId);

            return(Ok(new ScenarioDto
            {
                Name = scenarioDefinition.Name,
                Id = scenarioId.ToString(),
                IsActive = scenarioSession != null,
                CurrentStep = scenarioSession?.CurrentStep ?? 0,
                SessionId = scenarioSession?.ScenarioSessionId ?? 0,
                StartTime = scenarioSession?.StartTime ?? DateTime.MinValue,
                Steps = scenarioDefinition.Steps.Select(s => new ScenarioStepDto {
                    Id = s.Id, Caption = s.Caption
                }).ToArray()
            }));
        }
        private void SaveSessionName(EnterpriseTestContext context, Guid scenarioId)
        {
            if (!string.IsNullOrEmpty(sessionName_ComboBox.Text))
            {
                ScenarioSession itemToSave = context.ScenarioSessions.FirstOrDefault(n => n.EnterpriseScenarioId == scenarioId && n.Name == sessionName_ComboBox.Text);

                if (itemToSave == null)
                {
                    itemToSave       = ScenarioSession.CreateScenarioSession(scenarioId, sessionName_ComboBox.Text, DateTime.Now);
                    itemToSave.Notes = notes_TextBox.Text;
                    context.AddToScenarioSessions(itemToSave);
                }
                else
                {
                    if (!itemToSave.Notes.Equals(notes_TextBox.Text))
                    {
                        itemToSave.Notes      = notes_TextBox.Text;
                        itemToSave.EditedDate = DateTime.Now;
                    }
                }
            }
        }
示例#10
0
        public IActionResult GetAll(long scenarioId = 0, bool withPrivate = false, int ofTypeOnly = 0)
        {
            ScenarioSession scenarioSession = scenarioId > 0 ? _dataAccessService.GetScenarioSessions(User.Identity.Name).FirstOrDefault(s => s.ScenarioId == scenarioId) : null;

            if (scenarioSession != null)
            {
                IEnumerable <ScenarioAccount> scenarioAccounts = _dataAccessService.GetScenarioAccounts(scenarioSession.ScenarioSessionId);

                var accounts = _accountsService.GetAll()
                               .Where(a => scenarioAccounts.Any(sa => sa.AccountId == a.AccountId))
                               .Select(a => _translatorsRepository.GetInstance <AccountDescriptor, AccountDto>().Translate(a));

                return(Ok(accounts));
            }
            else
            {
                var accounts = _accountsService.GetAll()
                               .Where(a => (withPrivate || !a.IsPrivate) && (ofTypeOnly == 0 || (int)a.AccountType == ofTypeOnly))
                               .Select(a => _translatorsRepository.GetInstance <AccountDescriptor, AccountDto>().Translate(a));

                return(Ok(accounts));
            }
        }
示例#11
0
        public void ProgressScenario(string userSubject, int id, bool forward = true)
        {
            _logger.Debug($"{nameof(ProgressScenario)}({userSubject}, {id}, {forward})");
            try
            {
                ScenarioSession scenarioSession = _dataAccessService.GetScenarioSessions(userSubject).FirstOrDefault(s => s.ScenarioId == id);

                if (scenarioSession == null)
                {
                    throw new ScenarioSessionNotFoundException(userSubject, id);
                }

                if (forward)
                {
                    _dataAccessService.UpdateScenarioSessionStep(scenarioSession.ScenarioSessionId, scenarioSession.CurrentStep + 1);
                }
                else
                {
                    _dataAccessService.UpdateScenarioSessionStep(scenarioSession.ScenarioSessionId, scenarioSession.CurrentStep - 1);
                }

                ScenarioMonitoringData scenarioMonitoringData = _activeScenarios.GetOrAdd(userSubject, u => new ScenarioMonitoringData
                {
                    ScenarioId        = id,
                    ScenarioSessionId = scenarioSession.ScenarioSessionId,
                    ActivationTime    = scenarioSession.StartTime,
                    LastUseTime       = DateTime.UtcNow
                });

                scenarioMonitoringData.LastUseTime = DateTime.UtcNow;
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed {nameof(ProgressScenario)}({userSubject}, {id}, {forward})", ex);
                throw;
            }
        }
示例#12
0
        public string GetScenarioCurrentStepContent(string userSubject, int id)
        {
            _logger.Debug($"{nameof(GetScenarioCurrentStepContent)}({userSubject}, {id})");
            try
            {
                ScenarioDefinition scenarioDefinition = _scenarios[id];
                ScenarioSession    scenarioSession    = _dataAccessService.GetScenarioSessions(userSubject).FirstOrDefault(s => s.ScenarioId == id);

                string path = Path.Combine(_scenariosConfiguration.ContentBasePath, id.ToString(), $"{scenarioSession.CurrentStep}.md");
                if (File.Exists(path))
                {
                    string content = File.ReadAllText(path);
                    return(content);
                }

                return(null);
            }
            catch (Exception ex)
            {
                _logger.Error($"Failed {nameof(GetScenarioCurrentStepContent)}({userSubject}, {id})", ex);

                throw;
            }
        }