| 
<?php/**
 * restServer, a PSR HTTP Message rest server implementation
 *
 * This file is a part of restServer.
 *
 * Copyright 2018 Kjell-Inge Gustafsson, kigkonsult, All rights reserved
 * Link      http://kigkonsult.se/restServer/index.php
 * Version   0.9.123
 * License   Subject matter of licence is the software restServer.
 *           The above copyright, link, package and version notices and
 *           this licence notice shall be included in all copies or
 *           substantial portions of the restServer.
 *           restServer can be used either under the terms of
 *           a proprietary license, available at <https://kigkonsult.se/>
 *           or the GNU Affero General Public License, version 3:
 *           restServer is free software: you can redistribute it and/or
 *           modify it under the terms of the GNU Affero General Public License
 *           as published by the Free Software Foundation, either version 3 of
 *           the License, or (at your option) any later version.
 *           restServer is distributed in the hope that it will be useful,
 *           but WITHOUT ANY WARRANTY; without even the implied warranty of
 *           MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *           GNU Affero General Public License for more details.
 *           You should have received a copy of the GNU Affero General Public
 *           License along with this program.
 *           If not, see <http://www.gnu.org/licenses/>.
 */
 
 namespace Kigkonsult\RestServer;
 
 use Kigkonsult\RestServer\Handlers\CorsHandler;
 
 /**
 * Configuration for the builtin CorsHandler
 * CorsHandler provides simple cors,
 * Cross-Origin Resource Sharing,
 * but on server level, NOT on each specific request target level
 * The handler is optional.
 *
 * @author      Kjell-Inge Gustafsson <[email protected]>
 *
 * @see https://www.html5rocks.com/static/images/cors_server_flowchart.png
 *
 * Note, Request-Method OPTIONS must be allowed to manage preflights requests
 * (see cfg.RestServer.php, disallow)
 * Note, NO $config[CorsHandler::CORS] means no cors mgnt
 *
 * Response header Access-Control-Allow-Methods will contain
 *  - all attached service methods
 *  - NON-disallowed methods (ex HEAD/OPTIONS)
 *
 * NOTE, most config keys here have only test values set,
 * include ONLY on after update!!
 *
 * ex
 * $config[CorsHandler::CORS] = include 'cfg/cfg.2.cors.php';
 */
 $corsCfg = [];
 
 /**
 * Ignore origin header
 *
 * value type : bool
 * default false (or not set)
 *
 */
 $corsCfg[RestServer::IGNORE] = true;
 
 /**
 * Default for (opt) logging
 *   response status 4xx results in logging with prio warning
 *   response status 500 results in logging with prio error
 */
 
 /**
 * statusCode for response if origin is expected but not found,
 *
 * value type : int|array
 * default 400, 'Bad request', set only here if other !!
 * Due to security, you can alter logging prio to error
 * using value type array : [ 401, RestServer::ERROR ]
 */
 $corsCfg[CorsHandler::ERRORCODE1] = 400;
 
 /**
 * statusCode for response
 *   if origin is not expected but found and not ignored
 *
 * value type : int|array
 * default 403, 'Forbidden', set only here if other !!
 * Due to security, you can alter logging prio to error
 * using value type array : [ 403, RestServer::ERROR ]
 */
 $corsCfg[CorsHandler::ERRORCODE2] = 403;
 
 /**
 * statusCode for response
 *   if origin is found but NO match,
 *
 * value type : int|array
 * default 403, 'Forbidden', set only here if other !!
 * Due to security, you can alter logging prio to error
 * using value type array : [ 403, RestServer::ERROR ]
 */
 $corsCfg[CorsHandler::ERRORCODE3] = 403;
 
 /**
 * statusCode for response
 *   if contents in request header Access-Control-Request-Method,
 *     is NOT accepted by rest services definitions (method)
 *
 * value type : int
 * default 406, 'Not Acceptable', set only here if other !!
 */
 $corsCfg[CorsHandler::ERRORCODE4] = 406;
 
 /**
 * statusCode for response
 *   if contents in request header Access-Control-Request-Header
 *     is NOT in Access-Control-Allow-Headers, below
 *
 * value type : int
 * default 406, 'Not Acceptable', set only here if other !!
 */
 $corsCfg[CorsHandler::ERRORCODE5] = 406;
 
 /**
 * Will match request header 'Origin' value
 * Cfg contains accepted origins, (uri-scheme), uri-host, (uri-port)
 * ['*'] accepts all
 *
 * value type : string[]
 * Accepted request header 'Origin' value will be used in response
 */
 $corsCfg[RestServer::ALLOW] = ['*'];
 
 /**
 * allowed (non-simple) headers
 *
 * value type : string[]
 * optional
 * Checked in checking preflight request header Access-Control-Request-Header
 * Used in (preflight request) response header Access-Control-Allow-Headers
 */
 $corsCfg[CorsHandler::ACCESSCONTROLALLOWHEADERS] = ['x-header'];
 
 /**
 * Max age
 *
 * value type : int ()
 * in preflight request response only
 * optional
 * Used in response header Access-Control-Max-Age
 */
 $corsCfg[CorsHandler::ACCESSCONTROLMAXAGE] = 200;
 
 /**
 * headers to expose (in the NON-preflight response)
 *
 * value type : null|string[]
 * optional, see also Access-Control-Allow-Headers above
 * Used in response header Access-Control-Expose-Headers
 * Note, empty value will result in an empty response header
 */
 $corsCfg[CorsHandler::ACCESSCONTROLEXPOSEHEADERS] = ['x-header'];
 
 /**
 * Allow credentials
 *
 * value type : bool
 * true  : cookies are allowed, response header is sent
 * false : (or missing), cookies are not allowed, no response header
 * optional
 * Used in response header Access-Control-Allow-Credentials
 */
 $corsCfg[CorsHandler::ACCESSCONTROLALLOWCREDENTIALS] = true;
 
 /** ***************************************************************************
 * Add to main config
 * <code>
 * $config[CorsHandler::CORS] = include 'cfg/cfg.2.cors.php';
 * </code>
 */
 return $corsCfg;
 
 |