|
1
|
|
|
<?php |
|
2
|
|
|
declare(strict_types=1); |
|
3
|
|
|
|
|
4
|
|
|
use BrenoRoosevelt\OAuth2\Client\Example\AuthorizationCodeFlow; |
|
5
|
|
|
use BrenoRoosevelt\OAuth2\Client\Example\StateStorage; |
|
6
|
|
|
use BrenoRoosevelt\OAuth2\Client\GovBr; |
|
7
|
|
|
use Laminas\Diactoros\ServerRequestFactory; |
|
8
|
|
|
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter; |
|
9
|
|
|
use Middlewares\Utils\CallableHandler; |
|
10
|
|
|
use Middlewares\Utils\Dispatcher; |
|
11
|
|
|
use Middlewares\Whoops; |
|
12
|
|
|
|
|
13
|
|
|
require __DIR__ . '/../vendor/autoload.php'; |
|
14
|
|
|
|
|
15
|
|
|
/** |
|
16
|
|
|
* ---------------------------------------------------------------------- |
|
17
|
|
|
* Roteiro para rodar esse exemplo no Linux: |
|
18
|
|
|
* ---------------------------------------------------------------------- |
|
19
|
|
|
* $ composer create-project brenoroosevelt/oauth2-govbr [nova-pasta] |
|
20
|
|
|
* ---------------------------------------------------------------------- |
|
21
|
|
|
* $ cd nova-pasta |
|
22
|
|
|
* ---------------------------------------------------------------------- |
|
23
|
|
|
* Inclua a seguinte linha em seu arquivo /etc/hosts: |
|
24
|
|
|
* |
|
25
|
|
|
* 127.0.1.1 seu-app-dominio.com.br |
|
26
|
|
|
* ---------------------------------------------------------------------- |
|
27
|
|
|
* Obs: Desative qualquer serviço escutando as portas 80 e 443, e depois: |
|
28
|
|
|
* |
|
29
|
|
|
* $ docker-compose up -d |
|
30
|
|
|
* ---------------------------------------------------------------------- |
|
31
|
|
|
* Altere as seguitens configurações (neste arquivo aqui): |
|
32
|
|
|
* "clientId", "clientSecret" e "redirectUri" |
|
33
|
|
|
* ---------------------------------------------------------------------- |
|
34
|
|
|
* Abra o browser (https!): |
|
35
|
|
|
* |
|
36
|
|
|
* https://seu-app-dominio.com.br |
|
37
|
|
|
* ---------------------------------------------------------------------- |
|
38
|
|
|
* Ao final, você terá um container docker rodando com Apache e PHP 8.0. |
|
39
|
|
|
* Qualquer caminho (rota) no servidor irá executar esse arquivo. |
|
40
|
|
|
* ---------------------------------------------------------------------- |
|
41
|
|
|
* Se precisar conferir o log do servidor: |
|
42
|
|
|
* |
|
43
|
|
|
* $ docker ps |
|
44
|
|
|
* $ docker logs <container_id> --follow |
|
45
|
|
|
* ---------------------------------------------------------------------- |
|
46
|
|
|
*/ |
|
47
|
|
|
|
|
48
|
|
|
|
|
49
|
|
|
/** |
|
50
|
|
|
* Provider GovBr |
|
51
|
|
|
* Atenção!: |
|
52
|
|
|
* - Os parâmetros abaixos são sigilosos, evite enviar esses valores para seu repositório git |
|
53
|
|
|
* - Ao invés de fixar no código, prefira obtê-los usando getenv(...) |
|
54
|
|
|
*/ |
|
55
|
|
|
$govBr = GovBr::staging([ |
|
56
|
|
|
'clientId' => 'XXXXXXXX', // Client ID fornecido pelo GovBr |
|
57
|
|
|
'clientSecret' => 'YYYYYYYY', // Senha fornecida pelo provedor GovBr |
|
58
|
|
|
'redirectUri' => "https://seu-app-dominio.com.br/seu-oauth-login" // Url de redirecionamento cadastrada no GovBr |
|
59
|
|
|
]); |
|
60
|
|
|
|
|
61
|
|
|
// O fluxo está implementado nessa classe |
|
62
|
|
|
$authorizationCodeFlow = new AuthorizationCodeFlow($govBr, new StateStorage()); |
|
63
|
|
|
|
|
64
|
|
|
/** Despacha a requisição http (Seu framework faz isso) */ |
|
65
|
|
|
$response = |
|
66
|
|
|
Dispatcher::run([ |
|
67
|
|
|
new Whoops(), |
|
68
|
|
|
new CallableHandler($authorizationCodeFlow) |
|
69
|
|
|
], |
|
70
|
|
|
ServerRequestFactory::fromGlobals() |
|
71
|
|
|
); |
|
72
|
|
|
|
|
73
|
|
|
/** Emite o resultado */ |
|
74
|
|
|
(new SapiEmitter())->emit($response); |