Beispiel #1
0
        public async Task <IActionResult> GetSamplesPage(int id, DateTime start, DateTime end)
        {
            if (start.Equals(DateTime.MinValue) || end.Equals(DateTime.MinValue))
            {
                return(BadRequest(ModelState));
            }

            if (end < start)
            {
                var tmp = start;
                start = end;
                end   = tmp;
            }

            var request = new SampleAccessRequest()
            {
                Selector   = SampleAccessRequest.SelectionCriteria.Pet,
                UserId     = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                PetId      = id,
                RangeStart = start,
                RangeEnd   = end
            };


            var port    = new BasicPresenter <GenericDataResponse <IEnvDataSample> >();
            var success = await _sampleDataUseCase.Handle(request, port);

            if (!success)
            {
                return(BadRequest());
            }
            return(new OkObjectResult(port.Response.Result.Select(SampleDto.From)));
        }
Beispiel #2
0
        public async Task <IActionResult> PostNewSample([FromBody] EnvSampleSubmission sample)
        {
            // Ensure model is correctly populated.
            if (!ModelState.IsValid ||
                sample.Environment == Guid.Empty)
            {
                return(BadRequest(ModelState));
            }

            // Submit to core:
            var userId = _claimsCompat.ExtractFirstIdClaim(HttpContext.User);

            if (userId == Guid.Empty)
            {
                return(BadRequest("Who are you?"));
            }

            var request = new NewSampleRequest
            {
                Sample = sample,
                UserId = userId
            };
            var port = new BasicPresenter <BlankResponse>();

            var success = await _addSample.Handle(request, port);

            return((success) ? Ok() : BadRequest("Failed to post sample"));
        }
Beispiel #3
0
        public async Task <IActionResult> GetPetDetails(int id)
        {
            var userId = _claimsCompat.ExtractFirstIdClaim(HttpContext.User);

            // Just request all for the user while waiting for improvements on Core data access
            // logic.
            var request = new DataAccessRequest <IPet>
            {
                UserId = userId,
                // TODO: when capable swap to something that'd enable specifying the exact
                //       entity to access.
                Strategy = DataAccessRequest <IPet> .AcquisitionStrategy.All
            };
            var port = new BasicPresenter <GenericDataResponse <IPet> >();

            var success = await _getPetDataUseCase.Handle(request, port);

            if (!success)
            {
                return(BadRequest());
            }

            // search for the requested Id:
            var pet = port.Response.Result.FirstOrDefault(p => p.Id == id);

            return((pet != null) ? new OkObjectResult(PetDto.From(pet)) : BadRequest());
        }
        public async Task <IActionResult> GetAllSpecies()
        {
            // Species are not user-specific, so we won't need to specify that in the request.
            var request = new DataAccessRequest <ISpecies> {
                Strategy = DataAccessRequest <ISpecies> .AcquisitionStrategy.All
            };
            var port    = new BasicPresenter <GenericDataResponse <ISpecies> >();
            var success = await _getSpeciesData.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response.Result.Select(SpeciesDto.From)) : BadRequest());
        }
Beispiel #5
0
        public async Task <IActionResult> AcquireTokenForDaemon()
        {
            BasicPresenter <LoginResponse> port    = new BasicPresenter <LoginResponse>();
            ProviderGrantRequest           request = new ProviderGrantRequest
            {
                OnBehalfOf = _claimCompat.ExtractFirstIdClaim(HttpContext.User)
            };

            var success = await _dataProviderGrant.Handle(request, port);

            return((success) ?  new OkObjectResult(port.Response) : BadRequest());
        }
Beispiel #6
0
        public async Task <IActionResult> GetSamples()
        {
            var userId  = _claimsCompat.ExtractFirstIdClaim(HttpContext.User);
            var port    = new BasicPresenter <GenericDataResponse <IEnvDataSample> >();
            var request = new DataAccessRequest <IEnvDataSample>
            {
                UserId   = userId,
                Strategy = DataAccessRequest <IEnvDataSample> .AcquisitionStrategy.All
            };
            var success = await _sampleRetrieval.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response.Result.Select(SampleDto.From)) : BadRequest());
        }
