/** * Construção de Parâmetros * * Captura o endereço de requisição e efetua a conversão de seu conteúdo * para possíveis parâmetros apresentados ao cliente. * * @return WSL_Controller_Request Próprio Objeto para Encadeamento */ protected function _buildParams() { // Parâmetros de Roteamento $params = WSL_Controller_Front::getInstance()->getRouter()->getParams(); // Processamento foreach ($params as $name => $value) { // Configuração $this->setParam($name, $value); } return $this; }
/** * Execução de Serviço * * Construção de Serviços para determinados elementos do sistema, utilizando * ações nesta controladora para acesso. Esta inicialização deve ser * efetuada somente uma vez por requisição. * * @param string $element Nome do Serviço para Execução * @return null */ protected function _execute($element) { // Desabilitar Layout WSL_Controller_Front::getInstance()->getConfig()->setParam('Layout.enabled', false); // Inicialização $service = new SoapServer(null, array('uri' => 'tns:' . $element . 'Service')); // Configurar Classe $service->setClass('Service_' . $element); // Tratamento de Requisição try { $service->handle(); } catch (Exception $e) { // Tratamento de Erro $service->fault('Server', $e->getMessage()); } }
/** * Executa o Compilador * * Recebe como parâmetros as informações passadas durante a requisição para * executar o compilador de documentos LaTeX. O primeiro parâmetro * apresentado é o nome do Plugin para execução de entrada de conteúdo; o * segundo representa o nome do Plugin de saída; e o último parâmetro é um * conjunto de documentos que devem ser compilados para saída do documento * no formato desejado. * * @param int $user Referência ao Usuário Utilizado * @param string $input Nome do Plugin de Entrada * @param string $output Nome do Plugin de Saída * @param array $documents Conjunto de Documentos para Compilação * @return array Conjunto de Informações para Documento Resultado * @throws Exception Hash não Apresentado * @throws Exception Nome de Arquivo não Apresentado * @throws Exception Hash Inválido */ public function compile($user, $input, $output, array $documents) { // Documentos Apresentados? if (empty($documents)) { // Sem Compilação return array(); } // Adaptador de Conexão $adapter = WSL_Controller_Front::getInstance()->getConfig()->getParam('Db.adapter'); // Adicionar Novo Documento $reference = $adapter->insert('wsl_documents', array('user_id' => $user)); // Inicialização $elements = array(); // Capturar Documentos foreach ($documents as $document) { // Hash Apresentado? if (empty($document['hash'])) { // Erro Encontrado throw new Exception('Empty Hash'); } // Nome de Arquivo Apresentado? if (empty($document['filename'])) { // Erro Encontrado throw new Exception('Empty Filename'); } // Apresentado Conteúdo? if (!empty($document['content'])) { // Criar Novo Documento $element = WSL_Model_File_File::buildFromContent($document['filename'], base64_decode($document['content'])); } else { // Criação por Hash $search = WSL_Model_File_File::findFromHashes(array($document['hash'])); // Capturar Elemento $element = reset($search); // Elemento Existe? if (!$element->exists()) { throw new Exception("Invalid Hash: '{$document['hash']}'"); } // Salvar Nome de Arquivo $element->setFileName($document['filename']); } // Registro de MetaInformações $element->setContainer('documents')->setCategory('input')->setReference($reference); // Salvar Elemento $element->save(); // Anexar Elemento $elements[] = $element; } // Inicialização de Contexto $context = new WSL_Compiler_Context(); // Cópia de Arquivos foreach ($elements as $element) { $context->copy($element->getFileName(), $element->getRealPath()); } // Inicialização de Compilador $compiler = new WSL_Compiler_Manager($context); $compiler->setBeforePlugin($input)->setAfterPlugin($output); // Execução $compiler->compile(); // Capturar Documento Resultante $output = $context->getOutput(true); // Existe Saída? if (empty($output)) { // Sem Arquivos return array(); } // Adicionar Arquivo Resultado $element = WSL_Model_File_File::buildFromRealPath($output); $element->setFileName($context->getOutput()); // Resultados $result = array('hash' => $element->getHash(), 'filename' => $element->getFileName(), 'content' => base64_encode($element->getContent())); // Registro de MetaInformações $element->setContainer('documents')->setCategory('output')->setReference($reference); // Salvar Informações $element->save(); // Apresentação return $result; }
<?php // Ambiente de Software define('APPLICATION_ENV', 4); // Diretório do Aplicativo define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Inicialização de Caminho de Inclusão set_include_path(implode(PATH_SEPARATOR, array(dirname(APPLICATION_PATH) . '/library', get_include_path()))); // Carregamento require_once 'WSL/Loader/Autoloader.php'; // Autocarregador de Classes $autoloader = WSL_Loader_Autoloader::getInstance(); // Controladora Frontal $front = WSL_Controller_Front::getInstance(); // Mapeamento de Camadas $autoloader->setMapper('Controller', realpath(APPLICATION_PATH . '/controllers'))->setMapper('Model', realpath(APPLICATION_PATH . '/models'))->setMapper('Service', realpath(APPLICATION_PATH . '/services')); // Elementos de Fluxo $request = new WSL_Controller_Request(); $response = new WSL_Controller_Response(); // Caminhos de Renderização $front->getView()->addScriptPath(realpath(APPLICATION_PATH . '/views')); // Configurações $front->getConfig()->setParam('Layout.enabled', true); // Banco de Dados $adapter = new WSL_Db_Adapter_MySQL(array('host' => 'localhost', 'dbname' => 'wsl', 'username' => 'root', 'password' => '102030')); // Registrar Adaptador $front->getConfig()->setParam('Db.adapter', $adapter); // Camada de Arquivos $handler = new WSL_Model_File_DbInfoHandler($adapter); WSL_Model_File_File::setDefaultHandler($handler); WSL_Model_File_File::setBasePath(realpath(APPLICATION_PATH . '/../data/files'));
/** * Autenticação * * Ação utilizada para efetuar a autenticação de um usuário dentro do * sistema. Para utilizar o serviço, o usuário necessita efetuar uma * autenticação no sistema, apresentando informações sobre e-mail e hash * utilizado, que serão comparados com a base de dados. Caso as informações * estiverem corretas, será apresentado um token que deve ser considerado * como sessão atual do usuário, necessitando ser enviado sempre que algum * recurso do servidor estiver sendo utilizado. * * @param string $email E-mail do Usuário Cadastrado * @param string $hash Hash do Usuário para Autenticação * @return string Token de Autenticação */ public function login($email, $hash) { // Adaptador de Conexão $adapter = WSL_Controller_Front::getInstance()->getConfig()->getParam('Db.adapter'); // Filtro de Informações $email = (string) $email; $hash = (string) $hash; // Consulta $sql = <<<SQL SELECT `u`.`id`, (`u`.`hash` = '{$hash}') AS `compare` FROM `wsl_users` AS `u` WHERE `u`.`email` = '{$email}' SQL; // Consulta de Informações $result = $adapter->query($sql); // Verificação if (!empty($result)) { // Elemento Encontrado $element = reset($result); // Comparação de Senhas if ($element['compare']) { // Existe Usuário Autenticado? do { // Credenciais Válidas $seed = date('Y-m-d H:i:s.u'); // Criação de Token $token = self::salt($seed); // Possível Autenticar? } while ($this->check($token, true)); // Identificador $id = $element['id']; // Sessão Utilizada $adapter->insert('wsl_sessions', array('user_id' => $id, 'token' => $token)); } else { // Hash não Encontrado $token = null; } } else { // Usuário não Encontrado $token = null; } // Apresentação return $token; }