/** * 控制器执行主逻辑函数 */ public function invoke($uri = null) { // 调用父类初始化函数,注册自定义的异常和错误处理逻辑 parent::init(); $path = explode('?', $uri); $parts = array_slice(explode('/', $path[0]), 2); if ($parts[0] === "authorize") { $oauth = new PDOOAuth2(); if ($_POST) { $oauth->finishClientAuthorization($_POST["accept"] == "Yep", $_POST); } $auth_params = $oauth->getAuthorizeParams(); $inputs = ""; foreach ($auth_params as $k => $v) { $inputs = $inputs . '<input type="hidden" name="' . $k . '" value="' . $v . '" />'; } $content = '<html>' . '<head>Authorize</head>' . '<body>' . '<form method="post" action="http://web.miniyun.cn/miniyun_oauth2/api.php/1/oauth2/authorize">' . $inputs . 'Do you authorize the app to do its thing?' . '<p>' . ' <input type="submit" name="accept" value="Yep" />' . '<input type="submit" name="accept" value="Nope" />' . ' </p>' . '</form>' . '</body>' . ' </html>'; echo $content; } elseif ($parts[0] === "token") { $oauth = new PDOOAuth2(); $token = $oauth->grantAccessToken(); #添加登陆日志 $deviceId = $oauth->getVariable("device_id"); MiniLog::getInstance()->createLogin($deviceId); #返回site_id,便于与cloud.miniyun.cn通信 $token["site_id"] = MiniSiteUtils::getSiteID(); echo json_encode($token); } }
/** * 获得站点信息 */ public static function getSiteInfo() { $data = array(); $data['version'] = APP_VERSION; $data['status'] = "done"; $data['app_name'] = 100; $data['app_logo'] = MiniHttp::getSystemParam("absoluteUrl") . "/static/images/logo.png"; $data['default_size'] = 100; $data['can_register'] = true; $data['register_url'] = ""; //产品名称 $value = MiniOption::getInstance()->getOptionValue('site_name'); if (isset($value)) { $data['app_name'] = $value; } //站点ID $data['code'] = MiniSiteUtils::getSiteCode(); $data['site_id'] = MiniSiteUtils::getSiteID(); $data['wx_token'] = MiniSiteUtils::getWxToken(); //产品Logo $value = MiniOption::getInstance()->getOptionValue('site_logo_url'); if (isset($value)) { $data['app_logo'] = MiniHttp::getSystemParam("absoluteUrl") . $value; } //判断系统是否可以注册 $enableReg = MiniOption::getInstance()->getOptionValue("user_register_enabled"); if (isset($enableReg) && $enableReg == "0") { $data['can_register'] = false; } //系统注册入口是否在第3方 $value = MiniOption::getInstance()->getOptionValue("user_create_url"); if (isset($value) && !empty($value)) { $data['register_url'] = $value; } // 32M $blockSize = 4 * 1024 * 1024; // 内存配置需要 $memoryLimit = CUtils::return_bytes(ini_get('memory_limit')); if ($memoryLimit < 4 * $blockSize) { $blockSize = $memoryLimit / 4; } $postMaxSize = CUtils::return_bytes(ini_get('post_max_size')); $uploadMaxFileSize = CUtils::return_bytes(ini_get('upload_max_filesize')); $min = $postMaxSize > $uploadMaxFileSize ? $uploadMaxFileSize : $postMaxSize; $data['block_size'] = $min > $blockSize ? $blockSize : $min; if ($data['block_size'] == $postMaxSize && $data['block_size'] == $uploadMaxFileSize) { $data['block_size'] = $data['block_size'] - 104858; } // 获取忘记密码使用短信口子地址 $forgetPasswordUrl = MiniHttp::getSystemParam("absoluteUrl"); $data['forget_password_url'] = $forgetPasswordUrl; return $data; }
/** * 控制器执行主逻辑函数 * @param $uri 地址 * @return mixed $value 返回最终需要执行完的结果 */ public function invoke($uri = null) { $user = MUserManager::getInstance()->getCurrentUser(); $device = MUserManager::getInstance()->getCurrentDevice(); $data = array(); $data['user_name'] = $user["user_name"]; $data['display_name'] = $user["nick"]; $data['id'] = $user["id"]; $data['uid'] = $user["user_uuid"]; $data['space'] = (double) $user["space"]; $data['used_space'] = (double) $user["usedSpace"]; $data['email'] = $user["email"]; $data['phone'] = $user["phone"]; $data['avatar'] = $user["avatar"]; $data['mult_user'] = false; $data['site_id'] = MiniSiteUtils::getSiteID(); $data["device_id"] = $device["id"]; $value = MiniOption::getInstance()->getOptionValue('site_company'); if (isset($value)) { $license['company'] = $value; } else { $license['company'] = ""; } $license['licensestr'] = ""; //免费版本 $license['is_vip'] = false; // 目前针对iis服务器,使客户端禁用put协议 if (isset($_SERVER['SERVER_SOFTWARE']) && strpos(strtolower($_SERVER['SERVER_SOFTWARE']), 'iis') !== false) { $data['disable_put'] = true; } // 32M $blockSize = 4 * 1024 * 1024; // 内存配置需要 $mem_limit = CUtils::return_bytes(ini_get('memory_limit')); if ($mem_limit < 4 * $blockSize) { $blockSize = $mem_limit / 4; } $postMaxSize = CUtils::return_bytes(ini_get('post_max_size')); $uploadMaxFileSize = CUtils::return_bytes(ini_get('upload_max_filesize')); $min = $postMaxSize > $uploadMaxFileSize ? $uploadMaxFileSize : $postMaxSize; $data['block_size'] = $min > $blockSize ? $blockSize : $min; if ($data['block_size'] == $postMaxSize && $data['block_size'] == $uploadMaxFileSize) { $data['block_size'] = $data['block_size'] - 104858; } echo json_encode($data); }
/** * 全文检索 * @param string $key 关键字 * @param string $path 路径 * @return array */ public function search($key, $path) { $siteId = MiniSiteUtils::getSiteID(); $searchItems = $this->searchKeyWordAndSiteId($siteId, $key); $values = array(); foreach ($searchItems as $searchItem) { //遍历,查询文件signature,根据signature判断当前用户有无浏览该文件权限 $version = MiniVersion::getInstance()->getBySignature($searchItem["signature"]); //反向查询系统所有的文件记录 $fileList = MiniFile::getInstance()->getAllByVersionId($version["id"]); foreach ($fileList as $file) { //对具有相同signature的文件进行过滤 $filePath = $file['file_path']; $isInString = strpos($filePath, $path); if ($isInString === false) { continue; } $userId = (int) $this->user['id']; $permission = UserPermissionBiz::getInstance()->getPermission($filePath, $userId); if ($permission['permission'] == '000000000' || $permission['permission'] == '011111111') { //没有读权限则不显示出来 continue; } if (empty($permission)) { //如果上面读权限为空,则说明没有共享,这时当前用户只能看见自己的文件 $pathArr = explode('/', $filePath); $masterId = $pathArr[1]; if ($masterId != $userId) { continue; } } $item = array(); $item['signature'] = $searchItem["signature"]; //相同的signature可能对应多个文件 $item['file_name'] = $file['file_name']; $item['file_path'] = $filePath; $item['summary'] = $searchItem["summary"]; array_push($values, $item); } } return $values; }
/** * 把文档进行转换 * @param array $version * @param string $mimeType 如mineType为空,则使用version.mime_type */ private function pushFileConvert($version, $mimeType) { if (empty($mimeType)) { $mimeType = $version["mime_type"]; } $miniHost = PluginMiniDocOption::getInstance()->getMiniyunHost(); $siteId = MiniSiteUtils::getSiteID(); $signature = $version["file_signature"]; $node = PluginMiniDocNode::getInstance()->getConvertNode($signature); if (!empty($node)) { $url = $node["host"] . '/api.php?route=file/convert'; $downloadUrl = $miniHost . "api.php?route=module/miniDoc/download&signature=" . $signature; $callbackUrl = $miniHost . "api.php?route=module/miniDoc/report&node_id=" . $node["id"] . "&signature=" . $signature; $data = array('signature' => $signature, 'site_id' => $siteId, 'mime_type' => $mimeType, 'download_url' => $downloadUrl, "callback_url" => $callbackUrl); $http = new HttpClient(); $http->post($url, $data); $result = $http->get_body(); $result = json_decode($result, true); if ($result['status'] == 1) { $this->updateDocConvertStatus($node["id"], $version["file_signature"], 1); } } }
/** * 秒传接口 * @param array $params */ function fileSec($params) { $signature = $params["signature"]; $data['success'] = false; $data['store_type'] = "miniStore"; //查询断点文件表 $node = null; $breakFile = PluginMiniBreakFile::getInstance()->getBySignature($signature); if (!empty($breakFile)) { $node = PluginMiniStoreNode::getInstance()->getNodeById($breakFile["store_node_id"]); } //如果断点文件不存在或无效则重新分配一个存储节点 if (empty($node) || $node["status"] === -1) { $node = PluginMiniStoreNode::getInstance()->getUploadNode(); //更新断点表该文件的状态 PluginMiniBreakFile::getInstance()->create($signature, $node["id"]); } //回调地址 $callbackUrl = MiniHttp::getMiniHost() . "api.php?node_id=" . base64_encode($node["id"]); foreach ($params as $key => $value) { $callbackUrl .= "&" . $key . "=" . base64_encode(urlencode($value)); } $callbackUrl .= "&encode=base64"; $siteId = MiniSiteUtils::getSiteID(); $data['callback'] = $callbackUrl; //兼容127.0.0.1 $urlInfo = parse_url($node["host"]); if ($urlInfo["host"] == "127.0.0.1") { //说明迷你存储在本机,直接把127.0.0.1替换为迷你存储端口 $defaultHost = MiniHttp::getMiniHost(); $miniHostInfo = parse_url($defaultHost); $node['host'] = $miniHostInfo["scheme"] . "://" . $miniHostInfo["host"] . ":" . $urlInfo["port"] . $miniHostInfo["path"]; } $data['url'] = $node["host"] . "/api.php"; echo json_encode($data); exit; }
/** * 用户登录 * @return array|bool * @throws */ public function oauth2() { $isExtend = apply_filters("license_expired"); if ($isExtend === 1) { $userName = MiniHttp::getParam("username", ""); if ($userName !== "admin") { throw new MiniException(440); } } $oauth = new PDOOAuth2(); $token = $oauth->grantAccessToken(); #添加登陆日志 $deviceId = $oauth->getVariable("device_id"); MiniLog::getInstance()->createLogin($deviceId); #返回site_id,便于与cloud.miniyun.cn通信 $token["site_id"] = MiniSiteUtils::getSiteID(); return $token; }
/** * 为searchFile对象生成索引编制对象 * @param string $nodeIds * @param string $signature */ public function createTask($nodeIds, $signature) { $miniHost = PluginMiniSearchOption::getInstance()->getMiniyunHost(); $siteId = MiniSiteUtils::getSiteID(); $ids = explode(",", $nodeIds); //为索引服务器生成索引记录记录 //剔除已生成的索引记录 $nodes = PluginMiniSearchNode::getInstance()->getValidNodeList(); $needCreateTaskNodeIds = array(); foreach ($nodes as $node) { $existed = false; $nodeId = $node["id"]; foreach ($ids as $id) { if ($id == $nodeId) { $existed = true; } } if (!$existed) { array_push($needCreateTaskNodeIds, $node["id"]); } } foreach ($needCreateTaskNodeIds as $nodeId) { $task = SearchBuildTask::model()->find("file_signature=:file_signature and node_id=:node_id", array("file_signature" => $signature, "node_id" => $nodeId)); if (!isset($task)) { $task = new SearchBuildTask(); $task->file_signature = $signature; $task->node_id = $nodeId; $task->status = 0; $task->save(); } //向迷你搜索服务器发送编制索引任务 $this->buildTask($miniHost, $siteId, $task); } }