Beispiel #7
0
        public async Task <IActionResult> GetOwnedNodesForUser()
        {
            var request = new DataAccessRequest <IController>
            {
                UserId   = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                Strategy = DataAccessRequest <IController> .AcquisitionStrategy.All
            };

            var port    = new BasicPresenter <GenericDataResponse <IController> >();
            var success = await _getUseCase.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response.Result.Select(ControllerDto.From)) : BadRequest());
        }
Beispiel #8
0
        public async Task <IActionResult> GetAllEnvsForUser()
        {
            var request = new DataAccessRequest <IEnvironment>
            {
                UserId   = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                Strategy = DataAccessRequest <IEnvironment> .AcquisitionStrategy.All
            };

            var port    = new BasicPresenter <GenericDataResponse <IEnvironment> >();
            var success = await _getEnvironments.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response.Result.Select(EnvironmentDto.From).ToList()) : BadRequest());
        }
Beispiel #9
0
        public async Task <IActionResult> RegisterEnvToUser(Guid envGuid)
        {
            var request = new RegisterEnvironmentRequest
            {
                Owner      = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                MfgId      = envGuid,
                CreateMode = RegisterEnvironmentRequest.Mode.Touch,
            };

            var port    = new BasicPresenter <NewEntityResponse <Guid> >();
            var success = await _registerEnvironment.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response.Id) : BadRequest(ModelState));
        }
Beispiel #10
0
        public async Task <IActionResult> Login([FromBody] LoginRequest request)
        {
            if (!ModelState.IsValid ||
                string.IsNullOrWhiteSpace(request.Username) ||
                string.IsNullOrWhiteSpace(request.Password))
            {
                return(BadRequest(ModelState));
            }

            var port    = new BasicPresenter <LoginResponse>();
            var success = await _loginUseCase.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response) : BadRequest());
        }
        public async Task <IActionResult> CreateNew([FromBody] CreateUserRequest request)
        {
            if (!ModelState.IsValid ||
                string.IsNullOrWhiteSpace(request.UserName) ||
                string.IsNullOrWhiteSpace(request.Email) ||
                string.IsNullOrWhiteSpace(request.Password))
            {
                return(BadRequest(ModelState));
            }

            var port   = new BasicPresenter <NewUserResponse>();
            var result = await _addUser.Handle(request, port);

            return((result) ? new OkObjectResult(port.Response.Id) : BadRequest());
        }
Beispiel #12
0
        public async Task <IActionResult> GetBlobUri(string blobName)
        {
            var request = new BlobStorageRequest
            {
                Mode     = BlobStorageRequest.Operation.Read,
                Category = "images",
                BlobName = blobName,
                UserId   = Guid.NewGuid()
            };
            var port = new BasicPresenter <BlobUriResponse>();

            var success = await _useCase.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response) : new NotFoundResult());
        }
Beispiel #13
0
        public async Task <IActionResult> GetPetImage(int id)
        {
            var request = new PetImageRequest
            {
                Update  = false,
                UserId  = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                PetId   = id,
                Content = null
            };

            var port = new BasicPresenter <BlobUriResponse>();

            var success = await _imageUseCase.Handle(request, port);

            return((success) ? new RedirectResult(port.Response.Uri.ToString()) : NotFound());
        }
        public async Task <IActionResult> CreateNewSpecies([FromBody] CreateSpeciesRequest model)
        {
            if (!ModelState.IsValid ||
                string.IsNullOrWhiteSpace(model.Name) ||
                string.IsNullOrEmpty(model.ScientificName) ||
                Math.Abs(model.Latitude) > 90.0 ||
                Math.Abs(model.Longitude) > 180.0)
            {
                return(BadRequest(ModelState));
            }

            var port    = new BasicPresenter <NewEntityResponse <int> >();
            var success = await _addSpecies.Handle(model, port);

            return((success) ? new OkObjectResult(port.Response.Id) : BadRequest());
        }
