* @date 2020-01-23 00:51:13 */ declare(strict_types=1); namespace HyperfTest\Units; use App\Constants\CommonConstant; use App\Model\Mongo\VideoHistoryModel; use Carbon\Carbon; use HyperfTest\HttpTestCase; use Modules\Api\Services\AuthService; class UtilsTest extends HttpTestCase { /** * 属性描述. * * @var AuthService|null */ private $appAuthService = null; /** * 测试之前执行. */ public function setUp(): void { parent::setUp(); $this->appAuthService = new AuthService; } /** * 测试完毕后执行. */ public function tearDown(): void { parent::tearDown(); } public function testAesEncode() { $handshake = CommonConstant::HANDSHAKE; // $handshake = 'v20200101'; $encodeToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImlzcyI6Imh0dHBzOi8vZ2Z3Lmdvb2dsZS5jb20ifQ.eyJpc3MiOiJodHRwczovL2dmdy5nb29nbGUuY29tIiwiYXVkIjoiYXBwLXVzZXJzIiwiZXhwIjoxNjM5MDYxODU0LjU1MjI4NiwibmJmIjoxNjM4OTUzODI0LjU1MjI4NiwianRpIjoiMjM4OGM3OGFhOWQxOGRiNmY1ZWViNmNkZTM4YTRhZTQiLCJpYXQiOjE2Mzg5NTM4NTQuNTUyMjg2LCJ1c2VyX2lkIjoxNDU2OTk4MiwidmVyc2lvbiI6IjEuMC4wIiwiZGV2aWNlX25vIjoiZGV2aWNlMDAxIiwiZGV2aWNlX3R5cGUiOiJBIiwiZmluZ2VyX2hhc2giOiJmYzljZDUwYzE4MDcyYWY3MjMzNDE4Njk3MDMzMTljOSIsImlwIjoiMTI3LjAuMC4xIn0.BVLWtOrkr9nY6XCz_5nXSAlOZpTYuzBMMTh__u3xHUc'; // $str = <<assertEquals(1, 1); } public function testAesDecode() { $handshake = CommonConstant::HANDSHAKE; // $handshake = 'v20211204'; $encodeData = 'q1sblNN9XgvBWx8Ke0mxsa9IywfJACZdo61C287W7rc3FC1At+annD2lLF48prLqFwcDO+PqAAZCbUE7cCiKTvZGsxBGNIg/SB5dgjeMtOdEX2WRrIB9OgSWPQIi82WuiQhJpkspyDwmcrq/sl/DVmRIMuwSeKRNgew82wOqNuAgFMqG+G5S4pdu/z3jdK147CGphJe72jFTdTXR4+GGOwLMzu5Y5hGea2XrqsdQ6jw='; // $data = 'Fom4gekRgYiPQ9T2jdL+itR3mXMPbkhhKemb7jRccP7mPcmBrLsMxKcHk6Ws3XVub8yqSvKrAAhtr3GSw+gUk4Wa1njyBIEWlVujQTFgK4uxY2Y\/GrjoCZG7P6LcAiEb2huoiavlQCrDz5\/DMGF2tVkt6wnOT5\/K43lY1AxicHd8AP8xqM3o12WwOolZCGzc2c4IMnm1WdiJedFufyJCmHHRvKpdeL3CFjv\/MU6KS\/1+JjutM7Qn\/7Z+rjng0QeJ9opdzu2cqinXwD9fBF97ZwQ4y7jheF8IyUCLte7jkPpxK9Xfq2H5NLJGoxgIB79orHlMUiXWsP\/3V2G9QvvkEZ1xsnjIrxiKnS43+1VcAVxUR69ZSxwYwYxY7QhnBIeHyHW2TZI1YjIxzLZyQD3XBvQ350IM\/uWdYdjOaFPVia8du6ZNMtSLpvnxCIKgOChf4HducXPqd6T9ClOZxXthcPLAL4Ddrg8lViK+eu0HMmnnRi4zYOG1buTtchAVY1PJuXRkl8RIGYmp4b+80He3y2lBAk0uyOkXt6hTQSs42LOAWSIa42N4WaXwPLm8ysBPgWuuj8G15jU+x4GsQdhdydB6WD5t7G\/IUSRFWf\/iPHnF+3UqOW4WRH\/a1se5VknN8E8WNnfvrjBkH7WisGUhAK\/1J2cVZm\/LxNon6GwUwwU1PXcTMmc05ZUhq8VwwacHV3++yrkweYTWIIRTS8S46\/GmhoqKm\/N9HdWpUJ0gsi8+yW6gsDKrHW2uyUDkThfHtsyfyuGkJzBfIP\/FIwj9qg+tz\/sf48IDQDkGQKY7cDfeba3dfaqR9wRqW2LWHkFVWoS90kF9nuDkSIfJvMuHxSWAnOAgGY73f9HJPtcyYHL5fY9NHXK4Gza9Y4Liw1s+S27QbHNw6ZhoxuzFUEtb\/N73bxVYyTVM4Q7kEYTwGlGPHrtg7IHvi1QcXwRPn1L1iN+IRe1qMXSRfzhDqia8g\/J8t100veZf8pHAkxslWl2XoBijiRIYi\/KgqKr1oaIWSc+a0Viyc4jXuJlP5wDyl+oOljHyd9epRIooh0twheyxBuNa96Kzt\/XTa7F4scOJkTR9\/V9HMJitJnGj+dKfil\/X4NTxLkrblJi0kpeetNfwNsMDcJlErQZyQjl8QMuz4UIzvogrwAAQ88rdB97j6hMYo8SPkh0xGpBtQKLq5LJYRcJcgWDtI1LTlZXdsScg7BW6wp6\/CQXGP15+Cgojcoqb0UN+KjjHKVmDBSLj\/a7JWErAHzPKq+OmRWM0mBkgWGj9wqfPIZ9CjhO0ddhvXUMV1IkfIv0C+bkYGZ7vuNgXCwBCK8+QT7Lq2KOip5IggWLsHZqa0tXOC030rGmQoTtiY6lplGKNYE1PxE3NuMO\/L0W0GcoATTOz914ucyrZWZRLagBtXR+32vlKuW+KUPmStXaK+HqiskC2chYbS0SV8NS3v7Jp9jMgHLsYn8hxNRjUANleiFcccONJ8bPg3975aBnZA9u5iVmLTfJfwkTtvtscLx\/2MIjCkdeoiDjCuwuBRXwoiH1XOppQJHyubEYV859Jayg90X2Ef6oKzMbpe0i0mTvQMMK591yxfgnZK6hw4LjqpOj3BzSaHt6ZMQXUPpOPMCARFcFM46usI9kaA+k5TsSU2XJR3gwIrzWRpSGQKhdlwb9f+fM7ruIxANQTii1TPq2ZR8f6TLLSScdukT4LNjsDPne7BgNbFKXJ44snONzvLGdNUnZJaLf0QiEYkPmB5Q6viCODm12pY2qPUgkl4OBUmq3myWRhoWek6oP0EqryTvzAOUbAcs6k6F0btQxyD6kgV8zo\/tRHm+xIRU51F5HWFzRFPARqIffFJGVT95n+scctVPaKY9gfciiHwvUby3pEETSgQqzEVx4tG6u86Zu09dtcY1D5aS6RKB3mg8XkKncPVvQJLGjIkyB4A9Wbh\/2\/+9FKNjvEYr3UbOd7yEhfqEY1nSSbWWb8gGup7K9dOKh7v39GNzoXXkaI8TWa6jCWfPKXYr10Ck0HnLDdmcGYUzYxYyiLLkHxXDDd4lMmax7vcasG+IdG0TaQMKDwImIIjdLWoDykfInGrHZ04MBpaTtpTl06BoR0N7ymIUSIeFaDu0zdD\/MUv3XgqF1gQyDl1PG2oPAi5VChh2m0EVXpFCCM6+6dtnMKzrR\/yaBsOfLfZnvsV7B5jVV7Uxohtf7riuNY5lhKMlLzcDWuYC99R9NSb6Hh8NRGPqAHscaDI667xWxvLGEhrp9wi2gxBKRVUshmTZrx4x1LqmuR9BCT8XNBNF745U\/4zMsM4ATe9mr2G5k+aTjVsz9oRlQq6BgYblTweVl7+sDZ8n6LHXeE5WibwpNfJ8Cx4PtVBQErOx+f8YqjME\/5l3ZvxWSMmhn9bR\/V3Z4OpLjbrPBMEu1PB1Yz9GPSa+yfnA1i25bNkB7UDhu6tEHTOYGzOInVK3HIbWkr4U\/Qe+MOmCHtEMsf5Jp0g+doq3uOXQNxd83\/w6zOHmwrYN37PhRVVq5MrO\/YDqXv8mjmHsHcpn3VdxBWfU7UYbo\/IYW6KBGVEpelMi+lH0a0\/SCrkwqxTawJGRpLUkrZPWaukp7WcppOBDi3EPJfdljsSR7mupThBRc0\/Gh6t4pwgEjODIfvr60tA8sLpR9OPMC5Q9EiLa2RNdQGMdSIHSdhs3+RgM9JGfaZ\/4miPUFAEQmbp3sDsedJZGQYUZtWoAVMM\/n5V4AFsJpkAT6CGw+SuKTX'; $resultData = ''; if (!empty($handshake)) { $arrMap = CommonConstant::getHandSnakeKey($handshake); $originStr = hand_decrypt($encodeData, $arrMap['key'], $arrMap['iv']); $resultData = json_decode($originStr, true); } else { $resultData = $encodeData; } var_dump($resultData); $this->assertEquals(1, 1); } public function testEncodeHeaderTokenInfo() { // JWT $strToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZ2Z3Lmdvb2dsZS5jb20iLCJhdWQiOiJhcHAtdXNlcnMiLCJleHAiOjE1ODE3OTgzMjQsImp0aSI6ImUzNDEyYjVmM2M2MzlkZDZhNjRmOTU4YWFmMmFhYWUzIiwiaWF0IjoxNTgxNzU1MTI0LCJ1c2VyX2lkIjoiNEZNTUVLIiwiZGV2aWNlX25vIjoiYWJjZDEyMzQiLCJkZXZpY2VfdHlwZSI6IkEiLCJpcCI6IjEwLjIxMS41NS4yIn0.J0tbFJq58JtV8teH0p-kHhJzDKwaaHTQ42mhDdVHB9k'; $deviceNo = 'abcd1234'; $fingerHash = 'fc9cd50c18072af723341869703319c9'; $deviceType = 'A'; $handshake = CommonConstant::getHandShake(); $arrInfo = [ 'token' => $strToken, 'device_no' => $deviceNo, 'device_type' => $deviceType, 'finger_hash' => $fingerHash, ]; $enToken = $this->appAuthService->encodeHeaderTokenInfo($arrInfo); $arrData = [ 'token' => $enToken, ]; $strData = hand_encrypt(json_encode($arrData), CommonConstant::HANDSHAKE, ''); $res = [ 'code' => 200, 'message' => '', 'data' => $strData, 'handshake' => $handshake, ]; var_dump($res, json_encode($res, JSON_UNESCAPED_UNICODE)); //'HISG9I8yopDgL31wGyhkzC9Ga1OnaHWNVJsMYBZsdjZqA0mO+dcDQooDbumAd6vlZubyi1OnhSGKyvW90tZzNe/vr6zXwgDWrNIu0Muqi8rdUDKl2fLZ7RrMj7cI7VNiIWMuXptDd/S8Ox5G4YIVqheCxOcBu80+xmc0liZ6Y6Sdxv19pJxvEY1PcF0yf3HxDFvkdqdtXXhlr1xr0Tgndtp15saaRUadk62V3ETqBPYbYBR31o9Qq5lzbNiB2ZYyuPgIdH7ZLb68YCtGgDusfxonNtMpTouCbJSQVw409F+tEWYcKRjXJA9jqETtKNFsb46fJE4bD7NosxE4M8R5ZlcDzbkHouW6zP8ulyal5RWstpsGjf4GsVNq28/giG5IAtT9NHeuiE+EvmNAQYKksSU2T9rhMfdJE7EONQifPItRb+uA0KKYY+y7Zp+/BSCmDRXhlUw+9I5LhI1FGNelbgPLu7SecOZPWnDtApkon9CX9j7v4BL1mmqF1yfZWsMq523OjY1zPd7YW/8Z4TH18H4UjwYzjLbPK5Yde/DdKcqITv64Qj/u7HFCvizIx+C84EIWC1YpdgYmIkKxBlY+Ng==' // '{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZ2Z3Lmdvb2dsZS5jb20iLCJhdWQiOiJhcHAtdXNlcnMiLCJleHAiOjE1ODA0MTM4MjgsImp0aSI6Ijg3Y2QzZGI5ZjNjMzg1OTY0NWUyN2I1M2EzMGE0ZWY2IiwiaWF0IjoxNTgwMzcwNjI4LCJ1c2VyX2lkIjoiVlM5TElDIiwiZGV2aWNlX25vIjoicnJzZXBtbXhqOWNwZW5tOXhtbG9zYW1zM205cHljeWEiLCJkZXZpY2VfdHlwZSI6IkEifQ.H-eduLB-GTpMhdyGB0mDQ1yMLGv5fHH_v07pm8f8U4Y","device_no":"rrsepmmxj9cpenm9xmlosams3m9pycya","device_type":"A"}' $this->assertIsString($enToken); } public function testDecodeHeaderTokenInfo() { $enToken = 'HISG9I8yopDgL31wGyhkzC9Ga1OnaHWNVJsMYBZsdjZqA0mO+dcDQooDbumAd6vlZubyi1OnhSGKyvW90tZzNe/vr6zXwgDWrNIu0Muqi8rdUDKl2fLZ7RrMj7cI7VNiIWMuXptDd/S8Ox5G4YIVqheCxOcBu80+xmc0liZ6Y6Sdxv19pJxvEY1PcF0yf3HxDFvkdqdtXXhlr1xr0Tgndtp15saaRUadk62V3ETqBPYbYBR31o9Qq5lzbNiB2ZYyuPgIdH7ZLb68YCtGgDusfxonNtMpTouCbJSQVw409F+tEWYcKRjXJA9jqETtKNFsb46fJE4bD7NosxE4M8R5ZlcDzbkHouW6zP8ulyal5RWstpsGjf4GsVNq28/giG5IAtT9NHeuiE+EvmNAQYKksSU2T9rhMfdJE7EONQifPItRb+uA0KKYY+y7Zp+/BSCmDRXhlUw+9I5LhI1FGNelbgPLu7SecOZPWnDtApkon9CX9j7v4BL1mmqF1yfZWsMq523OjY1zPd7YW/8Z4TH18H4UjwYzjLbPK5Yde/DdKcqITv64Qj/u7HFCvizIx+C84EIWC1YpdgYmIkKxBlY+Ng=='; $enToken = '{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZ2Z3Lmdvb2dsZS5jb20iLCJhdWQiOiJhcHAtdXNlcnMiLCJleHAiOjE1ODA0MTM4MjgsImp0aSI6Ijg3Y2QzZGI5ZjNjMzg1OTY0NWUyN2I1M2EzMGE0ZWY2IiwiaWF0IjoxNTgwMzcwNjI4LCJ1c2VyX2lkIjoiVlM5TElDIiwiZGV2aWNlX25vIjoicnJzZXBtbXhqOWNwZW5tOXhtbG9zYW1zM205cHljeWEiLCJkZXZpY2VfdHlwZSI6IkEifQ.H-eduLB-GTpMhdyGB0mDQ1yMLGv5fHH_v07pm8f8U4Y","device_no":"rrsepmmxj9cpenm9xmlosams3m9pycya","device_type":"A"}'; $arrTokenInfo = $this->appAuthService->decodeHeaderTokenInfo($enToken); var_dump($arrTokenInfo); $this->assertIsArray($arrTokenInfo); } public function testFilemtime() { $filePath = base_path('/storage/cache/m3u8_url/ff19/3e65/ff193e657aeaeb971d072becae6061df.url'); $mtime = filemtime($filePath); $phpDate = date('Y-m-d H:i:s', $mtime); $diffSeconds = Carbon::now()->diffInSeconds(Carbon::parse($mtime)); $expiredSeconds = 2 * 60 * 60; // 原始文件保存2小时. $diffSeconds2 = abs($diffSeconds); } public function testUserViewedVideo() { $userId = '40009'; $date = Carbon::now()->toDateString(); $videoId = '24805'; $key = $date .'_'. $userId .'_'. $videoId; $mongoId = substr(md5($key), 8, 16); // $count = make(VideoHistoryModel::class)->db()->countDocuments( // ['_id' => $mongoId] // ); var_dump($mongoId); $this->assertIsBool(true); } }