Skip to content

Commit

Permalink
Merge pull request #16 from uspdev/issue_15
Browse files Browse the repository at this point in the history
Fix #15 - usando variaveis de ambiente
  • Loading branch information
masakik authored Aug 7, 2020
2 parents ea11050 + cf0fd6c commit 3223a9e
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 31 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ config.php
/vendor/
/test/
composer.lock
teste.php
27 changes: 15 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,26 @@ composer install

## Uso

Esta biblioteca foi testada em debian 10, debian 9, ubuntu 18.04 e ubuntu 16.04.
Esta biblioteca foi testada em debian 10, debian 9, ubuntu 20.04, ubuntu 18.04 e ubuntu 16.04.

O token pode ser usado para várias aplicações por meio do callback_id cadastrado em https://dev.uspdigital.usp.br/adminws/

Deve-se criar uma rota (/loginusp por exemplo) com o seguinte código:

```php
require_once '../vendor/autoload.php';
require_once __DIR__.'/vendor/autoload.php';
session_start();

$auth = new Uspdev\Senhaunica\Senhaunica([
'consumer_key' => 'aaaa',
'consumer_secret' => 'sdkjfcsdkfhsdkfhsdkfhsdhkf',
'callback_id' => 1, // callback_id é o sequencial no servidor
'amb' => 'dev',// 'dev' = teste, 'prod' = producao
]);
use Uspdev\Senhaunica\Senhaunica;

putenv('SENHAUNICA_KEY=');
putenv('SENHAUNICA_SECRET=');
putenv('SENHAUNICA_CALLBACK_ID=');

# se for usar ambiente de testes use
# putenv('SENHAUNICA_DEV=');

$auth = new Senhaunica();
$res = $auth->login();

echo '<pre>';
Expand All @@ -44,12 +48,11 @@ header('Location:/alguma_rota');

```

Se você quiser, por exemplo, validar o vínculo do login, pode o código abaixo. Ele irá retornar o primeiro vínculo que encontrar dentro da lista fornecida. Ao invés de usar `tipoVinculo` você pode usar qualquer variável dentro do array de vínculos.
Se você quiser, por exemplo, validar o vínculo do login, use o código abaixo. Ele irá retornar o primeiro vínculo que encontrar dentro da lista fornecida. Ao invés de usar `tipoVinculo` você pode usar qualquer variável dentro do array de vínculos.

```php
$vinculo = $auth->obterVinculo('tipoVinculo', ['SERVIDOR','OUTRO_VINCULO', '...']);

```


OBS: Anteriormente o ambiente era setado como 1=dev e 2=prod. Nas novas versões os números 1 e 2 serão descontinuados, premanecendo somente 'dev' e 'prod'.
OBS: 7/8/2020 - atualizado para utilizar variáveis de ambiente com os parâmetros do oauth,
tornado obsoleto o uso de array de configuração no contrutor.
82 changes: 63 additions & 19 deletions src/Senhaunica.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,54 @@ class Senhaunica

protected $curl_options = array(
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
);

public function __construct($oauth)
protected $options;

protected $user_data_url;

