Commit | Line | Data |
---|---|---|
6a488035 | 1 | <?php |
b6708aeb | 2 | /* |
3 | +--------------------------------------------------------------------+ | |
7d61e75f TO |
4 | | Copyright CiviCRM LLC. All rights reserved. | |
5 | | | | |
6 | | This work is published under the GNU AGPLv3 license with some | | |
7 | | permitted exceptions and without any warranty. For full license | | |
8 | | and copyright information, see https://civicrm.org/licensing | | |
9 | +--------------------------------------------------------------------+ | |
e70a7fc0 | 10 | */ |
6a488035 | 11 | |
e9479dcf EM |
12 | /** |
13 | * Class CRM_Utils_SignerTest | |
acb109b7 | 14 | * @group headless |
e9479dcf | 15 | */ |
6a488035 TO |
16 | class CRM_Utils_SignerTest extends CiviUnitTestCase { |
17 | ||
00be9182 | 18 | public function setUp() { |
6a488035 TO |
19 | parent::setUp(); |
20 | } | |
21 | ||
00be9182 | 22 | public function testSignValidate() { |
9099cab3 CW |
23 | $cases = []; |
24 | $cases[] = [ | |
25 | 'signParams' => [ | |
6a488035 TO |
26 | 'a' => 'eh', |
27 | 'b' => 'bee', | |
28 | 'c' => NULL, | |
9099cab3 CW |
29 | ], |
30 | 'validateParams' => [ | |
6a488035 TO |
31 | 'a' => 'eh', |
32 | 'b' => 'bee', | |
33 | 'c' => NULL, | |
9099cab3 | 34 | ], |
6a488035 | 35 | 'isValid' => TRUE, |
9099cab3 CW |
36 | ]; |
37 | $cases[] = [ | |
38 | 'signParams' => [ | |
6a488035 TO |
39 | 'a' => 'eh', |
40 | 'b' => 'bee', | |
41 | 'c' => NULL, | |
9099cab3 CW |
42 | ], |
43 | 'validateParams' => [ | |
6a488035 TO |
44 | 'a' => 'eh', |
45 | 'b' => 'bee', | |
46 | 'c' => NULL, | |
47 | 'irrelevant' => 'totally-irrelevant', | |
9099cab3 | 48 | ], |
6a488035 | 49 | 'isValid' => TRUE, |
9099cab3 CW |
50 | ]; |
51 | $cases[] = [ | |
52 | 'signParams' => [ | |
6a488035 TO |
53 | 'a' => 'eh', |
54 | 'b' => 'bee', | |
55 | 'c' => NULL, | |
9099cab3 CW |
56 | ], |
57 | 'validateParams' => [ | |
6a488035 TO |
58 | 'a' => 'eh', |
59 | 'b' => 'bee', | |
60 | 'c' => '', | |
9099cab3 | 61 | ], |
6a488035 | 62 | 'isValid' => TRUE, |
9099cab3 CW |
63 | ]; |
64 | $cases[] = [ | |
65 | 'signParams' => [ | |
6a488035 TO |
66 | 'a' => 'eh', |
67 | 'b' => 'bee', | |
68 | 'c' => NULL, | |
9099cab3 CW |
69 | ], |
70 | 'validateParams' => [ | |
6a488035 TO |
71 | 'a' => 'eh', |
72 | 'b' => 'bee', | |
73 | 'c' => 0, | |
9099cab3 | 74 | ], |
6a488035 | 75 | 'isValid' => FALSE, |
9099cab3 CW |
76 | ]; |
77 | $cases[] = [ | |
78 | 'signParams' => [ | |
6a488035 TO |
79 | 'a' => 'eh', |
80 | 'b' => 'bee', | |
81 | 'c' => 0, | |
9099cab3 CW |
82 | ], |
83 | 'validateParams' => [ | |
6a488035 TO |
84 | 'a' => 'eh', |
85 | 'b' => 'bee', | |
86 | 'c' => NULL, | |
9099cab3 | 87 | ], |
6a488035 | 88 | 'isValid' => FALSE, |
9099cab3 CW |
89 | ]; |
90 | $cases[] = [ | |
91 | 'signParams' => [ | |
6a488035 TO |
92 | 'a' => 'eh', |
93 | 'b' => 'bee', | |
94 | 'c' => NULL, | |
9099cab3 CW |
95 | ], |
96 | 'validateParams' => [ | |
6a488035 TO |
97 | 'a' => 'eh', |
98 | 'b' => 'bay', | |
99 | 'c' => NULL, | |
9099cab3 | 100 | ], |
6a488035 | 101 | 'isValid' => FALSE, |
9099cab3 CW |
102 | ]; |
103 | $cases[] = [ | |
104 | 'signParams' => [ | |
6a488035 TO |
105 | 'a' => 'eh', |
106 | 'b' => 'bee', | |
107 | 'c' => NULL, | |
9099cab3 CW |
108 | ], |
109 | 'validateParams' => [ | |
6a488035 TO |
110 | 'a' => 'eh', |
111 | 'b' => 'bee', | |
112 | 'c' => FALSE, | |
9099cab3 | 113 | ], |
6a488035 | 114 | 'isValid' => FALSE, |
9099cab3 CW |
115 | ]; |
116 | $cases[] = [ | |
117 | 'signParams' => [ | |
39b959db SL |
118 | // int |
119 | 'a' => 1, | |
6a488035 | 120 | 'b' => 'bee', |
9099cab3 CW |
121 | ], |
122 | 'validateParams' => [ | |
39b959db SL |
123 | // string |
124 | 'a' => '1', | |
6a488035 | 125 | 'b' => 'bee', |
9099cab3 | 126 | ], |
6a488035 | 127 | 'isValid' => TRUE, |
9099cab3 | 128 | ]; |
b6708aeb | 129 | |
6a488035 | 130 | foreach ($cases as $caseId => $case) { |
9099cab3 | 131 | $signer = new CRM_Utils_Signer('secret', ['a', 'b', 'c']); |
6a488035 | 132 | $signature = $signer->sign($case['signParams']); |
39b959db SL |
133 | // arbitrary |
134 | $this->assertTrue(!empty($signature) && is_string($signature)); | |
b6708aeb | 135 | |
39b959db | 136 | // same as $signer but physically separate |
9099cab3 | 137 | $validator = new CRM_Utils_Signer('secret', ['a', 'b', 'c']); |
6a488035 | 138 | $isValid = $validator->validate($signature, $case['validateParams']); |
b6708aeb | 139 | |
6a488035 TO |
140 | if ($isValid !== $case['isValid']) { |
141 | $this->fail("Case ${caseId}: Mismatch: " . var_export($case, TRUE)); | |
142 | } | |
143 | $this->assertTrue(TRUE, 'Validation yielded expected result'); | |
144 | } | |
145 | } | |
96025800 | 146 | |
6a488035 | 147 | } |