Armazenando a Autenticação do Dropbox?

4

Estou tentando criar um plug-in do Wordpress que exporte cada postagem do blog para minha pasta da caixa de depósito. O código está abaixo, mas eu tenho um problema.

Se eu executar este código fora do Wordpress, ele funcionará perfeitamente. A tabela é criada e meu token é armazenado. Se eu usar um navegador diferente, ele funcionará perfeitamente ... sem autenticação, porque ele lê a partir do banco de dados.

Meu problema é que quando eu coloco isso no meu plugin, a tabela não é criada. Então, se eu for para um navegador diferente, preciso autenticá-lo novamente.

Ajuda por favor.

Código:     

/*
 * Copyright 2012 Erin Dalzell.
 *
 */

require_once('Dropbox/API.php');
require_once('Dropbox/Exception.php');
require_once('Dropbox/OAuth/Consumer/ConsumerAbstract.php');
require_once('Dropbox/OAuth/Consumer/Curl.php');
require_once('Dropbox/OAuth/Storage/Encrypter.php');
require_once('Dropbox/OAuth/Storage/StorageInterface.php');
require_once('Dropbox/OAuth/Storage/Session.php');
require_once('Dropbox/OAuth/Storage/Filesystem.php');
require_once('Dropbox/OAuth/Storage/PDO.php');

include ABSPATH . '/wp-config.php';

function etd_initialize() {

global $current_user;

    // Set your consumer key, secret and callback URL
    // should be in the settings
    $key      = 'xxxxx';
    $secret   = 'yyyyy';
    $current_user = wp_get_current_user();

    // Check whether to use HTTPS and set the callback URL
    $protocol = (!empty($_SERVER['HTTPS'])) ? 'https' : 'http';
    $callback = $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];


    // Instantiate the Encrypter and storage objects
    $encrypter = new \Dropbox\OAuth\Storage\Encrypter('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');

    // Instantiate the database data store and connect
    $storage = new \Dropbox\OAuth\Storage\PDO($encrypter, 1);
    $storage->connect(DB_HOST, DB_NAME, DB_USER, DB_PASSWORD);

    $storage = new \Dropbox\OAuth\Storage\Session($encrypter);

    $OAuth = new \Dropbox\OAuth\Consumer\Curl($key, $secret, $storage, $callback);

    $dropbox = new \Dropbox\API($OAuth);

    return $dropbox;

}

function export_to_dropbox($id) {
    $dropbox = etd_initialize();

    $post = get_post($id);


    // Create a temporary file and write some data to it
    $tmp = tempnam('/tmp','dropbox');
    file_put_contents($tmp, $post->post_content);

    // Upload the file with an alternative filename
    $put = $dropbox->putFile($tmp, $post->post_title . '.md');

    // Unlink the temporary file
    unlink($tmp);
}

register_activation_hook( __FILE__, 'etd_initialize' );
add_action('publish_post', 'export_to_dropbox');
?>
    
por emd 15.11.2012 / 21:23

2 respostas

1

Não estou familiarizado com a API do Dropbox ou suas bibliotecas, mas provavelmente você precisará escrever seu próprio manipulador de sessão para armazenar os dados da sessão no seu WP DB (ou onde você quiser, com segurança) e associá-los a sua conta de usuário. Essencialmente, ajustando esta linha: $storage = new \Dropbox\OAuth\Storage\Session($encrypter); .

EDITAR:

Se for o lado do WordPress que você está tentando descobrir, salve seus tokens OAuth em um campo usermeta , então, em vez de fazer o fluxo de autenticação completo, primeiro verifique se não há um valor usermeta salvo e use-o se houver.

    
por totels 16.11.2012 / 02:26
0

Acabei escrevendo minha própria classe Storage que usava a tabela Opções do WordPress para armazenar o token criptografado.

    
por emd 18.11.2012 / 01:29