public function __construct($oauth = '')
{
if ($oauth['amb'] == 1 || $oauth['amb'] == 'dev') {
$oauth_host = "https://dev.uspdigital.usp.br"; // ambiente de teste
} elseif ($oauth['amb'] == 2 || $oauth['amb'] == 'prod') {
$oauth_host = "https://uspdigital.usp.br"; // ambiente de producao
if (empty($oauth)) {

if (empty(getenv('SENHAUNICA_KEY')) || empty(getenv('SENHAUNICA_SECRET'))) {
die('Variáveis de ambiente não configurados');
}
//vamos caregar por variáveis de ambiente
$oauth_host = (getenv('SENHAUNICA_DEV') == 'yes') ?
'https://dev.uspdigital.usp.br' : 'https://uspdigital.usp.br';

$oauth = [
'consumer_key' => getenv('SENHAUNICA_KEY'),
'consumer_secret' => getenv('SENHAUNICA_SECRET'),
'callback_id' => getenv('SENHAUNICA_CALLBACK_ID'),
];
} else {
echo 'Ambiente não configurado!';
exit;
// vamos avisar para usar variáveis de ambiente mas permite
// continuar usando parametro no construtor
\trigger_error('Config por array esta obsoleto: use variaveis de ambiente.', E_USER_WARNING);

if ($oauth['amb'] == 1 || $oauth['amb'] == 'dev') {
$oauth_host = 'https://dev.uspdigital.usp.br'; // ambiente de teste
} elseif ($oauth['amb'] == 2 || $oauth['amb'] == 'prod') {
$oauth_host = 'https://uspdigital.usp.br'; // ambiente de producao
} else {
echo 'Ambiente não configurado!';
exit;
}
}

$this->user_data_url = $oauth_host . "/wsusuario/oauth/usuariousp";
$this->user_data_url = $oauth_host . '/wsusuario/oauth/usuariousp';

// Init the OAuthStore
$this->options = array(
'consumer_key' => $oauth['consumer_key'],
'consumer_secret' => $oauth['consumer_secret'],
'server_uri' => $oauth_host,
'request_token_uri' => $oauth_host . "/wsusuario/oauth/request_token",
'authorize_uri' => $oauth_host . "/wsusuario/oauth/authorize",
'access_token_uri' => $oauth_host . "/wsusuario/oauth/access_token",
'request_token_uri' => $oauth_host . '/wsusuario/oauth/request_token',
'authorize_uri' => $oauth_host . '/wsusuario/oauth/authorize',
'access_token_uri' => $oauth_host . '/wsusuario/oauth/access_token',
);

// se tiver setado callback id use ele
Expand All @@ -46,11 +70,15 @@ public function __construct($oauth)

public function login()
{
// Note: do not use "Session" storage in production. Prefer a database
// storage, such as MySQLi.
// se já estiver logado vamos mostrar os dados
if (!empty($_SESSION['oauth_user'])) {
return $_SESSION['oauth_user'];
}

// se não vamos obter no oauth
\OAuth1\OAuthStore::instance('Session', $this->options);

if (empty($_GET["oauth_token"])) {
if (empty($_GET['oauth_token'])) {
// STEP 1: If we do not have an OAuth token yet, go get one
$this->getOauthToken();
} else {
Expand All @@ -61,7 +89,16 @@ public function login()
}
}

// retorna o primeiro vinculo que encontrar com o critério 'campo' == [valor1, ou valor2, ...]
public function logout()
{
// aqui simplesmente esquece as variáveis do oauth da session
unset($_SESSION['oauth_user']);
unset($_SESSION['oauth_' . $this->options['consumer_key']]);
return true;
}

// retorna o primeiro vinculo que encontrar com o critério
// 'campo' == [valor1, ou valor2, ...]
public function obterVinculo($campo, $valores)
{
if (!is_array($valores)) {
Expand All @@ -80,13 +117,18 @@ public function obterVinculo($campo, $valores)
protected function getOauthToken()
{
try {
$tokenResultParams = \OAuth1\OAuthRequester::requestRequestToken($this->options['consumer_key'], null, null, 'POST', null, $this->curl_options);
$tokenResultParams = \OAuth1\OAuthRequester::requestRequestToken(
$this->options['consumer_key'], null, null, 'POST', null, $this->curl_options
);
} catch (\OAuth1\OAuthException2 $e) {
echo "OAuthException in (fase 1) requestRequestToken: " . $e->getMessage();
var_dump($e);
exit;
}
header("Location: " . $this->options['authorize_uri'] . "?oauth_token=" . $tokenResultParams['token'] . $this->callback_param);
// vamos direcionar o usuário para a tela de autenticação
header('Location: ' . $this->options['authorize_uri'] .
'?oauth_token=' . $tokenResultParams['token'] . $this->callback_param
);
exit;
}

Expand All @@ -97,7 +139,9 @@ protected function getAccessToken()
$tokenResultParams = $_GET;

try {
\OAuth1\OAuthRequester::requestAccessToken($this->options['consumer_key'], $oauthToken, 0, 'POST', $_GET, $this->curl_options);
\OAuth1\OAuthRequester::requestAccessToken(
$this->options['consumer_key'], $oauthToken, 0, 'POST', $_GET, $this->curl_options
);
} catch (\OAuth1\OAuthException2 $e) {
echo "OAuthException in (fase 2) requestAccessToken: " . $e->getMessage();
var_dump($e);
Expand Down

0 comments on commit 3223a9e

Please sign in to comment.