Beispiel #15
0
        public async Task <IActionResult> MigratePet(int id, Guid toEnv)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var request = new MigratePetRequest
            {
                UserId = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                PetId  = id,
                EnvId  = toEnv
            };

            var port   = new BasicPresenter <BlankResponse>();
            var result = await _migratePetUseCase.Handle(request, port);

            return((result) ? Ok() : BadRequest());
        }
Beispiel #16
0
        public async Task <IActionResult> RegisterController(Guid controllerId)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var request = new NodeUpdateRequest
            {
                UserId       = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                ControllerId = controllerId,
                Operation    = NodeUpdateRequest.Mode.Create
            };

            var port   = new BasicPresenter <GenericDataResponse <IController> >();
            var result = await _updateNodeUseCase.Handle(request, port);

            return((result) ? new OkObjectResult(ControllerDto.From(port.Response.Result.First())) : BadRequest());
        }
Beispiel #17
0
        public async Task <IActionResult> GetSamples(string from, string to)
        {
            if (!ModelState.IsValid ||
                string.IsNullOrWhiteSpace(from))
            {
                return(BadRequest(ModelState));
            }

            DateTime a, b;

            try
            {
                a = DateTime.Parse(from);
                b = (to != null) ? DateTime.Parse(to) : DateTime.MaxValue;
            }
            catch (Exception)
            {
                return(BadRequest(ModelState));
            }

            if (a > b)
            {
                var tmp = a;
                a = b;
                b = tmp;
            }

            var userId  = _claimsCompat.ExtractFirstIdClaim(HttpContext.User);
            var port    = new BasicPresenter <GenericDataResponse <IEnvDataSample> >();
            var request = new DataAccessRequest <IEnvDataSample>
            {
                UserId   = userId,
                Strategy = DataAccessRequest <IEnvDataSample> .AcquisitionStrategy.Range,

                // NOTE: ISTR having issues with DateTime static values not having the unspecified
                // 'kind', as such we may have some issues with naive DateTimes here.
                SelectionPredicate = (sample => InDateTimeRange(sample.Captured, a, b))
            };
            var success = await _sampleRetrieval.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response.Result.Select(SampleDto.From)) : BadRequest());
        }
Beispiel #18
0
        public async Task <IActionResult> SetPeers([FromBody] PeerUpdateForm form)
        {
            if (!ModelState.IsValid ||
                form.ControllerId == Guid.Empty)
            {
                return(BadRequest(ModelState));
            }

            var request = new NodeUpdateRequest
            {
                UserId       = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                ControllerId = form.ControllerId,
                PeerIds      = form.PeerIds,
                Operation    = NodeUpdateRequest.Mode.PeerUpdate
            };

            var port   = new BasicPresenter <GenericDataResponse <IController> >();
            var result = await _updateNodeUseCase.Handle(request, port);

            return((result) ? new OkObjectResult(ControllerDto.From(port.Response.Result.First())) : BadRequest());
        }
Beispiel #19
0
        public async Task <IActionResult> RefreshTokenExchange([FromBody] RefreshExchangeForm form)
        {
            if (!ModelState.IsValid ||
                string.IsNullOrWhiteSpace(form.UserId) ||
                string.IsNullOrWhiteSpace(form.EncodedToken))
            {
                return(BadRequest(ModelState));
            }

            // Convert to Core request.
            var request = new TokenExchangeRequest
            {
                EncodedRefreshToken = form.EncodedToken, UserId = form.UserId
            };

            // submit a request to Core:
            var port    = new BasicPresenter <LoginResponse>();
            var success = await _refreshTokenExchange.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response) : BadRequest());
        }
