Ejemplo n.º 1
0
        public void DiscreteLogarithmCreateDtoTest()
        {
            var dateTime = DateTime.Now;
            var dto      = new DiscreteLogarithmCreateDto {
                Generator = 1, Modulus = 2, Result = 3, StartTime = dateTime
            };

            Assert.AreEqual(1, dto.Generator);
            Assert.AreEqual(2, dto.Modulus);
            Assert.AreEqual(3, dto.Result);
            Assert.AreEqual(dateTime, dto.StartTime);
        }
Ejemplo n.º 2
0
        public IActionResult CreateResource([FromBody] DiscreteLogarithmCreateDto createDto)
        {
            var result = base.CreateResource <DiscreteLogarithmCreateDto, DiscreteLogarithmGetDto>(createDto);

            if (CreatedResource == null)
            {
                return(result);
            }

            if (User.Identity.IsAuthenticated)
            {
                CreatedResource.SubscriberId = User.Claims.First(claim => claim.Type == JwtClaimTypes.Subject).Value;
            }

            CreatedResource.JobId = CreatedResource.StartJobService();
            ResourceDataService.Update(CreatedResource);
            ResourceDataService.SaveChanges();

            ExecutionLogger.SetExecutionId(CreatedResource.Id);
            ExecutionLogger.Info("Enqueued for execution.");

            return(result);
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Solve(SolveViewModel model)
        {
            if (model.Problem == Problem.IntegerFactorization)
            {
                if (ModelState[nameof(SolveViewModel.Number)].Errors.Any())
                {
                    model.IsValid = false;
                    ModelState.Clear();
                    return(View(model));
                }

                try
                {
                    var httpClient = await _quantumAlgorithmsHttpClient.GetClient(User.Identity.IsAuthenticated);

                    var request = new IntegerFactorizationCreateDto {
                        Number = model.Number
                    };
                    var response = await httpClient.PostAsync("Api/IntegerFactorization", new StringContent(
                                                                  JsonConvert.SerializeObject(request),
                                                                  Encoding.UTF8, "application/json"));

                    if (!response.IsSuccessStatusCode)
                    {
                        model.ApiRequestFailed = true;
                        ModelState.Clear();
                        return(View(model));
                    }

                    var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var executionId = JsonConvert.DeserializeObject <IntegerFactorizationGetDto>(responseString).Id;

                    return(RedirectToAction("IntegerFactorization", "Solve", new { Id = executionId }));
                }
                catch (Exception)
                {
                    return(RedirectToAction("Logout", "Authentication"));
                }
            }

            if (model.Problem == Problem.DiscreteLogarithm)
            {
                if (ModelState[nameof(SolveViewModel.Result)].Errors.Any() ||
                    ModelState[nameof(SolveViewModel.Generator)].Errors.Any() ||
                    ModelState[nameof(SolveViewModel.Modulus)].Errors.Any())
                {
                    model.IsValid = false;
                    ModelState.Clear();
                    return(View(model));
                }

                try
                {
                    var httpClient = await _quantumAlgorithmsHttpClient.GetClient(User.Identity.IsAuthenticated);

                    var request = new DiscreteLogarithmCreateDto
                    {
                        Result    = model.Result,
                        Generator = model.Generator,
                        Modulus   = model.Modulus
                    };
                    var response = await httpClient.PostAsync("Api/DiscreteLogarithm", new StringContent(
                                                                  JsonConvert.SerializeObject(request),
                                                                  Encoding.UTF8, "application/json"));

                    if (!response.IsSuccessStatusCode)
                    {
                        model.ApiRequestFailed = true;
                        ModelState.Clear();
                        return(View(model));
                    }

                    var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var executionId = JsonConvert.DeserializeObject <IntegerFactorizationGetDto>(responseString).Id;

                    return(RedirectToAction("DiscreteLogarithm", "Solve", new { Id = executionId }));
                }
                catch (Exception)
                {
                    return(RedirectToAction("Logout", "Authentication"));
                }
            }

            return(View());
        }