/var/www/vhosts/nabawater/api/components
NameSizeModeActions
ApiException.php5690644editdlrm
CApplication.php5560644editdlrm
CController.php90390644editdlrm
CHttpBearerAuth.php8500644editdlrm
CModule.php3770644editdlrm
CResponse.php70420644editdlrm
CSerializer.php5150644editdlrm
CUrlRule.php3750644editdlrm
Vendor.php1340644editdlrm
Edit: /var/www/vhosts/nabawater/api/components/CResponse.php (7042B)
*/ class CResponse extends Response { public $whiteList = ['swagger', 'spinner', 'v1/swagger']; /** * @var bool */ public $internal = false; /** * CResponse constructor. * @param array $config * @throws \yii\base\InvalidParamException */ public function __construct(array $config = []) { parent::__construct($config); $this->on(self::EVENT_BEFORE_SEND, function ($event) { $controller = Yii::$app->controller; if ($controller !== null && ArrayHelper::isIn($controller->getUniqueId(), $this->whiteList)) { return; } $this->process($event->sender); }); } /** * @param Response $response * @throws \yii\base\InvalidParamException * @throws \yii\base\InvalidConfigException * @throws \yii\base\NotSupportedException * @throws \yii\db\Exception */ public function process(Response $response) { if ( $response->getStatusCode() === 404 && (!is_array($response->data) || $response->format !== $response::FORMAT_JSON) ) { $response->data = 'Page not found'; $response->format = $response::FORMAT_JSON; } $headers = $response->getHeaders(); $headers->set('content-security-policy', "frame-ancestors 'self'"); $headers->set('strict-transport-security', 'max-age=31536000; includeSubDomains; preload'); $headers->set('max-age', '31536000'); $headers->set('x-frame-options', 'SAMEORIGIN'); $data = [ 'status' => $response->getIsSuccessful() ? 200 : 422, 'data' => $response->data, 'time' => time(), 'message' => 'Successful operation', 'system' => [ 'nc' => 0 ] ]; /** * @var $controller CController */ $controller = Yii::$app->controller; if ($controller !== null) { $data['message'] = $controller->getMessage(); if ($controller->getErrors() !== null) { $data['errors'] = $controller->getErrors(); } } $user = Yii::$app->getUser()->getIdentity(); if ($user !== null) { $notification = new Notification(); $count = $notification->count(); $data['system']['nc'] = $count; } if ($data['status'] !== 200) { $data['message'] = $this->resolveErrorMsg($data['data']); $data['data'] = (object) []; $response->statusText = $data['message']; } /* Solving the response data from null */ $data['data'] = $data['data'] === null ? [] : $data['data']; if ($data['data'] === [] && $controller !== null && $controller->getIsObject()) { $data['data'] = (object) $data['data']; } $request = Yii::$app->getRequest(); /* @var $db Connection */ $db = Yii::$app->db; if ($db->getSchema()->getTableSchema('api_log') === null) { $db->createCommand()->createTable('api_log', [ 'api_log_id' => Schema::TYPE_BIGPK, 'request_url' => Schema::TYPE_TEXT, 'request_method' => Schema::TYPE_STRING, 'request_data' => Schema::TYPE_TEXT, 'response_code' => Schema::TYPE_SMALLINT, 'response_data' => Schema::TYPE_TEXT, 'trace' => Schema::TYPE_TEXT, 'created_at' => Schema::TYPE_DATETIME ])->execute(); } if ($db->getSchema()->getTableSchema('api_log') !== null) { if ($request->getMethod() === 'GET') { $inputData = $_GET; if ($inputData === []) { $inputData = $request->getRawBody(); } } else { $inputData = $request->getBodyParams(); if ($inputData === []) { $inputData = $request->getRawBody(); } } if (is_array($inputData)) { $inputData = Json::encode($inputData); } if (stripos($request->getAbsoluteUrl(), '/order/deliveryboy') !== FALSE) { $db->createCommand()->insert('api_log', [ 'request_url' => $request->getAbsoluteUrl(), 'request_method' => $request->getMethod(), 'request_data' => $inputData, 'response_code' => $response->getStatusCode(), 'response_data' => Json::encode($data), 'trace' => Json::encode($response->data), 'created_at' => date('Y-m-d H:m:s') ])->execute(); } // if (stripos($request->getAbsoluteUrl(), '/user/register') !== FALSE) { // $db->createCommand()->insert('api_log', [ // 'request_url' => $request->getAbsoluteUrl(), // 'request_method' => $request->getMethod(), // 'request_data' => $inputData, // 'response_code' => $response->getStatusCode(), // 'response_data' => Json::encode($data), // 'trace' => Json::encode($response->data), // 'created_at' => date('Y-m-d H:m:s') // ])->execute(); // } } if ($request->get('response') === 'default') { $data = $response->data; } $response->data = $data; } /** * @param $errorResponse * @return string * @throws \yii\base\InvalidParamException */ private function resolveErrorMsg($errorResponse) { if (is_string($errorResponse)) { return $errorResponse; } if (array_key_exists('message', $errorResponse)) { return $errorResponse['message']; } else { if (array_column($errorResponse, 'field') !== []) { return array_column($errorResponse, 'message')[0]; } } #TODO: Find different error response structure and resolve the error message Com::log(print_r($errorResponse, 1)); return 'Uncaught error structure, contact your administrator :('; } /** * */ public function send() { if ($this->internal) { $this->process($this); $this->prepare(); } else { parent::send(); } } }