Skip to content

Commit ca35951

Browse files
authored
Merge pull request #3789 from davidfischer/sustainability-api-jsonp
Use JSONP for sustainability API
2 parents 7b8efe3 + 24ee5e5 commit ca35951

File tree

2 files changed

+26
-32
lines changed

2 files changed

+26
-32
lines changed

readthedocs/core/signals.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616

1717
log = logging.getLogger(__name__)
1818

19-
WHITELIST_URLS = ['/api/v2/footer_html', '/api/v2/search',
20-
'/api/v2/docsearch', '/api/v2/sustainability']
19+
WHITELIST_URLS = [
20+
'/api/v2/footer_html',
21+
'/api/v2/search',
22+
'/api/v2/docsearch',
23+
]
2124

2225

2326
webhook_github = Signal(providing_args=['project', 'data', 'event'])
@@ -42,9 +45,6 @@ def decide_if_cors(sender, request, **kwargs): # pylint: disable=unused-argumen
4245
for url in WHITELIST_URLS:
4346
if request.path_info.startswith(url):
4447
valid_url = True
45-
# Don't do domain checking for this API for now
46-
if url == '/api/v2/sustainability':
47-
return True
4848

4949
if valid_url:
5050
project_slug = request.GET.get('project', None)

readthedocs/core/static-src/core/js/doc-embed/sponsorship.js

+21-27
Original file line numberDiff line numberDiff line change
@@ -60,24 +60,6 @@ function create_footer_placement() {
6060
return null;
6161
}
6262

63-
/*
64-
* Returns an array of possible places where a promo could go
65-
*/
66-
function get_placements() {
67-
var placements = [];
68-
var placement_funcs = [create_footer_placement, create_sidebar_placement];
69-
var placement;
70-
71-
for (var i = 0; i < placement_funcs.length; i += 1) {
72-
placement = placement_funcs[i]();
73-
if (placement) {
74-
placements.push(placement);
75-
}
76-
}
77-
78-
return placements;
79-
}
80-
8163
function Promo(data) {
8264
this.id = data.id; // analytics id
8365
this.div_id = data.div_id || '';
@@ -128,41 +110,53 @@ Promo.prototype.post_promo_display = function () {
128110
};
129111

130112
function init() {
131-
var post_data = {};
113+
var request_data = {format: "jsonp"};
114+
var div_ids = [];
115+
var display_types = [];
116+
var placement_funcs = [create_footer_placement, create_sidebar_placement];
132117
var params;
118+
var placement;
133119

134120
rtd = rtddata.get();
135121

136122
if (!rtd.show_promo()) {
137123
return;
138124
}
139125

140-
post_data.placements = get_placements(rtd);
141-
post_data.project = rtd.project;
126+
for (var i = 0; i < placement_funcs.length; i += 1) {
127+
placement = placement_funcs[i]();
128+
if (placement) {
129+
div_ids.push(placement.div_id);
130+
display_types.push(placement.display_type);
131+
}
132+
}
133+
134+
request_data.div_ids = div_ids.join('|');
135+
request_data.display_types = display_types.join('|');
136+
request_data.project = rtd.project;
142137

143138
if (typeof URL !== 'undefined' && typeof URLSearchParams !== 'undefined') {
144139
// Force a specific promo to be displayed
145140
params = new URL(window.location).searchParams;
146141
if (params.get('force_promo')) {
147-
post_data.force_promo = params.get('force_promo');
142+
request_data.force_promo = params.get('force_promo');
148143
}
149144

150145
// Force a promo from a specific campaign
151146
if (params.get('force_campaign')) {
152-
post_data.force_campaign = params.get('force_campaign');
147+
request_data.force_campaign = params.get('force_campaign');
153148
}
154149
}
155150

156151
// Request a promo to inject onto the page
157152
$.ajax({
158153
url: rtd.api_host + "/api/v2/sustainability/",
159-
type: 'post',
154+
crossDomain: true,
160155
xhrFields: {
161156
withCredentials: true,
162157
},
163-
dataType: "json",
164-
data: JSON.stringify(post_data),
165-
contentType: "application/json",
158+
dataType: "jsonp",
159+
data: request_data,
166160
success: function (data) {
167161
var promo;
168162
if (data && data.div_id && data.html) {

0 commit comments

Comments
 (0)