Beispiel #20
0
        public async Task <IActionResult> CreateNewPet([FromBody] NewPetForm petInfo)
        {
            if (!ModelState.IsValid ||
                string.IsNullOrWhiteSpace(petInfo.Name))
            {
                return(BadRequest(ModelState));
            }

            // Convert into core Dto.NewPetRequest.
            var request = new CreatePetRequest
            {
                Name        = petInfo.Name,
                SpeciesType = petInfo.SpeciesId,
                Morph       = petInfo.Morph,
                User        = _claimsCompat.ExtractFirstIdClaim(HttpContext.User)
            };

            var port    = new BasicPresenter <NewEntityResponse <int> >();
            var success = await _addPetUseCase.Handle(request, port);

            return((success) ? new OkObjectResult(port.Response.Id) : BadRequest());
        }
Beispiel #21
0
        public async Task <IActionResult> PutBlob(string blobName)
        {
            var request = new BlobStorageRequest
            {
                Mode     = BlobStorageRequest.Operation.Write,
                Category = "images",
                BlobName = blobName,
                UserId   = Guid.NewGuid(),
                Content  = Request.Body
            };

            var port    = new BasicPresenter <BlobUriResponse>();
            var success = await _useCase.Handle(request, port);

            if (!success)
            {
                return(BadRequest("API error"));
            }
            return(new OkObjectResult(port.Response)
            {
                StatusCode = 201 // CreatedAtResult wasn't quite my cup of tea, should figure that out.
            });
        }
Beispiel #22
0
        public async Task <IActionResult> GetIdsForUsersPets()
        {
            var userId = _claimsCompat.ExtractFirstIdClaim(HttpContext.User);

            // fetch all pets for the given user.
            var request = new DataAccessRequest <IPet>
            {
                UserId   = userId,
                Strategy = DataAccessRequest <IPet> .AcquisitionStrategy.All
            };
            var port    = new BasicPresenter <GenericDataResponse <IPet> >();
            var success = await _getPetDataUseCase.Handle(request, port);

            if (!success)
            {
                return(BadRequest());
            }

            // Transform into just IDs
            var idList = port.Response.Result.Select(pet => pet.Id).ToImmutableList();

            return(new OkObjectResult(idList));
        }
Beispiel #23
0
        public async Task <IActionResult> UpdateProfileImage(int id)
        {
            // Ensure content type is supported
            // TODO: look at applying some sort of 'upstream' filter on this instead of checking here.
            //       (it'll probably help with preflight requests and the like)
            var supportedMimeTypes = new [] { "image/png", "image/jpeg" };

            if (!supportedMimeTypes.Any(x => x.Equals(Request.ContentType)))
            {
                return(new UnsupportedMediaTypeResult());
            }

            var request = new PetImageRequest
            {
                Update   = true,
                UserId   = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                PetId    = id,
                Content  = Request.Body,
                MimeType = Request.ContentType
            };

            var port = new BasicPresenter <BlobUriResponse>();

            var success = await _imageUseCase.Handle(request, port);

            if (success)
            {
                return new OkObjectResult(port.Response)
                       {
                           StatusCode = 201
                       }
            }
            ;

            return(BadRequest());
        }
Beispiel #24
0
        public async Task <IActionResult> GetEnvInfo(Guid id)
        {
            // piggy back off the 'get all' use.
            var request = new DataAccessRequest <IEnvironment>
            {
                UserId   = _claimsCompat.ExtractFirstIdClaim(HttpContext.User),
                Strategy = DataAccessRequest <IEnvironment> .AcquisitionStrategy.All
            };

            var port    = new BasicPresenter <GenericDataResponse <IEnvironment> >();
            var success = await _getEnvironments.Handle(request, port);

            if (success)
            {
                var match = port.Response.Result.FirstOrDefault(e => e.Id == id);
                if (match != null)
                {
                    return(new OkObjectResult(EnvironmentDto.From(match)));
                }
                return(NotFound());
            }

            return(BadRequest());
        }