✏️ 正在编辑: Link.php
路径:
/srv/systems_dir/biblioteca_yuppie/library/Yuppie/Link.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php require_once 'Crypt.php'; $_PAR = array(); class Yuppie_Link { // Variável que armazena a chave do checksum static $chave = "chavedockecksum"; // Variável que armazena o link var $link = ''; // construtor, os parâmetros são simples // pagina = arquovo php a ser chamado // parametros: parâmetros da chamada ex: "id=10&tipo=noticia" function Link($pagina = '', $parametros = '') { // chama o método responsável pela criação do link // repassando os parâmetros $this->link = $this->criaLink($pagina, $parametros); // retorna o link encriptado return $this->link; } static function prepareLink() { if( isset($_SERVER['REQUEST_URI']) ){ $uri = ltrim($_SERVER['REQUEST_URI'], '/'); $sitekey = "/" . substr($uri, 0, strpos($uri, '/')); define("rootvirtual", $sitekey); define("rootfisico", getcwd()); } } static function criaLink($pagina = '', $parametros = '') { // Yuppie_Link::prepareLink(); // transforma os parâmetros em um array associativo parse_str($parametros, $p); // adiciono nesse array na posição "_pagina" o arquivo php // $p["_pagina"] = $pagina; // Aqui eu adiciono uma chave calculada a partir do que tem no array $p // porém adiciono somente os 5 primeiros caracteres para encurtar a chave // esse será o parâmetro responsável por garantir a integridade // da informação passada $p["_check"] = substr(crypt(json_encode($p), Yuppie_Link::$chave), 0, 5); // retornamos a URL encriptando a versão codificada em json dela. // rootvirtual é a constante que diz qual o root do site, // explicarei mais abaixo de onde ela vem return $pagina . "?" . Yuppie_Crypt::Encrypt(json_encode($p)); } static function trataQuery() { // verifica a existência de query-string e adiciona ela na variável $q if( $q = $_SERVER['QUERY_STRING'] ){ // decodifica a string $p = json_decode(Yuppie_Crypt::Decrypt($q), true); // se o retorno for um array, quer dizer que a query é parcialmente válida if( is_array($p) && isset($p["_check"]) ){ // carrega a chave do vetor $chave = $p["_check"]; // remove a chave do vetor unset($p["_check"]); // recalcula a chave e verifica se é diferente a chave passada if( substr(crypt(json_encode($p), Yuppie_Link::$chave), 0, 5) != $chave ) // Se for, a requisição eh redirecionada para o index. throw new Core_Exception('URL que você está tentando acessar é inválida!'); else { // se for válida é criada a variável global _PAR e o vetor // de parâmetros é jogado nela // $GLOBALS["_PAR"] = $p; $p['uri'] = $_SERVER['REQUEST_URI']; // sai da função return $p; } } else { // se não for um vetor, houve modificação da url, e a requisição // é enviada para o index throw new Core_Exception('URL que você está tentando acessar é inválida!'); } // termina a execução e redireciona die(); } } static function shortenBitly(string $longLink, ?string $authorization) : string { if (empty($authorization)) { return ""; } $data = [ 'domain' => "bit.ly", 'long_url' => $longLink, ]; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => "https://api-ssl.bitly.com/v4/shorten", CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_ENCODING => "UTF-8", CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_HTTPHEADER => [ "Authorization: Bearer {$authorization}", "Content-Type: application/json" ] ]); $response = json_decode(curl_exec($curl)); curl_close($curl); if (!empty($response->message)) { return ""; } return $response->link; } }
💾 保存文件
← 返回文件管理器