<?php

namespace App\Http\Middleware;

use Closure;
use App\Model\App;
use Dingo\Api\Routing\Helpers;
use Dingo\Api\Exception\StoreResourceFailedException;

/**
 * @description: 验证请求合法性,
 *
 * @author fengyichao
 *         @date 2017年11月8日 下午4:31:11
 */
class ApiSign {
	use Helpers;
	/**
	 * Handle an incoming request.
	 *
	 * @param \Illuminate\Http\Request $request
	 * @param \Closure $next
	 * @return mixed
	 */
	public function handle($request, Closure $next) {
		// 3、sign合法性验证
		//if (! $this->checkSign ( $params ))
			//throw new \Exception ( '签名参数错误' );
		//4、如果存在token 将token写入request
// 		if (isset ( $params ['header'] ['token'] )){
// 			$request ['token'] = $params ['header'] ['token'];
// 			$userId = getUserIdByToken ( $request ['token']);
// 			if($userId){
// 				$request ['user_id'] = $userId;
// 			}
// 		}
		
// 		//5、将所有请求参数写入request
		
// 		if (! empty ( $params ['body'] )) {
// 			foreach ( $params ['body'] as $k => $v ) {
// 				$request [$k] = $v;
// 			}
// 		}
		
		
		return $next ( $request );
	}
	protected function checkSign($params) {
		$sign = $params ['header'] ['sign'];
		unset ( $params ['header'] ['sign'] );
		if (isset ( $params ['body'] ) && count ( $params ['body'] ))
			$all = array_merge ( $params ['header'], $params ['body'] );
		$all = $params ['header'];
		ksort ( $all );
		$tmps = array ();
		foreach ( $all as $k => $v ) {
			$tmps [] = $k . $v;
		}
		$app = App::find ( $params ['header'] ['app_id'] );
		if (! $app)
			return false;
		$string = $app->secret . implode ( '', $tmps ) . $app->secret;
		
		if ($sign == strtoupper ( md5 ( $string ) )) {
			return true;
		}
		return false;
	}
	function error($status_code = 401, $message = '') {
		return [
				'status_code' => $status_code,
				'message' => $message
		];
	}
}
