Example #1
0
 /**
  *
  */
 public function __construct($po_response, $pa_options = null)
 {
     $this->opo_response = $po_response;
     parent::__construct();
     global $AUTH_CURRENT_USER_ID;
     $AUTH_CURRENT_USER_ID = "";
     if (is_array($pa_options)) {
         if (isset($pa_options["no_headers"]) && $pa_options["no_headers"]) {
             $pa_options["dont_redirect_to_login"] = true;
             $pa_options["dont_create_new_session"] = true;
             $pa_options["dont_redirect_to_welcome"] = true;
         }
         if (isset($pa_options["dont_redirect"]) && $pa_options["dont_redirect"]) {
             $pa_options["dont_redirect_to_login"] = true;
             $pa_options["dont_redirect_to_welcome"] = true;
         }
         $va_sim_params = null;
         if (isset($pa_options["simulateWith"]) && is_array($pa_options["simulateWith"])) {
             $va_sim_params = $pa_options["simulateWith"];
             if (isset($va_sim_params['GET'])) {
                 $_GET = $va_sim_params['GET'];
             }
             if (isset($va_sim_params['POST'])) {
                 $_POST = $va_sim_params['POST'];
             }
             if (isset($va_sim_params['COOKIE'])) {
                 $_COOKIE = $va_sim_params['COOKIE'];
             }
             $_REQUEST = array_merge($_GET, $_POST, $_COOKIE);
             foreach (array('SCRIPT_NAME', 'REQUEST_METHOD', 'PHP_AUTH_USER', 'PHP_AUTH_PW', 'REQUEST_URI', 'PATH_INFO', 'REMOTE_ADDR', 'HTTP_USER_AGENT') as $vs_k) {
                 if (isset($va_sim_params[$vs_k])) {
                     $_SERVER[$vs_k] = $va_sim_params[$vs_k];
                 }
             }
             $pa_options["no_authentication"] = true;
         }
     }
     # figure out script name
     $va_tmp = isset($_SERVER['SCRIPT_NAME']) && $_SERVER['SCRIPT_NAME'] ? explode('/', $_SERVER['SCRIPT_NAME']) : array();
     $this->ops_script_name = '';
     while (!$this->ops_script_name && sizeof($va_tmp) > 0) {
         $this->ops_script_name = array_pop($va_tmp);
     }
     # create session
     $vs_app_name = $this->config->get("app_name");
     // restore session from token for service requests
     if ($this->ops_script_name == "service.php" && isset($_GET['authToken']) && strlen($_GET['authToken']) > 0) {
         $vs_token = preg_replace("/[^a-f0-9]/", "", $_GET['authToken']);
         // sanitize
         $this->session = Session::restoreFromServiceAuthToken($vs_token, $vs_app_name);
     }
     // plain old session
     if (!$this->session) {
         $this->session = new Session($vs_app_name, isset($pa_options["dont_create_new_session"]) ? $pa_options["dont_create_new_session"] : false);
     }
     if (!isset($pa_options["no_authentication"]) || !$pa_options["no_authentication"]) {
         $this->doAuthentication($pa_options);
     } else {
         if (isset($va_sim_params['user_id']) && $va_sim_params['user_id']) {
             $this->user = new ca_users($va_sim_params['user_id']);
         } else {
             $this->user = new ca_users();
         }
     }
     $this->opb_is_dispatched = false;
     $this->opa_params['GET'] =& $_GET;
     $this->opa_params['POST'] =& $_POST;
     $this->opa_params['COOKIE'] =& $_COOKIE;
     $this->opa_params['URL'] = array();
     $this->ops_request_method = isset($_SERVER["REQUEST_METHOD"]) ? $_SERVER["REQUEST_METHOD"] : null;
     /* allow authentication via URL for web service API like so: http://user:pw@example.com/ */
     if ($this->ops_script_name == "service.php") {
         $this->ops_raw_post_data = file_get_contents("php://input");
         if ($_SERVER["PHP_AUTH_USER"] && $_SERVER["PHP_AUTH_PW"]) {
             $this->doAuthentication(array('noPublicUsers' => true, "no_headers" => true, "dont_redirect" => true, "options" => array(), "user_name" => $_SERVER["PHP_AUTH_USER"], "password" => $_SERVER["PHP_AUTH_PW"]));
         }
     }
     $this->ops_base_path = join('/', $va_tmp);
     $this->ops_full_path = $_SERVER['REQUEST_URI'];
     if (!preg_match("!/index.php!", $this->ops_full_path) && !preg_match("!/service.php!", $this->ops_full_path)) {
         $this->ops_full_path = rtrim($this->ops_full_path, "/") . "/index.php";
     }
     $vs_path_info = str_replace($_SERVER['SCRIPT_NAME'], "", str_replace("?" . $_SERVER['QUERY_STRING'], "", $this->ops_full_path));
     $this->ops_path_info = $vs_path_info ? $vs_path_info : (isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '');
     if (__CA_URL_ROOT__) {
         $this->ops_path_info = preg_replace("!^" . __CA_URL_ROOT__ . "/!", "", $this->ops_path_info);
     }
 }