ActionController.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. /**
  3. * MINZ - Copyright 2011 Marien Fressinaud
  4. * Sous licence AGPL3 <http://www.gnu.org/licenses/>
  5. */
  6. /**
  7. * La classe ActionController représente le contrôleur de l'application
  8. */
  9. class Minz_ActionController {
  10. protected $view;
  11. private $csp_policies = array(
  12. 'default-src' => "'self'",
  13. );
  14. // Gives the possibility to override the default View type.
  15. public static $viewType = 'Minz_View';
  16. /**
  17. * Constructeur
  18. */
  19. public function __construct () {
  20. if (class_exists(self::$viewType)) {
  21. $this->view = new self::$viewType();
  22. } else {
  23. $this->view = new Minz_View();
  24. }
  25. $view_path = Minz_Request::controllerName() . '/' . Minz_Request::actionName() . '.phtml';
  26. $this->view->_path($view_path);
  27. $this->view->attributeParams ();
  28. }
  29. /**
  30. * Getteur
  31. */
  32. public function view () {
  33. return $this->view;
  34. }
  35. /**
  36. * Set CSP policies.
  37. *
  38. * A default-src directive should always be given.
  39. *
  40. * References:
  41. * - https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
  42. * - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/default-src
  43. *
  44. * @param array $policies An array where keys are directives and values are sources.
  45. */
  46. protected function _csp($policies) {
  47. if (!isset($policies['default-src'])) {
  48. $action = Minz_Request::controllerName() . '#' . Minz_Request::actionName();
  49. Minz_Log::warning(
  50. "Default CSP policy is not declared for action {$action}.",
  51. ADMIN_LOG
  52. );
  53. }
  54. $this->csp_policies = $policies;
  55. }
  56. /**
  57. * Send HTTP Content-Security-Policy header based on declared policies.
  58. */
  59. public function declareCspHeader() {
  60. $policies = [];
  61. foreach ($this->csp_policies as $directive => $sources) {
  62. $policies[] = $directive . ' ' . $sources;
  63. }
  64. header('Content-Security-Policy: ' . implode('; ', $policies));
  65. }
  66. /**
  67. * Méthodes à redéfinir (ou non) par héritage
  68. * firstAction est la première méthode exécutée par le Dispatcher
  69. * lastAction est la dernière
  70. */
  71. public function init () { }
  72. public function firstAction () { }
  73. public function lastAction () { }
  74. }