Exemplo n.º 1
0
        public async Task <IActionResult> UploadPointOfInterest([FromForm] IFormFile file,
                                                                [FromForm] string poiData,
                                                                [FromQuery] string language)
        {
            var pointOfInterest = JsonConvert.DeserializeObject <PointOfInterestExtended>(poiData);

            if (_adapters.ContainsKey(pointOfInterest.Source) == false)
            {
                return(BadRequest($"{pointOfInterest.Source} is not a know POIs source..."));
            }
            if (file != null)
            {
                // HM TODO: add author?
                var imageName = await _wikimediaCommonGateway.UploadImage(pointOfInterest.Title, file.FileName, file.OpenReadStream(), new Coordinate().FromLatLng(pointOfInterest.Location));

                var url = await _wikimediaCommonGateway.GetImageUrl(imageName);

                var imageUrls = pointOfInterest.ImagesUrls.ToList();
                imageUrls.Insert(0, url);
                pointOfInterest.ImagesUrls = imageUrls.ToArray();
            }

            var adapter        = _adapters[pointOfInterest.Source];
            var tokenAndSecret = _cache.Get(User.Identity.Name);

            if (string.IsNullOrWhiteSpace(pointOfInterest.Id))
            {
                return(Ok(await adapter.AddPointOfInterest(pointOfInterest, tokenAndSecret, language)));
            }
            return(Ok(await adapter.UpdatePointOfInterest(pointOfInterest, tokenAndSecret, language)));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> UploadPointOfInterest([FromBody] PointOfInterestExtended pointOfInterest,
                                                                [FromQuery] string language)
        {
            if (!pointOfInterest.Source.Equals(Sources.OSM, StringComparison.InvariantCultureIgnoreCase))
            {
                return(BadRequest("OSM is the only supported source for this action..."));
            }
            if ((pointOfInterest.Description?.Length ?? 0) > 255)
            {
                return(BadRequest("Description must not be more than 255 characters..."));
            }
            if ((pointOfInterest.Title?.Length ?? 0) > 255)
            {
                return(BadRequest("Title must not be more than 255 characters..."));
            }
            var tokenAndSecret = _cache.Get(User.Identity.Name);
            var osmGateway     = _clientsFactory.CreateOAuthClient(_options.OsmConfiguration.ConsumerKey, _options.OsmConfiguration.ConsumerSecret, tokenAndSecret.Token, tokenAndSecret.TokenSecret);
            var user           = await osmGateway.GetUserDetails();

            var imageUrls = pointOfInterest.ImagesUrls ?? new string[0];

            for (var urlIndex = 0; urlIndex < imageUrls.Length; urlIndex++)
            {
                var fileName = string.IsNullOrWhiteSpace(pointOfInterest.Title)
                    ? pointOfInterest.Icon.Replace("icon-", "")
                    : pointOfInterest.Title;
                var file = _base64ImageConverter.ConvertToFile(imageUrls[urlIndex], fileName);
                if (file == null)
                {
                    continue;
                }
                using (var md5 = MD5.Create())
                {
                    var imageUrl = await _imageUrlStoreExecutor.GetImageUrlIfExists(md5, file.Content);

                    if (imageUrl != null)
                    {
                        imageUrls[urlIndex] = imageUrl;
                        continue;
                    }
                    using (var memoryStream = new MemoryStream(file.Content))
                    {
                        var imageName = await _wikimediaCommonGateway.UploadImage(pointOfInterest.Title,
                                                                                  pointOfInterest.Description, user.DisplayName, file.FileName, memoryStream,
                                                                                  pointOfInterest.Location.ToCoordinate());

                        imageUrls[urlIndex] = await _wikimediaCommonGateway.GetImageUrl(imageName);

                        await _imageUrlStoreExecutor.StoreImage(md5, file.Content, imageUrls[urlIndex]);
                    }
                }
            }

            if (string.IsNullOrWhiteSpace(pointOfInterest.Id))
            {
                return(Ok(await _pointsOfInterestProvider.AddPointOfInterest(pointOfInterest, tokenAndSecret, language)));
            }
            return(Ok(await _pointsOfInterestProvider.UpdatePointOfInterest(pointOfInterest, tokenAndSecret, language)));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> UploadPointOfInterest([FromBody] PointOfInterestExtended pointOfInterest,
                                                                [FromQuery] string language)
        {
            if (!pointOfInterest.Source.Equals(Sources.OSM, StringComparison.InvariantCultureIgnoreCase))
            {
                return(BadRequest("OSM is the only supported source for this action..."));
            }
            var tokenAndSecret = _cache.Get(User.Identity.Name);
            var osmGateway     = _httpGatewayFactory.CreateOsmGateway(tokenAndSecret);
            var user           = await osmGateway.GetUser();

            var imageUrls = pointOfInterest.ImagesUrls ?? new string[0];

            for (var urlIndex = 0; urlIndex < imageUrls.Length; urlIndex++)
            {
                var url      = imageUrls[urlIndex];
                var fileName = string.IsNullOrWhiteSpace(pointOfInterest.Title)
                    ? pointOfInterest.Icon.Replace("icon-", "")
                    : pointOfInterest.Title;
                var file = _base64ImageConverter.ConvertToFile(url, fileName);
                if (file == null)
                {
                    continue;
                }
                using (var memoryStream = new MemoryStream(file.Content))
                {
                    var imageName = await _wikimediaCommonGateway.UploadImage(pointOfInterest.Title,
                                                                              pointOfInterest.Description, user.DisplayName, file.FileName, memoryStream,
                                                                              new Coordinate().FromLatLng(pointOfInterest.Location));

                    url = await _wikimediaCommonGateway.GetImageUrl(imageName);

                    imageUrls[urlIndex] = url;
                }
            }

            if (string.IsNullOrWhiteSpace(pointOfInterest.Id))
            {
                return(Ok(await _pointsOfInterestProvider.AddPointOfInterest(pointOfInterest, tokenAndSecret, language)));
            }
            return(Ok(await _pointsOfInterestProvider.UpdatePointOfInterest(pointOfInterest, tokenAndSecret, language)));
        }