src/AppBundle/Util/UploaderToken.php

(开头部分) 1KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

<?php

namespace AppBundle\Util;

use Topxia\Service\Common\ServiceKernel;
use AppBundle\Common\TimeMachine;

/**
 * 素材库文件上传Token.
 */
class UploaderToken
{
    public function make($targetType, $targetId, $bucket, $ttl = 86400)
    {
        $user = $this->getCurrentUser();
        $deadline = TimeMachine::time() + $ttl;
        $key = "{$user['id']}|{$targetType}|{$targetId}|{$bucket}|{$deadline}";
        $sign = md5("{$key}|{$user['salt']}");

        return $this->base64Encode("{$key}|{$sign}");
    }

    public function parse($token)
    {
        $token = $this->base64Decode($token);
        if (empty($token)) {
            return null;
        }

        list($userId, $targetType, $targetId, $bucket, $deadline, $sign) = explode('|', $token);

        if ($deadline < TimeMachine::time()) {
            return null;
        }

        $user = $this->getCurrentUser();

        $expectedSign = md5("{$userId}|{$targetType}|{$targetId}|{$bucket}|{$deadline}|{$user['salt']}");
        if ($sign != $expectedSign) {
            return null;
        }

        return array(
            'userId' => $userId,
            'targetType' => $targetType,
            'targetId' => $targetId,
            'bucket' => $bucket,
        );
    }

    private function base64Encode($data)
    {
        return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
    }

    private function base64Decode($data)
    {
        return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
    }

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。