@@ -1282,4 +1282,210 @@ mod test {
1282
1282
// Err(ResponseError::BadRequest(err_msg))
1283
1283
// ));
1284
1284
}
1285
+
1286
+
1287
+ #[ tokio:: test]
1288
+ async fn test_allowed_keys_for_guest ( ) {
1289
+ let app_guard = setup_dummy_app ( ) . await ;
1290
+ let app = Arc :: new ( app_guard. app ) ;
1291
+
1292
+ let allowed_keys = GET_ANALYTICS_ALLOWED_KEYS . clone ( ) ;
1293
+ let base_datehour = DateHour :: from_ymdh ( 2022 , 1 , 17 , 14 ) ;
1294
+
1295
+
1296
+ // Test for each allowed key
1297
+ // Country
1298
+ {
1299
+ let query = AnalyticsQuery {
1300
+ limit : 1000 ,
1301
+ event_type : CLICK ,
1302
+ metric : Metric :: Count ,
1303
+ segment_by : None ,
1304
+ time : Time {
1305
+ timeframe : Timeframe :: Day ,
1306
+ start : base_datehour - 1 ,
1307
+ end : None ,
1308
+ } ,
1309
+ chains : vec ! [ GANACHE_1337 . chain_id] ,
1310
+ country : Some ( "Bulgaria" . to_string ( ) ) ,
1311
+ ..Default :: default ( )
1312
+ } ;
1313
+ let res = get_analytics ( Extension ( app. clone ( ) ) , None , Extension ( allowed_keys. clone ( ) ) , None , Qs ( query) ) . await ;
1314
+ assert ! ( res. is_ok( ) ) ;
1315
+ }
1316
+ // Ad Slot Type
1317
+ {
1318
+ let query = AnalyticsQuery {
1319
+ limit : 1000 ,
1320
+ event_type : CLICK ,
1321
+ metric : Metric :: Count ,
1322
+ segment_by : None ,
1323
+ time : Time {
1324
+ timeframe : Timeframe :: Day ,
1325
+ start : base_datehour - 1 ,
1326
+ end : None ,
1327
+ } ,
1328
+ chains : vec ! [ GANACHE_1337 . chain_id] ,
1329
+ ad_slot_type : Some ( "legacy_300x100" . to_string ( ) ) ,
1330
+ ..Default :: default ( )
1331
+ } ;
1332
+ let res = get_analytics ( Extension ( app. clone ( ) ) , None , Extension ( allowed_keys. clone ( ) ) , None , Qs ( query) ) . await ;
1333
+ assert ! ( res. is_ok( ) ) ;
1334
+ }
1335
+ // Test each not allowed key
1336
+ // CampaignId
1337
+ {
1338
+ let query = AnalyticsQuery {
1339
+ limit : 1000 ,
1340
+ event_type : CLICK ,
1341
+ metric : Metric :: Count ,
1342
+ segment_by : None ,
1343
+ time : Time {
1344
+ timeframe : Timeframe :: Day ,
1345
+ start : base_datehour - 1 ,
1346
+ end : None ,
1347
+ } ,
1348
+ chains : vec ! [ GANACHE_1337 . chain_id] ,
1349
+ campaign_id : Some ( DUMMY_CAMPAIGN . id ) ,
1350
+ ..Default :: default ( )
1351
+ } ;
1352
+ let res = get_analytics ( Extension ( app. clone ( ) ) , None , Extension ( allowed_keys. clone ( ) ) , None , Qs ( query) ) . await . expect_err ( "should be an error" ) ;
1353
+ assert_eq ! (
1354
+ ResponseError :: Forbidden ( "Disallowed query key `campaignId`" . into( ) ) ,
1355
+ res,
1356
+ ) ;
1357
+ }
1358
+ // AdUnit
1359
+ {
1360
+ let query = AnalyticsQuery {
1361
+ limit : 1000 ,
1362
+ event_type : CLICK ,
1363
+ metric : Metric :: Count ,
1364
+ segment_by : None ,
1365
+ time : Time {
1366
+ timeframe : Timeframe :: Day ,
1367
+ start : base_datehour - 1 ,
1368
+ end : None ,
1369
+ } ,
1370
+ chains : vec ! [ GANACHE_1337 . chain_id] ,
1371
+ ad_unit : Some ( DUMMY_IPFS [ 0 ] ) ,
1372
+ ..Default :: default ( )
1373
+ } ;
1374
+ let res = get_analytics ( Extension ( app. clone ( ) ) , None , Extension ( allowed_keys. clone ( ) ) , None , Qs ( query) ) . await . expect_err ( "should be an error" ) ;
1375
+ assert_eq ! (
1376
+ ResponseError :: Forbidden ( "Disallowed query key `adUnit`" . into( ) ) ,
1377
+ res,
1378
+ ) ;
1379
+ }
1380
+ // AdSlot
1381
+ {
1382
+ let query = AnalyticsQuery {
1383
+ limit : 1000 ,
1384
+ event_type : CLICK ,
1385
+ metric : Metric :: Count ,
1386
+ segment_by : None ,
1387
+ time : Time {
1388
+ timeframe : Timeframe :: Day ,
1389
+ start : base_datehour - 1 ,
1390
+ end : None ,
1391
+ } ,
1392
+ chains : vec ! [ GANACHE_1337 . chain_id] ,
1393
+ ad_slot : Some ( DUMMY_IPFS [ 1 ] ) ,
1394
+ ..Default :: default ( )
1395
+ } ;
1396
+ let res = get_analytics ( Extension ( app. clone ( ) ) , None , Extension ( allowed_keys. clone ( ) ) , None , Qs ( query) ) . await . expect_err ( "should be an error" ) ;
1397
+ assert_eq ! (
1398
+ ResponseError :: Forbidden ( "Disallowed query key `adSlot`" . into( ) ) ,
1399
+ res,
1400
+ ) ;
1401
+ }
1402
+ // Advertiser
1403
+ {
1404
+ let query = AnalyticsQuery {
1405
+ limit : 1000 ,
1406
+ event_type : CLICK ,
1407
+ metric : Metric :: Count ,
1408
+ segment_by : None ,
1409
+ time : Time {
1410
+ timeframe : Timeframe :: Day ,
1411
+ start : base_datehour - 1 ,
1412
+ end : None ,
1413
+ } ,
1414
+ chains : vec ! [ GANACHE_1337 . chain_id] ,
1415
+ advertiser : Some ( * ADVERTISER ) ,
1416
+ ..Default :: default ( )
1417
+ } ;
1418
+ let res = get_analytics ( Extension ( app. clone ( ) ) , None , Extension ( allowed_keys. clone ( ) ) , None , Qs ( query) ) . await . expect_err ( "should throw an error" ) ;
1419
+ assert_eq ! (
1420
+ ResponseError :: Forbidden ( "Disallowed query key `advertiser`" . into( ) ) ,
1421
+ res,
1422
+ ) ;
1423
+ }
1424
+ // Publisher
1425
+ {
1426
+ let query = AnalyticsQuery {
1427
+ limit : 1000 ,
1428
+ event_type : CLICK ,
1429
+ metric : Metric :: Count ,
1430
+ segment_by : None ,
1431
+ time : Time {
1432
+ timeframe : Timeframe :: Day ,
1433
+ start : base_datehour - 1 ,
1434
+ end : None ,
1435
+ } ,
1436
+ chains : vec ! [ GANACHE_1337 . chain_id] ,
1437
+ publisher : Some ( * PUBLISHER ) ,
1438
+ ..Default :: default ( )
1439
+ } ;
1440
+ let res = get_analytics ( Extension ( app. clone ( ) ) , None , Extension ( allowed_keys. clone ( ) ) , None , Qs ( query) ) . await . expect_err ( "should throw an error" ) ;
1441
+ assert_eq ! (
1442
+ ResponseError :: Forbidden ( "Disallowed query key `publisher`" . into( ) ) ,
1443
+ res,
1444
+ ) ;
1445
+ }
1446
+ // Hostname
1447
+ {
1448
+ let query = AnalyticsQuery {
1449
+ limit : 1000 ,
1450
+ event_type : CLICK ,
1451
+ metric : Metric :: Count ,
1452
+ segment_by : None ,
1453
+ time : Time {
1454
+ timeframe : Timeframe :: Day ,
1455
+ start : base_datehour - 1 ,
1456
+ end : None ,
1457
+ } ,
1458
+ chains : vec ! [ GANACHE_1337 . chain_id] ,
1459
+ hostname : Some ( "localhost" . to_string ( ) ) ,
1460
+ ..Default :: default ( )
1461
+ } ;
1462
+ let res = get_analytics ( Extension ( app. clone ( ) ) , None , Extension ( allowed_keys. clone ( ) ) , None , Qs ( query) ) . await . expect_err ( "should throw an error" ) ;
1463
+ assert_eq ! (
1464
+ ResponseError :: Forbidden ( "Disallowed query key `hostname`" . into( ) ) ,
1465
+ res,
1466
+ ) ;
1467
+ }
1468
+ // OsName
1469
+ {
1470
+ let query = AnalyticsQuery {
1471
+ limit : 1000 ,
1472
+ event_type : CLICK ,
1473
+ metric : Metric :: Count ,
1474
+ segment_by : None ,
1475
+ time : Time {
1476
+ timeframe : Timeframe :: Day ,
1477
+ start : base_datehour - 1 ,
1478
+ end : None ,
1479
+ } ,
1480
+ chains : vec ! [ GANACHE_1337 . chain_id] ,
1481
+ os_name : Some ( OperatingSystem :: map_os ( "Windows" ) ) ,
1482
+ ..Default :: default ( )
1483
+ } ;
1484
+ let res = get_analytics ( Extension ( app. clone ( ) ) , None , Extension ( allowed_keys. clone ( ) ) , None , Qs ( query) ) . await . expect_err ( "should throw an error" ) ;
1485
+ assert_eq ! (
1486
+ ResponseError :: Forbidden ( "Disallowed query key `osName`" . into( ) ) ,
1487
+ res,
1488
+ ) ;
1489
+ }
1490
+ }
1285
1491
}
0 commit comments