Skip to content

Commit 522d1c8

Browse files
committed
Update setuid endpoint to accept only bidder name
1 parent 7ac551f commit 522d1c8

12 files changed

Lines changed: 34 additions & 93 deletions

File tree

src/main/java/org/prebid/server/auction/model/SetuidContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class SetuidContext {
2727

2828
Account account;
2929

30-
String bidderQueryParam;
30+
String bidder;
3131

3232
@JsonIgnore
3333
Usersyncer usersyncer;

src/main/java/org/prebid/server/bidder/Usersyncer.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ public class Usersyncer {
99

1010
boolean enabled;
1111

12-
String bidder;
13-
1412
String cookieFamilyName;
1513

1614
UsersyncMethod iframe;
@@ -21,16 +19,14 @@ public class Usersyncer {
2119

2220
List<Integer> gppSidToSkip;
2321

24-
public static Usersyncer of(String bidder,
25-
String cookieFamilyName,
22+
public static Usersyncer of(String cookieFamilyName,
2623
UsersyncMethod iframe,
2724
UsersyncMethod redirect,
2825
boolean skipWhenInGdprScope,
2926
List<Integer> gppSidToSkip) {
3027

3128
return of(
3229
true,
33-
bidder,
3430
cookieFamilyName,
3531
iframe,
3632
redirect,

src/main/java/org/prebid/server/handler/SetuidHandler.java

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import org.prebid.server.vertx.verticles.server.application.ApplicationResource;
5959

6060
import java.util.Collections;
61-
import java.util.Comparator;
6261
import java.util.List;
6362
import java.util.Map;
6463
import java.util.Objects;
@@ -89,7 +88,6 @@ public class SetuidHandler implements ApplicationResource {
8988
private final Metrics metrics;
9089
private final TimeoutFactory timeoutFactory;
9190
private final Map<String, Usersyncer> bidderToUsersyncer;
92-
private final Map<String, Usersyncer> cookieNameToUsersyncer;
9391

9492
public SetuidHandler(long defaultTimeout,
9593
UidsCookieService uidsCookieService,
@@ -113,9 +111,14 @@ public SetuidHandler(long defaultTimeout,
113111
this.analyticsDelegator = Objects.requireNonNull(analyticsDelegator);
114112
this.metrics = Objects.requireNonNull(metrics);
115113
this.timeoutFactory = Objects.requireNonNull(timeoutFactory);
114+
this.bidderToUsersyncer = collectUsersyncers(bidderCatalog);
115+
}
116+
117+
private static Map<String, Usersyncer> collectUsersyncers(BidderCatalog bidderCatalog) {
116118
validateUsersyncersDuplicates(bidderCatalog);
117-
this.bidderToUsersyncer = collectUsersyncersByBidderName(bidderCatalog);
118-
this.cookieNameToUsersyncer = collectUsersyncersByCookieName(bidderCatalog);
119+
return bidderCatalog.usersyncReadyBidders().stream()
120+
.collect(Collectors.toMap(Function.identity(),
121+
bidder -> bidderCatalog.usersyncerByName(bidder).orElseThrow()));
119122
}
120123

121124
private static void validateUsersyncersDuplicates(BidderCatalog bidderCatalog) {
@@ -146,20 +149,6 @@ private static boolean isAliasWithRootCookieFamilyName(BidderCatalog bidderCatal
146149
&& parentCookieFamilyName.equals(bidderCookieFamilyName);
147150
}
148151

149-
private static Map<String, Usersyncer> collectUsersyncersByBidderName(BidderCatalog bidderCatalog) {
150-
return bidderCatalog.usersyncReadyBidders().stream()
151-
.map(bidder -> bidderCatalog.usersyncerByName(bidder).orElseThrow())
152-
.collect(Collectors.toMap(Usersyncer::getBidder, Function.identity()));
153-
}
154-
155-
private static Map<String, Usersyncer> collectUsersyncersByCookieName(BidderCatalog bidderCatalog) {
156-
return bidderCatalog.usersyncReadyBidders().stream()
157-
.sorted(Comparator.comparing(bidderName -> BooleanUtils.toInteger(bidderCatalog.isAlias(bidderName))))
158-
.filter(StreamUtil.distinctBy(bidderCatalog::cookieFamilyName))
159-
.map(bidderName -> bidderCatalog.usersyncerByName(bidderName).orElseThrow())
160-
.collect(Collectors.toMap(Usersyncer::getCookieFamilyName, Function.identity()));
161-
}
162-
163152
@Override
164153
public List<HttpEndpoint> endpoints() {
165154
return Collections.singletonList(HttpEndpoint.of(HttpMethod.GET, Endpoint.setuid.value()));
@@ -175,13 +164,10 @@ public void handle(RoutingContext routingContext) {
175164
private Future<SetuidContext> toSetuidContext(RoutingContext routingContext) {
176165
final UidsCookie uidsCookie = uidsCookieService.parseFromRequest(routingContext);
177166
final HttpServerRequest httpRequest = routingContext.request();
178-
final String bidderQueryParam = httpRequest.getParam(BIDDER_PARAM);
167+
final String bidder = httpRequest.getParam(BIDDER_PARAM);
179168
final String requestAccount = httpRequest.getParam(ACCOUNT_PARAM);
180169
final Timeout timeout = timeoutFactory.create(defaultTimeout);
181-
182-
final Usersyncer usersyncer = ObjectUtils.firstNonNull(
183-
bidderToUsersyncer.get(bidderQueryParam),
184-
cookieNameToUsersyncer.get(bidderQueryParam));
170+
final Usersyncer usersyncer = bidderToUsersyncer.get(bidder);
185171

186172
return accountById(requestAccount, timeout)
187173
.compose(account -> setuidPrivacyContextFactory.contextFrom(httpRequest, account, timeout)
@@ -190,7 +176,7 @@ private Future<SetuidContext> toSetuidContext(RoutingContext routingContext) {
190176
.uidsCookie(uidsCookie)
191177
.timeout(timeout)
192178
.account(account)
193-
.bidderQueryParam(bidderQueryParam)
179+
.bidder(bidder)
194180
.usersyncer(usersyncer)
195181
.privacyContext(privacyContext)
196182
.build()))
@@ -226,20 +212,18 @@ private void processSetuidContext(SetuidContext setuidContext, RoutingContext ro
226212
return;
227213
}
228214

229-
final String bidderName = setuidContext.getUsersyncer().getBidder();
230-
231215
final AccountPrivacyConfig privacyConfig = setuidContext.getAccount().getPrivacy();
232216
final AccountGdprConfig accountGdprConfig = privacyConfig != null ? privacyConfig.getGdpr() : null;
233217

234218
Future.all(
235219
tcfDefinerService.isAllowedForHostVendorId(tcfContext),
236220
tcfDefinerService.resultForBidderNames(
237-
Collections.singleton(bidderName), tcfContext, accountGdprConfig))
221+
Collections.singleton(setuidContext.getBidder()), tcfContext, accountGdprConfig))
238222
.onComplete(hostTcfResponseResult -> respondByTcfResponse(hostTcfResponseResult, setuidContext));
239223
}
240224

241225
private void validateSetuidContext(SetuidContext setuidContext) {
242-
if (StringUtils.isBlank(setuidContext.getBidderQueryParam())) {
226+
if (StringUtils.isBlank(setuidContext.getBidder())) {
243227
throw new InvalidRequestException("\"bidder\" query param is required");
244228
}
245229

@@ -283,7 +267,7 @@ private void respondByTcfResponse(AsyncResult<CompositeFuture> hostTcfResponseRe
283267

284268
final Map<String, PrivacyEnforcementAction> vendorIdToAction = bidderTcfResponse.getActions();
285269
final PrivacyEnforcementAction action = vendorIdToAction != null
286-
? vendorIdToAction.get(setuidContext.getUsersyncer().getBidder())
270+
? vendorIdToAction.get(setuidContext.getBidder())
287271
: null;
288272

289273
final boolean notInGdprScope = BooleanUtils.isFalse(bidderTcfResponse.getUserInGdprScope());

src/main/java/org/prebid/server/spring/config/bidder/util/UsersyncerCreator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ public Usersyncer createAndValidate(String bidder, UsersyncConfigurationProperti
3030

3131
return Usersyncer.of(
3232
usersync.getEnabled(),
33-
bidder,
3433
cookieFamilyName,
3534
toMethod(UsersyncMethodType.IFRAME, usersync.getIframe(), bidder),
3635
toMethod(UsersyncMethodType.REDIRECT, usersync.getRedirect(), bidder),

src/test/java/org/prebid/server/auction/ExchangeServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ public void setUp() {
305305
given(bidderCatalog.isValidName(anyString())).willReturn(true);
306306
given(bidderCatalog.isActive(anyString())).willReturn(true);
307307
given(bidderCatalog.usersyncerByName(anyString()))
308-
.willReturn(Optional.of(Usersyncer.of("bidder", "cookieFamily", null, null, false, null)));
308+
.willReturn(Optional.of(Usersyncer.of("cookieFamily", null, null, false, null)));
309309
given(bidderCatalog.bidderInfoByName(anyString())).willReturn(BidderInfo.create(
310310
true,
311311
null,

src/test/java/org/prebid/server/bidder/BidderCatalogTest.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ public void metaInfoByNameShouldReturnNullForUnknownBidder() {
218218
@Test
219219
public void usersyncerByNameShouldReturnUsersyncerForKnownBidderIgnoringCase() {
220220
// given
221-
final Usersyncer usersyncer = Usersyncer.of("BIDder", "name", null, null, false, null);
221+
final Usersyncer usersyncer = Usersyncer.of("name", null, null, false, null);
222222
final BidderDeps bidderDeps = BidderDeps.of(singletonList(BidderInstanceDeps.builder()
223223
.name("BIDder")
224224
.deprecatedNames(emptyList())
@@ -233,7 +233,7 @@ public void usersyncerByNameShouldReturnUsersyncerForKnownBidderIgnoringCase() {
233233
@Test
234234
public void cookieFamilyNameShouldReturnCookieFamilyForKnownBidderIgnoringCase() {
235235
// given
236-
final Usersyncer usersyncer = Usersyncer.of("BIDder", "name", null, null, false, null);
236+
final Usersyncer usersyncer = Usersyncer.of("name", null, null, false, null);
237237
final BidderDeps bidderDeps = BidderDeps.of(singletonList(BidderInstanceDeps.builder()
238238
.name("BIDder")
239239
.deprecatedNames(emptyList())
@@ -310,8 +310,7 @@ public void usersyncReadyBiddersShouldReturnBiddersThatCanSync() {
310310
.name("bidder-with-usersync")
311311
.deprecatedNames(emptyList())
312312
.bidderInfo(infoOfBidderWithUsersyncConfig)
313-
.usersyncer(Usersyncer.of("bidder-with-usersync",
314-
"bidder-with-usersync-family",
313+
.usersyncer(Usersyncer.of("bidder-with-usersync-family",
315314
null,
316315
null,
317316
false,
@@ -325,8 +324,7 @@ public void usersyncReadyBiddersShouldReturnBiddersThatCanSync() {
325324
BidderDeps.of(singletonList(BidderInstanceDeps.builder()
326325
.name("disabled-bidder-with-usersync")
327326
.bidderInfo(infoOfDisabledBidderWithUsersyncConfig)
328-
.usersyncer(Usersyncer.of("disabled-bidder-with-usersync",
329-
"disabled-bidder-with-usersync-family",
327+
.usersyncer(Usersyncer.of("disabled-bidder-with-usersync-family",
330328
null,
331329
null,
332330
false,

src/test/java/org/prebid/server/bidder/UsersyncMethodChooserTest.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ public void shouldReturnRedirectMethodWhenIframeMethodFilterExcludeAndNullBidder
5959
CookieSyncRequest.FilterType.exclude),
6060
null);
6161
final Usersyncer usersyncer = Usersyncer.of(null,
62-
null,
6362
iframeMethod("url"),
6463
redirectMethod("url"),
6564
false,
@@ -99,7 +98,6 @@ public void shouldReturnSecondaryMethodWhenInMethodFilterExcludeList() {
9998
CookieSyncRequest.FilterType.exclude),
10099
null);
101100
final Usersyncer usersyncer = Usersyncer.of(null,
102-
null,
103101
iframeMethod("url"),
104102
redirectMethod("url"),
105103
false,
@@ -122,7 +120,6 @@ public void shouldReturnSecondaryMethodWhenMethodFilterExcludesAll() {
122120
CookieSyncRequest.FilterType.exclude),
123121
null);
124122
final Usersyncer usersyncer = Usersyncer.of(null,
125-
null,
126123
iframeMethod("url"),
127124
redirectMethod("url"),
128125
false,
@@ -196,7 +193,6 @@ public void shouldReturnSecondaryMethodWhenNotInMethodFilterIncludeList() {
196193
CookieSyncRequest.FilterType.include),
197194
null);
198195
final Usersyncer usersyncer = Usersyncer.of(null,
199-
null,
200196
iframeMethod("url"),
201197
redirectMethod("url"),
202198
false,
@@ -252,7 +248,6 @@ public void shouldReturnSecondaryMethodWhenMethodFilterIncludeListIsNotArray() {
252248
CookieSyncRequest.FilterType.include),
253249
null);
254250
final Usersyncer usersyncer = Usersyncer.of(null,
255-
null,
256251
iframeMethod("url"),
257252
redirectMethod("url"),
258253
false,
@@ -274,7 +269,6 @@ public void shouldReturnSecondaryMethodWhenMethodFilterIncludeListIsNotStringArr
274269
CookieSyncRequest.FilterType.include),
275270
null);
276271
final Usersyncer usersyncer = Usersyncer.of(null,
277-
null,
278272
iframeMethod("url"),
279273
redirectMethod("url"),
280274
false,
@@ -299,7 +293,6 @@ public void shouldReturnSecondaryMethodWhenPrimaryIsFilteredOutAndSecondIsNot()
299293
new TextNode("*"),
300294
CookieSyncRequest.FilterType.include));
301295
final Usersyncer usersyncer = Usersyncer.of(null,
302-
null,
303296
iframeMethod("url"),
304297
redirectMethod("url"),
305298
false,
@@ -324,7 +317,6 @@ public void shouldReturnNullWhenPrimaryAndSecondaryAreFilteredOut() {
324317
new TextNode("*"),
325318
CookieSyncRequest.FilterType.exclude));
326319
final Usersyncer usersyncer = Usersyncer.of(null,
327-
null,
328320
iframeMethod("url"),
329321
redirectMethod("url"),
330322
false,
@@ -369,7 +361,7 @@ public void shouldReturnNullWhenPrimaryIsFilteredOutAndNoSecondary() {
369361
}
370362

371363
private Usersyncer iframeUsersyncer(String url) {
372-
return Usersyncer.of(null, null, iframeMethod(url), null, false, null);
364+
return Usersyncer.of(null, iframeMethod(url), null, false, null);
373365
}
374366

375367
private UsersyncMethod iframeMethod(String url) {

src/test/java/org/prebid/server/cookie/CookieSyncServiceTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,8 +1287,7 @@ private void givenUsersyncerForBidder(boolean enabled,
12871287
List<Integer> gppSid) {
12881288

12891289
final UsersyncMethod usersyncMethod = givenUsersyncMethod(bidder);
1290-
final Usersyncer usersyncer = Usersyncer.of(
1291-
enabled, bidder, cookieFamilyName, usersyncMethod, null, gdpr, gppSid);
1290+
final Usersyncer usersyncer = Usersyncer.of(enabled, cookieFamilyName, usersyncMethod, null, gdpr, gppSid);
12921291

12931292
given(bidderCatalog.usersyncerByName(eq(bidder))).willReturn(Optional.of(usersyncer));
12941293
given(bidderCatalog.cookieFamilyName(eq(bidder))).willReturn(Optional.of(cookieFamilyName));

src/test/java/org/prebid/server/cookie/CoopSyncProviderTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,6 @@ private void givenValidBidderWithCookieSync(String bidder) {
174174
given(bidderCatalog.isActive(bidder)).willReturn(true);
175175
given(bidderCatalog.usersyncerByName(bidder)).willReturn(
176176
Optional.of(Usersyncer.of(
177-
bidder,
178177
"cookie-family-name",
179178
UsersyncMethod.builder().build(),
180179
null,

src/test/java/org/prebid/server/cookie/PrioritizedCoopSyncProviderTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ private void givenValidBidderWithCookieSync(String bidder) {
104104
given(bidderCatalog.cookieFamilyName(bidder)).willReturn(Optional.of(bidder + "-cookie-family"));
105105
given(bidderCatalog.usersyncerByName(bidder)).willReturn(
106106
Optional.of(Usersyncer.of(
107-
bidder,
108107
"cookie-family-name",
109108
UsersyncMethod.builder().build(),
110109
null,

0 commit comments

Comments
 (0)