ActionController.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. /**
  15. * Constructeur
  16. */
  17. public function __construct () {
  18. $this->view = new Minz_View();
  19. $view_path = Minz_Request::controllerName() . '/' . Minz_Request::actionName() . '.phtml';
  20. $this->view->_path($view_path);
  21. $this->view->attributeParams ();
  22. }
  23. /**
  24. * Getteur
  25. */
  26. public function view () {
  27. return $this->view;
  28. }
  29. /**
  30. * Set CSP policies.
  31. *
  32. * A default-src directive should always be given.
  33. *
  34. * References:
  35. * - https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
  36. * - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/default-src
  37. *
  38. * @param array $policies An array where keys are directives and values are sources.
  39. */
  40. protected function _csp($policies) {
  41. if (!isset($policies['default-src'])) {
  42. $action = Minz_Request::controllerName() . '#' . Minz_Request::actionName();
  43. Minz_Log::warning(
  44. "Default CSP policy is not declared for action {$action}.",
  45. ADMIN_LOG
  46. );
  47. }
  48. $this->csp_policies = $policies;
  49. }
  50. /**
  51. * Send HTTP Content-Security-Policy header based on declared policies.
  52. */
  53. public function declareCspHeader() {
  54. $policies = [];
  55. foreach ($this->csp_policies as $directive => $sources) {
  56. $policies[] = $directive . ' ' . $sources;
  57. }
  58. header('Content-Security-Policy: ' . implode('; ', $policies));
  59. }
  60. /**
  61. * Méthodes à redéfinir (ou non) par héritage
  62. * firstAction est la première méthode exécutée par le Dispatcher
  63. * lastAction est la dernière
  64. */
  65. public function init () { }
  66. public function firstAction () { }
  67. public function lastAction () { }
  68. }