1
+ <?php
2
+
3
+ namespace Monster \App \Models ;
4
+
5
+ class CORS
6
+ {
7
+ // Initialize private properties to store CORS settings
8
+ private $ allowedOrigins = array ();
9
+ private $ allowedMethods = array ();
10
+ private $ allowedHeaders = array ();
11
+ private $ exposedHeaders = array ();
12
+ private $ maxAge = 0 ;
13
+ private $ allowCredentials = false ;
14
+
15
+ // Constructor to set CORS settings when creating a new instance of the class
16
+ public function __construct ($ allowedOrigins = array (), $ allowedMethods = array (), $ allowedHeaders = array (), $ exposedHeaders = array (), $ maxAge = 0 , $ allowCredentials = false )
17
+ {
18
+ // Set the allowed origins, methods, headers, exposed headers, max age, and allow credentials properties
19
+ $ this ->allowedOrigins = $ allowedOrigins ;
20
+ $ this ->allowedMethods = $ allowedMethods ;
21
+ $ this ->allowedHeaders = $ allowedHeaders ;
22
+ $ this ->exposedHeaders = $ exposedHeaders ;
23
+ $ this ->maxAge = $ maxAge ;
24
+ $ this ->allowCredentials = $ allowCredentials ;
25
+ }
26
+
27
+ // Method to set CORS headers based on the properties set in the constructor
28
+ public function setHeaders ()
29
+ {
30
+ // Check if the allowed origins include all origins by checking if '*' is in the array
31
+ if (in_array ('* ' , $ this ->allowedOrigins )) {
32
+ // Allow all origins with a wildcard
33
+ header ('Access-Control-Allow-Origin: * ' );
34
+ } else {
35
+ // Check if the origin of the request is in the allowed origins array
36
+ $ origin = isset ($ _SERVER ['HTTP_ORIGIN ' ]) ? $ _SERVER ['HTTP_ORIGIN ' ] : '' ;
37
+ if (in_array ($ origin , $ this ->allowedOrigins )) {
38
+ // Set the allowed origin to the origin of the request
39
+ header ("Access-Control-Allow-Origin: $ origin " );
40
+ }
41
+ }
42
+ // Check if credentials are allowed and set the allow credentials header if true
43
+ if ($ this ->allowCredentials ) {
44
+ header ('Access-Control-Allow-Credentials: true ' );
45
+ }
46
+ // Set the exposed headers header if there are any exposed headers
47
+ if (!empty ($ this ->exposedHeaders )) {
48
+ header ('Access-Control-Expose-Headers: ' . implode (', ' , $ this ->exposedHeaders ));
49
+ }
50
+ // Set the max age header if the max age is greater than 0
51
+ if ($ this ->maxAge > 0 ) {
52
+ header ("Access-Control-Max-Age: $ this ->maxAge " );
53
+ }
54
+ // Set the allowed methods header if there are any allowed methods
55
+ if (!empty ($ this ->allowedMethods )) {
56
+ header ('Access-Control-Allow-Methods: ' . implode (', ' , $ this ->allowedMethods ));
57
+ }
58
+ // Set the allowed headers header if there are any allowed headers
59
+ if (!empty ($ this ->allowedHeaders )) {
60
+ header ('Access-Control-Allow-Headers: ' . implode (', ' , $ this ->allowedHeaders ));
61
+ }
62
+ }
63
+ }
0 commit comments