| # These functions are used by FLEDGE to determine the logic for the ad seller. |
| # For our testing purposes, we only need the minimal amount of boilerplate |
| # code in place to allow them to be invoked properly and move the FLEDGE |
| # process along. The tests do not deal with reporting results, so we leave |
| # `reportResult` empty. See `generateURNFromFledge` in "utils.js" to see how |
| # this file is used. |
| |
| from wptserve.utils import isomorphic_decode |
| |
| def main(request, response): |
| # Set up response headers. |
| headers = [ |
| ('Content-Type', 'Application/Javascript'), |
| ('Ad-Auction-Allowed', 'true') |
| ] |
| |
| # Parse URL params. |
| requested_size = request.GET.first(b"requested-size", None) |
| |
| # Use URL params to modify Javascript. |
| requested_size_check = '' |
| if requested_size is not None: |
| # request.GET stores URL keys and values in iso-8859-1 binary encoding. We |
| # have to decode the values back to a string to parse width/height. Don't |
| # bother sanitizing the size, because it is sanitized before auction logic |
| # runs already. |
| width, height = isomorphic_decode(requested_size).split('-') |
| |
| requested_size_check = ( |
| f''' |
| if (!(auctionConfig.requestedSize.width === '{width}') && |
| (auctionConfig.requestedSize.height === '{height}')) {{ |
| throw new Error('requestedSize missing/incorrect in auctionConfig'); |
| }} |
| ''' |
| ) |
| |
| # Generate Javascript. |
| # Note: Python fstrings use double-brackets ( {{, }} ) to insert bracket |
| # literals instead of substitution sequences. |
| score_ad = ( |
| f'''function scoreAd( |
| adMetadata, |
| bid, |
| auctionConfig, |
| trustedScoringSignals, |
| browserSignals) {{ |
| {requested_size_check} |
| return 2*bid; |
| }} |
| ''' |
| ) |
| |
| report_result = ( |
| f'''function reportResult( |
| auctionConfig, |
| browserSignals) {{ |
| {requested_size_check} |
| return; |
| }} |
| ''' |
| ) |
| |
| content = f'{score_ad}\n{report_result}' |
| |
| return (headers, content) |