]> BookStack Code Mirror - bookstack/blob - app/Http/Controllers/Auth/Saml2Controller.php
dc7814c4b173055bdb07c5c4a0e298249c113e65
[bookstack] / app / Http / Controllers / Auth / Saml2Controller.php
1 <?php
2
3 namespace BookStack\Http\Controllers\Auth;
4
5 use BookStack\Auth\Access\Saml2Service;
6 use BookStack\Http\Controllers\Controller;
7
8 class Saml2Controller extends Controller
9 {
10
11     protected $samlService;
12
13     /**
14      * Saml2Controller constructor.
15      */
16     public function __construct(Saml2Service $samlService)
17     {
18         $this->samlService = $samlService;
19         $this->middleware('guard:saml2');
20     }
21
22     /**
23      * Start the login flow via SAML2.
24      */
25     public function login()
26     {
27         $loginDetails = $this->samlService->login();
28         session()->flash('saml2_request_id', $loginDetails['id']);
29
30         return redirect($loginDetails['url']);
31     }
32
33     /**
34      * Start the logout flow via SAML2.
35      */
36     public function logout()
37     {
38         $logoutDetails = $this->samlService->logout();
39
40         if ($logoutDetails['id']) {
41             session()->flash('saml2_logout_request_id', $logoutDetails['id']);
42         }
43
44         return redirect($logoutDetails['url']);
45     }
46
47     /*
48      * Get the metadata for this SAML2 service provider.
49      */
50     public function metadata()
51     {
52         $metaData = $this->samlService->metadata();
53         return response()->make($metaData, 200, [
54             'Content-Type' => 'text/xml'
55         ]);
56     }
57
58     /**
59      * Single logout service.
60      * Handle logout requests and responses.
61      */
62     public function sls()
63     {
64         $requestId = session()->pull('saml2_logout_request_id', null);
65         $redirect = $this->samlService->processSlsResponse($requestId) ?? '/';
66         return redirect($redirect);
67     }
68
69     /**
70      * Assertion Consumer Service.
71      * Processes the SAML response from the IDP.
72      */
73     public function acs()
74     {
75         $requestId = session()->pull('saml2_request_id', null);
76
77         $user = $this->samlService->processAcsResponse($requestId);
78         if ($user === null) {
79             $this->showErrorNotification(trans('errors.saml_fail_authed', ['system' => config('saml2.name')]));
80             return redirect('/login');
81         }
82
83         return redirect()->intended();
84     }
85 }