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); |