<?php
namespace nur\v\vp;

use nur\A;
use nur\authz;
use nur\config;
use nur\F;
use nur\v\base\AbstractPage;
use nur\v\page;

class AppCasauthPage extends AbstractPage {
  /**
   * @var bool faut-il afficher les variables au lieu de rediriger vers
   * $ret_url?
   */
  const DEBUG = false;

  function isDebug(): bool {
    if (!config::is_devel()) return false;
    return static::DEBUG || F::get("D");
  }

  /** @var string nom de l'utilisateur connecté */
  private $user;

  function setup(): void {
    $destUrl = $retUrl = null;
    $user = false;
    if ($user === false) $user = A::get($_SERVER, "REMOTE_USER", false);
    if ($user === false) $user = A::get($_SERVER, "HTTP_REMOTE_USER", false);
    if ($user === false) $user = A::get($_SERVER, "HTTP_X_REMOTE_USER", false);
    if ($user) {
      $attrs = [];
      foreach($_SERVER as $key => $value) {
        if (substr($key, 0, 9) == "HTTP_CAS_") {
          $key = strtolower(substr($key, 9));
          $attrs[$key] = $value;
        }
      }
      if (authz::manager()->casLogin($user, ["cas_attrs" => $attrs])) {
        $destUrl = F::get("d");
        if ($destUrl && !$this->isDebug()) page::redirect($destUrl);
      }
      $retUrl = F::get("r");
      if ($retUrl && !$this->isDebug()) page::redirect($retUrl);
    } else {
      $user = "NONE";
    }

    $this->user = $user;
    $this->destUrl = $destUrl;
    $this->retUrl = $retUrl;
  }

  private $destUrl, $retUrl;

  function print(): void {
    page::content_type("text/plain");
    page::no_cache();
    if ($this->isDebug()) {
      echo "destUrl: $this->destUrl\n";
      echo "retUrl: $this->retUrl\n";
      echo "--- \$_SERVER\n\n";
      foreach ($_SERVER as $name => $value) {
        echo "$name: $value\n";
      }
      echo "\n--- \$_REQUEST\n\n";
      foreach ($_REQUEST as $name => $value) {
        echo "$name: $value\n";
      }
      echo "\n--- \$_SESSION\n\n";
      foreach ($_SESSION as $name => $value) {
        echo "$name: ".var_export($value, true)."\n";
      }
    } else {
      echo $this->user;
    }
  }
}