#4153 ongoing redirect logic

pull/4205/head
Kartones 9 years ago
parent 84d912006d
commit 061158d13f

@ -10,6 +10,8 @@
* Updated cartodb.js to 3.14.6
* Defaults Time Column to first date column or cartodb_id in Torque wizards [#4136](https://github.com/CartoDB/cartodb/pull/4136)
* Added more customized Google basemaps.
* New optional config option `maps_api_cdn_template` for static maps [#4153](https://github.com/CartoDB/cartodb/issues/4153)
* New `api/v2/viz/{id}/static/{width}/{height}.png` endpoint for retrieving static maps
Bugfixes:
* Fixed deletion of layers upon disconnecting synced datasources [#3718](https://github.com/CartoDB/cartodb/pull/3718)

@ -12,10 +12,10 @@ module Carto
include Carto::UUIDHelper
ssl_required :index, :show
ssl_allowed :vizjson2, :likes_count, :likes_list, :is_liked, :list_watching
ssl_allowed :vizjson2, :likes_count, :likes_list, :is_liked, :list_watching, :static_map
# TODO: compare with older, there seems to be more optional authentication endpoints
skip_before_filter :api_authorization_required, only: [:index, :vizjson2, :is_liked]
skip_before_filter :api_authorization_required, only: [:index, :vizjson2, :is_liked, :static_map]
before_filter :optional_api_authorization, only: [:index, :vizjson2, :is_liked]
before_filter :id_and_schema_from_params
@ -96,8 +96,37 @@ module Carto
render_jsonp(watcher.list)
end
def static_map
# Abusing here of .to_i fallback to 0 if not a proper integer
map_width = params.fetch('width',nil).to_i
map_height = params.fetch('height', nil).to_i
# @see https://github.com/CartoDB/Windshaft-cartodb/blob/b59e0a00a04f822154c6d69acccabaf5c2fdf628/docs/Map-API.md#limits
return(head 400) if map_width < 2 || map_height < 2 || map_width > 8192 || map_height > 8192
base_url = static_maps_base_url
final_url = base_url
redirect_to final_url
end
private
def static_maps_base_url
return(head 400) if current_user.nil?
if !Cartodb.config[:maps_api_cdn_template].nil? && !Cartodb.config[:maps_api_cdn_template].empty?
base_url = Cartodb.config[:maps_api_cdn_template]
else
base_url = ApplicationHelper.maps_api_template('public')
end
base_url.sub('{protocol}', CartoDB.protocol)
.sub('{user}', current_user.username)
end
def load_by_name_or_id
@table = is_uuid?(@id) ? Carto::UserTable.where(id: @id).first : nil

@ -10,6 +10,7 @@ defaults: &defaults
subdomainless_urls: false
http_port: 3000 # nil|integer. HTTP port to use when building urls. Leave empty to use default (80)
https_port: # nil|integer. HTTPS port to use when building urls. Leave empty to use default (443)
maps_api_cdn_template: # nil|string. E.g. '{protocol}://{zone}.cartocdn/{user}/api/v1/map/static/named/{tpl_id}/{width}/{height}.png'
secret_token: '71c2b25921b84a1cb21c71503ab8fb23'
account_host: 'localhost.lan:3000'
account_path: '/account'

@ -347,6 +347,7 @@ CartoDB::Application.routes.draw do
# Visualizations
get '(/user/:user_domain)(/u/:user_domain)/api/v2/viz/:id/viz' => 'visualizations#vizjson2', as: :api_v2_visualizations_vizjson, constraints: { id: /[^\/]+/ }
get '(/user/:user_domain)(/u/:user_domain)/api/v2/viz/:id/static/:width/:height.png' => 'visualizations#static_map', as: :api_v2_visualizations_static_map, constraints: { id: /[^\/]+/ }
end

Loading…
Cancel
Save