3434use OneLogin \Saml2 \Error ;
3535use OneLogin \Saml2 \Settings ;
3636use OneLogin \Saml2 \ValidationError ;
37+ use Psr \Container \ContainerExceptionInterface ;
38+ use Psr \Container \NotFoundExceptionInterface ;
3739use Psr \Log \LoggerInterface ;
3840
3941class SAMLController extends Controller {
@@ -180,7 +182,7 @@ protected function assertGroupMemberships(): void {
180182 *
181183 * @throws Exception
182184 */
183- public function login (int $ idp = 1 ) {
185+ public function login (int $ idp = 1 ): Http \ RedirectResponse | Http \ TemplateResponse {
184186 $ originalUrl = (string )$ this ->request ->getParam ('originalUrl ' , '' );
185187 if (!$ this ->trustedDomainHelper ->isTrustedUrl ($ originalUrl )) {
186188 $ originalUrl = '' ;
@@ -194,7 +196,8 @@ public function login(int $idp = 1) {
194196 $ returnUrl = $ originalUrl ?: $ this ->urlGenerator ->linkToRouteAbsolute ('user_saml.SAML.login ' );
195197 $ ssoUrl = $ auth ->login ($ returnUrl , [], false , false , true );
196198
197- $ method = $ this ->request ->getParam ('method ' , 'get ' );
199+ $ settings = $ this ->samlSettings ->get ($ idp );
200+ $ method = $ settings ['general-saml_request_method ' ] ?? 'get ' ;
198201 if ($ method === 'post ' ) {
199202 $ query = parse_url ($ ssoUrl , PHP_URL_QUERY );
200203 parse_str ($ query , $ params );
@@ -630,6 +633,11 @@ private function getIdps(string $redirectUrl): array {
630633 return $ result ;
631634 }
632635
636+ /**
637+ * @throws ContainerExceptionInterface
638+ * @throws NotFoundExceptionInterface
639+ * @throws \OCP\DB\Exception
640+ */
633641 private function getSSOUrl (string $ redirectUrl , string $ idp ): string {
634642 $ originalUrl = '' ;
635643 if (!empty ($ redirectUrl )) {
@@ -639,17 +647,19 @@ private function getSSOUrl(string $redirectUrl, string $idp): string {
639647 /** @var CsrfTokenManager $csrfTokenManager */
640648 $ csrfTokenManager = Server::get (CsrfTokenManager::class);
641649 $ csrfToken = $ csrfTokenManager ->getToken ();
642- $ ssoUrl = $ this ->urlGenerator ->linkToRouteAbsolute (
650+
651+ $ settings = $ this ->samlSettings ->get ((int )$ idp );
652+ $ method = $ settings ['general-saml_request_method ' ] ?? 'get ' ;
653+
654+ return $ this ->urlGenerator ->linkToRouteAbsolute (
643655 'user_saml.SAML.login ' ,
644656 [
645657 'requesttoken ' => $ csrfToken ->getEncryptedValue (),
646658 'originalUrl ' => $ originalUrl ,
647659 'idp ' => $ idp ,
648- 'method ' => ' post ' ,
660+ 'method ' => $ method ,
649661 ]
650662 );
651-
652- return $ ssoUrl ;
653663 }
654664
655665 /**
0 commit comments