inex / IXP-Manager

Full stack web application powering peering at over 200 Internet Exchange Points (IXPs) globally.

Home Page:https://www.ixpmanager.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Missing required parameter for [Route: customer@overview] [URI: customer/overview/{cust}/{tab?}]

rfc1036 opened this issue · comments

ISSUE TYPE

Bug Report

OS

Ubuntu 22.04.4 LTS.

VERSION
define( 'APPLICATION_VERSION', '6.3.1' );
define( 'APPLICATION_VERDATE', '2023062000' );
ENVIRONMENT
PHP 8.0.30 (cli) (built: Mar  7 2024 08:52:11) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.30, Copyright (c), by Zend Technologies
ii  php-common                        2:94+ubuntu22.04.1+deb.sury.org+2                                    all          Common files for PHP packages
ii  php-pear                          1:1.10.13+submodules+notgz+2022032202-2+ubuntu20.04.1+deb.sury.org+1 all          PEAR Base System
ii  php8.0                            1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              all          server-side, HTML-embedded scripting language (metapackage)
ii  php8.0-bcmath                     1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        Bcmath module for PHP
ii  php8.0-cli                        1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        command-line interpreter for the PHP scripting language
ii  php8.0-common                     1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        documentation, examples and common module for PHP
ii  php8.0-curl                       1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        CURL module for PHP
ii  php8.0-ds                         1.5.0-1+ubuntu22.04.1+deb.sury.org+1                                 amd64        PHP extension providing efficient data structures for PHP 7
ii  php8.0-fpm                        1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        server-side, HTML-embedded scripting language (FPM-CGI binary)
ii  php8.0-gd                         1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        GD module for PHP
ii  php8.0-igbinary                   3.2.15-1+ubuntu22.04.1+deb.sury.org+1                                amd64        igbinary PHP serializer
ii  php8.0-intl                       1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        Internationalisation module for PHP
ii  php8.0-mbstring                   1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        MBSTRING module for PHP
ii  php8.0-memcache                   8.2-2+ubuntu22.04.1+deb.sury.org+2                                   amd64        memcache extension module for PHP
ii  php8.0-memcached                  3.2.0++-1+ubuntu22.04.1+deb.sury.org+2                               amd64        memcached extension module for PHP, uses libmemcached
ii  php8.0-msgpack                    1:2.1.2-1+ubuntu22.04.1+deb.sury.org+1                               amd64        PHP extension for interfacing with MessagePack
ii  php8.0-mysql                      1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        MySQL module for PHP
ii  php8.0-opcache                    1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        Zend OpCache module for PHP
ii  php8.0-readline                   1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        readline module for PHP
ii  php8.0-rrd                        2.0.3++-1+ubuntu22.04.1+deb.sury.org+2                               amd64        PHP bindings to rrd tool system
ii  php8.0-snmp                       1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        SNMP module for PHP
ii  php8.0-xml                        1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        DOM, SimpleXML, XML, and XSL module for PHP
ii  php8.0-yaml                       2.2.3-2+ubuntu22.04.1+deb.sury.org+2                                 amd64        YAML-1.1 parser and emitter for PHP
ii  php8.0-zip                        1:8.0.30-3+ubuntu22.04.1+deb.sury.org+1                              amd64        Zip module for PHP
SUMMARY

/users/list fails with a 500 error.

