@@ -25,104 +25,3 @@ class UriSigner
25
25
{
26
26
}
27
27
}
28
-
29
- /**
30
- * Signs URIs.
31
- *
32
- * @author Fabien Potencier <fabien@symfony.com>
33
- *
34
- * @deprecated since Symfony 6.4, use {@link HttpFoundationUriSigner} instead
35
- */
36
- class UriSigner
37
- {
38
- private string $ secret ;
39
- private string $ parameter ;
40
-
41
- /**
42
- * @param string $secret A secret
43
- * @param string $parameter Query string parameter to use
44
- */
45
- public function __construct (#[\SensitiveParameter] string $ secret , string $ parameter = '_hash ' , bool $ skipDeprecation = false )
46
- {
47
- $ this ->secret = $ secret ;
48
- $ this ->parameter = $ parameter ;
49
-
50
- if ($ skipDeprecation ) {
51
- trigger_deprecation ('symfony/dependency-injection ' , '6.4 ' , 'The "%s" class is deprecated, use "%s" instead. ' , self ::class, HttpFoundationUriSigner::class);
52
- }
53
- }
54
-
55
- /**
56
- * Signs a URI.
57
- *
58
- * The given URI is signed by adding the query string parameter
59
- * which value depends on the URI and the secret.
60
- */
61
- public function sign (string $ uri ): string
62
- {
63
- $ url = parse_url ($ uri );
64
- $ params = [];
65
-
66
- if (isset ($ url ['query ' ])) {
67
- parse_str ($ url ['query ' ], $ params );
68
- }
69
-
70
- $ uri = $ this ->buildUrl ($ url , $ params );
71
- $ params [$ this ->parameter ] = $ this ->computeHash ($ uri );
72
-
73
- return $ this ->buildUrl ($ url , $ params );
74
- }
75
-
76
- /**
77
- * Checks that a URI contains the correct hash.
78
- */
79
- public function check (string $ uri ): bool
80
- {
81
- $ url = parse_url ($ uri );
82
- $ params = [];
83
-
84
- if (isset ($ url ['query ' ])) {
85
- parse_str ($ url ['query ' ], $ params );
86
- }
87
-
88
- if (empty ($ params [$ this ->parameter ])) {
89
- return false ;
90
- }
91
-
92
- $ hash = $ params [$ this ->parameter ];
93
- unset($ params [$ this ->parameter ]);
94
-
95
- return hash_equals ($ this ->computeHash ($ this ->buildUrl ($ url , $ params )), $ hash );
96
- }
97
-
98
- public function checkRequest (Request $ request ): bool
99
- {
100
- $ qs = ($ qs = $ request ->server ->get ('QUERY_STRING ' )) ? '? ' .$ qs : '' ;
101
-
102
- // we cannot use $request->getUri() here as we want to work with the original URI (no query string reordering)
103
- return $ this ->check ($ request ->getSchemeAndHttpHost ().$ request ->getBaseUrl ().$ request ->getPathInfo ().$ qs );
104
- }
105
-
106
- private function computeHash (string $ uri ): string
107
- {
108
- return base64_encode (hash_hmac ('sha256 ' , $ uri , $ this ->secret , true ));
109
- }
110
-
111
- private function buildUrl (array $ url , array $ params = []): string
112
- {
113
- ksort ($ params , \SORT_STRING );
114
- $ url ['query ' ] = http_build_query ($ params , '' , '& ' );
115
-
116
- $ scheme = isset ($ url ['scheme ' ]) ? $ url ['scheme ' ].':// ' : '' ;
117
- $ host = $ url ['host ' ] ?? '' ;
118
- $ port = isset ($ url ['port ' ]) ? ': ' .$ url ['port ' ] : '' ;
119
- $ user = $ url ['user ' ] ?? '' ;
120
- $ pass = isset ($ url ['pass ' ]) ? ': ' .$ url ['pass ' ] : '' ;
121
- $ pass = ($ user || $ pass ) ? "$ pass@ " : '' ;
122
- $ path = $ url ['path ' ] ?? '' ;
123
- $ query = $ url ['query ' ] ? '? ' .$ url ['query ' ] : '' ;
124
- $ fragment = isset ($ url ['fragment ' ]) ? '# ' .$ url ['fragment ' ] : '' ;
125
-
126
- return $ scheme .$ user .$ pass .$ host .$ port .$ path .$ query .$ fragment ;
127
- }
128
- }
0 commit comments