freescout-help-desk / freescout

FreeScout ā€” Free self-hosted help desk & shared mailbox (Zendesk / Help Scout alternative)
https://freescout.net
GNU Affero General Public License v3.0
2.75k stars 468 forks source link

Invalid array settings: idp_sso_url_invalid #4078

Closed MasterPuffin closed 2 weeks ago

MasterPuffin commented 2 weeks ago

Since a few days I have the following issue with the SSO plugin. I haven't changed the config. Here are the logs

[2024-06-16 22:25:23] production.ERROR: Invalid array settings: idp_sso_url_invalid {"exception":"[object] (OneLogin\\Saml2\\Error(code: 2): Invalid array settings: idp_sso_url_invalid at /var/www/vhosts/host/httpdocs/url_freescout/Modules/Saml/vendor/onelogin/php-saml/src/Saml2/Settings.php:141)
[stacktrace]
#0 /var/www/vhosts/host/httpdocs/url_freescout/Modules/Saml/vendor/onelogin/php-saml/src/Saml2/Auth.php(178): OneLogin\\Saml2\\Settings->__construct(Array, false)
#1 /var/www/vhosts/host/httpdocs/url_freescout/Modules/Saml/Providers/SamlServiceProvider.php(146): OneLogin\\Saml2\\Auth->__construct(Array)
#2 [internal function]: Modules\\Saml\\Providers\\SamlServiceProvider->Modules\\Saml\\Providers\\{closure}(Object(Illuminate\\Http\\Response), Object(Illuminate\\Http\\Request), Object(Closure))
#3 /var/www/vhosts/host/httpdocs/url_freescout/overrides/tormjens/eventy/src/Filter.php(28): call_user_func_array(Object(Closure), Array)
#4 /var/www/vhosts/host/httpdocs/url_freescout/overrides/laravel/framework/src/Illuminate/Support/Collection.php(339): TorMorten\\Eventy\\Filter->TorMorten\\Eventy\\{closure}(Array, 5)
#5 /var/www/vhosts/host/httpdocs/url_freescout/overrides/tormjens/eventy/src/Filter.php(29): Illuminate\\Support\\Collection->each(Object(Closure))
#6 /var/www/vhosts/host/httpdocs/url_freescout/vendor/tormjens/eventy/src/Events.php(163): TorMorten\\Eventy\\Filter->fire('middleware.web....', Array)
#7 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(221): TorMorten\\Eventy\\Events->filter('middleware.web....', Object(Illuminate\\Http\\Response), Object(Illuminate\\Http\\Request), Object(Closure))
#8 /var/www/vhosts/host/httpdocs/url_freescout/app/Http/Middleware/CustomHandle.php(22): Illuminate\\Support\\Facades\\Facade::__callStatic('filter', Array)
#9 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\CustomHandle->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#10 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#11 /var/www/vhosts/host/httpdocs/url_freescout/app/Http/Middleware/LogoutIfDeleted.php(28): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#12 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\LogoutIfDeleted->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#13 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#14 /var/www/vhosts/host/httpdocs/url_freescout/app/Http/Middleware/Localize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#15 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\Localize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#16 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#17 /var/www/vhosts/host/httpdocs/url_freescout/app/Http/Middleware/HttpsRedirect.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#18 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\HttpsRedirect->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#19 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#20 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#21 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(67): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#24 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#25 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#26 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#27 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /var/www/vhosts/host/httpdocs/url_freescout/app/Http/Middleware/TokenAuth.php(31): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#30 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\TokenAuth->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(63): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#33 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#34 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#35 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#36 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#39 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#40 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#41 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#42 /var/www/vhosts/host/httpdocs/url_freescout/overrides/laravel/framework/src/Illuminate/Routing/Router.php(660): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#43 /var/www/vhosts/host/httpdocs/url_freescout/overrides/laravel/framework/src/Illuminate/Routing/Router.php(635): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#44 /var/www/vhosts/host/httpdocs/url_freescout/overrides/laravel/framework/src/Illuminate/Routing/Router.php(601): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#45 /var/www/vhosts/host/httpdocs/url_freescout/overrides/laravel/framework/src/Illuminate/Routing/Router.php(590): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#46 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#47 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#48 /var/www/vhosts/host/httpdocs/url_freescout/app/Http/Middleware/TerminateHandler.php(12): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#49 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\TerminateHandler->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#50 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#51 /var/www/vhosts/host/httpdocs/url_freescout/app/Http/Middleware/ResponseHeaders.php(11): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#52 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\ResponseHeaders->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#53 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#54 /var/www/vhosts/host/httpdocs/url_freescout/vendor/fideloper/proxy/src/TrustProxies.php(56): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#55 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#56 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#57 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#58 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#59 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#60 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#61 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#62 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#63 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#64 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#65 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#66 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#67 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#68 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#69 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#70 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#71 /var/www/vhosts/host/httpdocs/url_freescout/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#72 /var/www/vhosts/host/httpdocs/url_freescout/public/index.php(83): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#73 {main}
"} 
freescout-help commented 2 weeks ago

Your PHP version? Are you using any non-official modules or customizations?

freescout-help commented 2 weeks ago

On line 545 in /Modules/Saml/vendor/onelogin/php-saml/src/Saml2/Settings.php there is:

            } else if (!filter_var($idp['singleSignOnService']['url'], FILTER_VALIDATE_URL)) {
                $errors[] = 'idp_sso_url_invalid';
            }

It means something happened to "Signin URL" under "Identity Provider (IdP)". Check if the Signin URL visible on "Settings >> SAML 2.0" page and present in the .env file.

MasterPuffin commented 2 weeks ago

I'm using PHP 8.2 with only the SSO module and nothing else.

Here is the SAML config from the env file:

SAML_ENABLED=on

SAML_IDP_ENTITY_ID="https://saml.example.org"

SAML_IDP_SIGNIN_URL="https://www.example.org/auth/saml/freescout/"

SAML_LOGOUT_URL=

SAML_IDP_CERT="<cert>"

SAML_MAPPING="<mapping>"

SAML_AUTH_CONTEXT=

SAML_AUTO_CREATE_USERS=1

SAML_FORCE_SAML_LOGIN=1

SAML_DEBUG=

SAML_STRICT=1
freescout-help commented 2 weeks ago

You may need to debug this line to find out what value is contained in $idp['singleSignOnService']['url']: https://github.com/freescout-helpdesk/freescout/issues/4078#issuecomment-2172402953

https://github.com/freescout-helpdesk/freescout/wiki/Debugging

MasterPuffin commented 2 weeks ago

The URL logged is https:///www.example.org/auth/saml/freescout/ whith three slashes instead of two, however the URL in the .env file is correct. Is the URL stored anywhere else?

freescout-help commented 2 weeks ago

It should be cached in /bootstrap/cache/config.php - check what you have there.

MasterPuffin commented 2 weeks ago

Deleting the file you mentioned fixed the issue. Thanks šŸ‘

freescout-help commented 2 weeks ago

Ok. Strange.