RELEVANT LOGS
[2024-03-27 13:06:53] production.ERROR: Missing required parameter for [Route: customer@overview] [URI: customer/overview/{cust}/{tab?}] [Missing parameter: cust]. {"userId":1,"exception":"[object] (Illuminate\\Routing\\Exceptions\\UrlGenerationException(code: 0): Missing required parameter for [Route: customer@overview] [URI: customer/overview/{cust}/{tab?}] [Missing parameter: cust]. at /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Exceptions/UrlGenerationException.php:35)
[stacktrace]
#0 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php(91): Illuminate\\Routing\\Exceptions\\UrlGenerationException::forMissingParameters()
#1 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php(466): Illuminate\\Routing\\RouteUrlGenerator->to()
#2 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php(441): Illuminate\\Routing\\UrlGenerator->toRoute()
#3 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(739): Illuminate\\Routing\\UrlGenerator->route()
#4 /srv/ixpmanager/resources/views/user/index.foil.php(83): route()
#5 /srv/ixpmanager/vendor/foil/foil/src/Template/Template.php(287): require('...')
#6 /srv/ixpmanager/vendor/foil/foil/src/Template/Template.php(231): Foil\\Template\\Template->collect()
#7 /srv/ixpmanager/vendor/foil/foil/src/Engine.php(307): Foil\\Template\\Template->render()
#8 /srv/ixpmanager/vendor/foil/foil/src/Engine.php(231): Foil\\Engine->doRender()
#9 /srv/ixpmanager/vendor/foil/foil/src/Engine.php(204): Foil\\Engine->renderTemplate()
#10 /srv/ixpmanager/app/Services/FoilEngine.php(54): Foil\\Engine->render()
#11 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/View/View.php(139): IXP\\Services\\FoilEngine->get()
#12 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/View/View.php(122): Illuminate\\View\\View->getContents()
#13 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/View/View.php(91): Illuminate\\View\\View->renderContents()
#14 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Http/Response.php(69): Illuminate\\View\\View->render()
#15 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Http/Response.php(35): Illuminate\\Http\\Response->setContent()
#16 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(820): Illuminate\\Http\\Response->__construct()
#17 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(789): Illuminate\\Routing\\Router::toResponse()
#18 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Router->prepareResponse()
#19 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#20 /srv/ixpmanager/app/Http/Middleware/Google2FA.php(79): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#21 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): IXP\\Http\\Middleware\\Google2FA->handle()
#22 /srv/ixpmanager/app/Http/Middleware/ControllerEnabled.php(94): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): IXP\\Http\\Middleware\\ControllerEnabled->handle()
#24 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#26 /srv/ixpmanager/app/Http/Middleware/Authenticate.php(102): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#27 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): IXP\\Http\\Middleware\\Authenticate->handle()
#28 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#29 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle()
#30 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#31 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#32 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#34 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle()
#35 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#36 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#37 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#38 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#39 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#40 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()
#41 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()
#42 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()
#43 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()
#44 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()
#45 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#46 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#48 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#49 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#50 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#51 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#52 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#54 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#55 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#56 /srv/ixpmanager/vendor/fruitcake/laravel-cors/src/HandleCors.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#57 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()
#58 /srv/ixpmanager/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#59 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\\Proxy\\TrustProxies->handle()
#60 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#61 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()
#62 /srv/ixpmanager/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#63 /srv/ixpmanager/public/index.php(89): Illuminate\\Foundation\\Http\\Kernel->handle()
#64 {main}
"} 

/user/list is routed to the customer@list method, but this error refers to customer@overview which is the view when you click on /customer/overview/xxx and click on the Users tab.

Can you describe how to repeat the problem?

Also, can you:

Hey @rfc1036 - pending Nick's ask above for steps to reproduce - I've looked at resources/views/user/index.foil.php and don't see any issues and it works fine in production and dev.

One thing to note is that /users/list is not a valid URL but rather /user/list, which I suspect you meant anyway.

Is there a database issue here? I can't imagine how it would happen, but ensure there are no users not linked to a customer:

SELECT * FROM `user` WHERE `custid` IS NULL;

To reproduce the issue I just had to access /user/list.

Indeed there was one user with no custid: after setting it the page works again.
I may or may not have deleted that user myself as the administrator, I cannot really remember. But I am sure that I have never tried modifying the database.

| id  | custid | username      | password | email | authorisedMobile | uid  | privs | disabled | lastupdatedby | creator         | name | peeringdb_id | extra_attributes | prefs                              | created_at          | updated_at          |
| 220 |   NULL | xxxxx.xxxxxx2 | ...      | NULL  | NULL             | NULL |     1 |     NULL |          NULL | OAuth-PeeringDB | NULL |        54698 | []               | {"mailinglist": {"minap-tech": 0}} | 2023-02-22 13:52:25 | 2023-02-22 20:32:01 |

Thanks @rfc1036 - OAuth-PeeringDB may indicate the culprit. If a user is authenticated via PeeringDB and then subsequently removed from that org's PeeringDB account then we may clear custid. Will keep this open and check + find a better way to handle this case.