@@ -8,20 +8,37 @@ const request = require('request-promise');
8
8
const EMAIL = '[email protected] ' ;
9
9
const ZIP = '10001' ;
10
10
const SSN = '999-99-9999' ;
11
+ const NICKNAME = 'PublicNickname' ;
11
12
12
13
describe ( 'Personally Identifiable Information' , ( ) => {
13
14
let user ;
15
+ let adminUser ;
16
+ let adminRole ;
14
17
15
18
beforeEach ( done => {
16
- return Parse . User . signUp ( 'tester' , 'abc' )
19
+ return new Parse . Role ( "Administrator" , new Parse . ACL ( ) ) . save ( null , { useMasterKey : true } )
20
+ . then ( role => adminRole = role )
21
+ . then ( ( ) => Parse . User . signUp ( 'tester' , 'abc' ) )
17
22
. then ( loggedInUser => user = loggedInUser )
18
23
. then ( ( ) => Parse . User . logIn ( user . get ( 'username' ) , 'abc' ) )
19
- . then ( ( ) => user
20
- . set ( 'email' , EMAIL )
21
- . set ( 'zip' , ZIP )
22
- . set ( 'ssn' , SSN )
23
- . save ( ) )
24
- . then ( ( ) => done ( ) ) ;
24
+ . then ( ( ) => {
25
+ const managementRole = new Parse . Role ( "managementOf_user" + user . id , new Parse . ACL ( user ) ) ;
26
+ managementRole . getRoles ( ) . add ( adminRole ) ;
27
+
28
+ return managementRole . save ( null , { useMasterKey : true } ) ;
29
+ } ) . then ( ( managementRole ) => {
30
+ const userACL = new Parse . ACL ( ) ;
31
+ userACL . setPublicReadAccess ( true ) ;
32
+ userACL . setReadAccess ( managementRole , true ) ;
33
+ userACL . setWriteAccess ( managementRole , true ) ;
34
+
35
+ return user . set ( 'email' , EMAIL )
36
+ . set ( 'zip' , ZIP )
37
+ . set ( 'ssn' , SSN )
38
+ . set ( 'nickname' , NICKNAME )
39
+ . setACL ( userACL )
40
+ . save ( ) } )
41
+ . then ( ( ) => done ( ) , ( e ) => console . log ( e ) ) ;
25
42
} ) ;
26
43
27
44
it ( 'should be able to get own PII via API with object' , ( done ) => {
@@ -50,6 +67,22 @@ describe('Personally Identifiable Information', () => {
50
67
} ) ;
51
68
} ) ;
52
69
70
+ it ( 'should be able to get non PII via API with object' , ( done ) => {
71
+ Parse . User . logOut ( )
72
+ . then ( ( ) => {
73
+ const userObj = new ( Parse . Object . extend ( Parse . User ) ) ;
74
+ userObj . id = user . id ;
75
+ userObj . fetch ( ) . then (
76
+ fetchedUser => {
77
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
78
+ } )
79
+ . fail ( e => {
80
+ done . fail ( JSON . stringify ( e ) ) ;
81
+ } )
82
+ . done ( ( ) => done ( ) ) ;
83
+ } ) ;
84
+ } ) ;
85
+
53
86
it ( 'should be able to get PII via API with object using master key' , ( done ) => {
54
87
Parse . User . logOut ( )
55
88
. then ( ( ) => {
@@ -63,7 +96,6 @@ describe('Personally Identifiable Information', () => {
63
96
} ) ;
64
97
} ) ;
65
98
66
-
67
99
it ( 'should be able to get own PII via API with Find' , ( done ) => {
68
100
new Parse . Query ( Parse . User )
69
101
. first ( )
@@ -236,7 +268,7 @@ describe('Personally Identifiable Information', () => {
236
268
) . done ( ( ) => done ( ) ) ;
237
269
} ) ;
238
270
239
- it ( 'should get PII via REST by ID with master key' , ( done ) => {
271
+ it ( 'should get PII via REST by ID with master key' , ( done ) => {
240
272
request . get ( {
241
273
url : `http://localhost:8378/1/classes/_User/${ user . id } ` ,
242
274
json : true ,
@@ -270,6 +302,7 @@ describe('Personally Identifiable Information', () => {
270
302
expect ( fetchedUser . get ( 'email' ) ) . toBe ( EMAIL ) ;
271
303
expect ( fetchedUser . get ( 'zip' ) ) . toBe ( ZIP ) ;
272
304
expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( SSN ) ;
305
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
273
306
done ( ) ;
274
307
} , e => done . fail ( e ) ) ;
275
308
} ) ;
@@ -284,6 +317,7 @@ describe('Personally Identifiable Information', () => {
284
317
expect ( fetchedUser . get ( 'email' ) ) . toBe ( undefined ) ;
285
318
expect ( fetchedUser . get ( 'zip' ) ) . toBe ( undefined ) ;
286
319
expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( undefined ) ;
320
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
287
321
} , e => console . error ( 'error' , e ) )
288
322
. done ( ( ) => done ( ) ) ;
289
323
} ) ;
@@ -299,6 +333,7 @@ describe('Personally Identifiable Information', () => {
299
333
expect ( fetchedUser . get ( 'email' ) ) . toBe ( EMAIL ) ;
300
334
expect ( fetchedUser . get ( 'zip' ) ) . toBe ( ZIP ) ;
301
335
expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( SSN ) ;
336
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
302
337
} , e => console . error ( 'error' , e ) )
303
338
. done ( ( ) => done ( ) ) ;
304
339
} ) ;
@@ -312,6 +347,7 @@ describe('Personally Identifiable Information', () => {
312
347
expect ( fetchedUser . get ( 'email' ) ) . toBe ( EMAIL ) ;
313
348
expect ( fetchedUser . get ( 'zip' ) ) . toBe ( ZIP ) ;
314
349
expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( SSN ) ;
350
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
315
351
done ( ) ;
316
352
} ) ;
317
353
} ) ;
@@ -324,6 +360,7 @@ describe('Personally Identifiable Information', () => {
324
360
expect ( fetchedUser . get ( 'email' ) ) . toBe ( undefined ) ;
325
361
expect ( fetchedUser . get ( 'zip' ) ) . toBe ( undefined ) ;
326
362
expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( undefined ) ;
363
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
327
364
done ( ) ;
328
365
} )
329
366
) ;
@@ -337,6 +374,7 @@ describe('Personally Identifiable Information', () => {
337
374
expect ( fetchedUser . get ( 'email' ) ) . toBe ( EMAIL ) ;
338
375
expect ( fetchedUser . get ( 'zip' ) ) . toBe ( ZIP ) ;
339
376
expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( SSN ) ;
377
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
340
378
done ( ) ;
341
379
} )
342
380
) ;
@@ -350,6 +388,7 @@ describe('Personally Identifiable Information', () => {
350
388
expect ( fetchedUser . get ( 'email' ) ) . toBe ( EMAIL ) ;
351
389
expect ( fetchedUser . get ( 'zip' ) ) . toBe ( ZIP ) ;
352
390
expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( SSN ) ;
391
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
353
392
done ( ) ;
354
393
} ) ;
355
394
} ) ;
@@ -362,6 +401,7 @@ describe('Personally Identifiable Information', () => {
362
401
expect ( fetchedUser . get ( 'email' ) ) . toBe ( undefined ) ;
363
402
expect ( fetchedUser . get ( 'zip' ) ) . toBe ( undefined ) ;
364
403
expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( undefined ) ;
404
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
365
405
done ( ) ;
366
406
} )
367
407
) ;
@@ -375,6 +415,7 @@ describe('Personally Identifiable Information', () => {
375
415
expect ( fetchedUser . get ( 'email' ) ) . toBe ( EMAIL ) ;
376
416
expect ( fetchedUser . get ( 'zip' ) ) . toBe ( ZIP ) ;
377
417
expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( SSN ) ;
418
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
378
419
done ( ) ;
379
420
} )
380
421
) ;
@@ -395,6 +436,7 @@ describe('Personally Identifiable Information', () => {
395
436
expect ( fetchedUser . zip ) . toBe ( undefined ) ;
396
437
expect ( fetchedUser . ssn ) . toBe ( undefined ) ;
397
438
expect ( fetchedUser . email ) . toBe ( undefined ) ;
439
+ expect ( fetchedUser . nickname ) . toBe ( NICKNAME ) ;
398
440
} ,
399
441
e => console . error ( 'error' , e . message )
400
442
) . done ( ( ) => done ( ) ) ;
@@ -416,6 +458,7 @@ describe('Personally Identifiable Information', () => {
416
458
expect ( fetchedUser . zip ) . toBe ( ZIP ) ;
417
459
expect ( fetchedUser . email ) . toBe ( EMAIL ) ;
418
460
expect ( fetchedUser . ssn ) . toBe ( SSN ) ;
461
+ expect ( fetchedUser . nickname ) . toBe ( NICKNAME ) ;
419
462
} ,
420
463
e => console . error ( 'error' , e . message )
421
464
) . done ( ( ) => done ( ) ) ;
@@ -436,6 +479,7 @@ describe('Personally Identifiable Information', () => {
436
479
expect ( fetchedUser . zip ) . toBe ( ZIP ) ;
437
480
expect ( fetchedUser . email ) . toBe ( EMAIL ) ;
438
481
expect ( fetchedUser . ssn ) . toBe ( SSN ) ;
482
+ expect ( fetchedUser . nickname ) . toBe ( NICKNAME ) ;
439
483
} ,
440
484
e => console . error ( 'error' , e . message )
441
485
) . done ( ( ) => done ( ) ) ;
@@ -455,6 +499,7 @@ describe('Personally Identifiable Information', () => {
455
499
const fetchedUser = result ;
456
500
expect ( fetchedUser . zip ) . toBe ( undefined ) ;
457
501
expect ( fetchedUser . email ) . toBe ( undefined ) ;
502
+ expect ( fetchedUser . nickname ) . toBe ( NICKNAME ) ;
458
503
} ,
459
504
e => console . error ( 'error' , e . message )
460
505
) . done ( ( ) => done ( ) ) ;
@@ -475,6 +520,7 @@ describe('Personally Identifiable Information', () => {
475
520
const fetchedUser = result ;
476
521
expect ( fetchedUser . zip ) . toBe ( ZIP ) ;
477
522
expect ( fetchedUser . email ) . toBe ( EMAIL ) ;
523
+ expect ( fetchedUser . nickname ) . toBe ( NICKNAME ) ;
478
524
} ,
479
525
e => console . error ( 'error' , e . message )
480
526
) . done ( ( ) => done ( ) ) ;
@@ -495,9 +541,75 @@ describe('Personally Identifiable Information', () => {
495
541
const fetchedUser = result ;
496
542
expect ( fetchedUser . zip ) . toBe ( ZIP ) ;
497
543
expect ( fetchedUser . email ) . toBe ( EMAIL ) ;
544
+ expect ( fetchedUser . nickname ) . toBe ( NICKNAME ) ;
498
545
} ,
499
546
e => console . error ( 'error' , e . message )
500
547
) . done ( ( ) => done ( ) ) ;
501
548
} ) ;
502
549
} ) ;
550
+
551
+ describe ( 'with privilaged user' , ( ) => {
552
+ beforeEach ( ( done ) => {
553
+ return Parse . User . logOut ( )
554
+ . then ( ( ) => Parse . User . signUp ( 'administrator' , 'secure' ) )
555
+ . then ( loggedInUser => adminUser = loggedInUser )
556
+ . then ( ( ) => Parse . User . logIn ( adminUser . get ( 'username' ) , 'secure' ) )
557
+ . then ( ( ) => adminRole . getUsers ( ) . add ( adminUser ) . save ( null , { useMasterKey : true } ) )
558
+ . then ( ( ) => done ( ) ) ;
559
+ } ) ;
560
+
561
+ it ( 'admin should be able to get user PII via API with object' , ( done ) => {
562
+ const userObj = new ( Parse . Object . extend ( Parse . User ) ) ;
563
+ userObj . id = user . id ;
564
+ userObj . fetch ( ) . then (
565
+ fetchedUser => {
566
+ expect ( fetchedUser . get ( 'email' ) ) . toBe ( EMAIL ) ;
567
+ } , e => console . error ( 'error' , e ) )
568
+ . done ( ( ) => done ( ) ) ;
569
+ } ) ;
570
+
571
+ it ( 'admin should be able to get user PII via API with Find' , ( done ) => {
572
+ new Parse . Query ( Parse . User )
573
+ . first ( )
574
+ . then ( fetchedUser => {
575
+ expect ( fetchedUser . get ( 'email' ) ) . toBe ( EMAIL ) ;
576
+ expect ( fetchedUser . get ( 'zip' ) ) . toBe ( ZIP ) ;
577
+ expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( SSN ) ;
578
+ done ( ) ;
579
+ } ) ;
580
+ } ) ;
581
+
582
+ it ( 'admin should be able to get user PII via API with Get' , ( done ) => {
583
+ new Parse . Query ( Parse . User )
584
+ . get ( user . id )
585
+ . then ( fetchedUser => {
586
+ expect ( fetchedUser . get ( 'email' ) ) . toBe ( EMAIL ) ;
587
+ expect ( fetchedUser . get ( 'zip' ) ) . toBe ( ZIP ) ;
588
+ expect ( fetchedUser . get ( 'ssn' ) ) . toBe ( SSN ) ;
589
+ expect ( fetchedUser . get ( 'nickname' ) ) . toBe ( NICKNAME ) ;
590
+ done ( ) ;
591
+ } ) ;
592
+ } ) ;
593
+
594
+ it ( 'admin should get PII via REST with admin credentials' , ( done ) => {
595
+ request . get ( {
596
+ url : 'http://localhost:8378/1/classes/_User' ,
597
+ json : true ,
598
+ headers : {
599
+ 'X-Parse-Application-Id' : 'test' ,
600
+ 'X-Parse-Javascript-Key' : 'test' ,
601
+ 'X-Parse-Session-Token' : adminUser . getSessionToken ( )
602
+ }
603
+ } )
604
+ . then (
605
+ result => {
606
+ const fetchedUser = result . results [ 0 ] ;
607
+ expect ( fetchedUser . zip ) . toBe ( ZIP ) ;
608
+ expect ( fetchedUser . email ) . toBe ( EMAIL ) ;
609
+ } ,
610
+ e => console . error ( 'error' , e . message )
611
+ ) . done ( ( ) => done ( ) ) ;
612
+ } ) ;
613
+
614
+ } ) ;
503
615
} ) ;
0 commit comments