directus / v8-archive

Directus Database API — Wraps Custom SQL Databases with a REST/GraphQL API
https://docs.directus.io/api/reference.html
507 stars 204 forks source link

Remove stack trace from API errors #118

Closed rijkvanzanten closed 6 years ago

rijkvanzanten commented 6 years ago

There is a lot of junk in the error output:

{
    "error": {
        "code": 300,
        "message": "Reading items from \"members\" collection was denied",
        "class": "Directus\\Permissions\\Exception\\ForbiddenCollectionReadException",
        "file": "/var/www/directus-demo-api/src/core/Directus/Permissions/Acl.php",
        "line": 724,
        "trace": [
            {
                "file": "/var/www/directus-demo-api/src/core/Directus/Database/TableGateway/BaseTableGateway.php",
                "line": 1071,
                "function": "enforceReadOnce",
                "class": "Directus\\Permissions\\Acl",
                "type": "->",
                "args": [
                    "members"
                ]
            },
            {
                "file": "/var/www/directus-demo-api/src/core/Directus/Database/TableGateway/RelationalTableGateway.php",
                "line": 883,
                "function": "enforceReadPermission",
                "class": "Directus\\Database\\TableGateway\\BaseTableGateway",
                "type": "->",
                "args": [
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/src/core/Directus/Database/TableGateway/RelationalTableGateway.php",
                "line": 723,
                "function": "loadItems",
                "class": "Directus\\Database\\TableGateway\\RelationalTableGateway",
                "type": "->",
                "args": [
                    {
                        "limit": "1000"
                    }
                ]
            },
            {
                "function": "getItems",
                "class": "Directus\\Database\\TableGateway\\RelationalTableGateway",
                "type": "->",
                "args": [
                    {
                        "limit": "1000"
                    },
                    null
                ]
            },
            {
                "file": "/var/www/directus-demo-api/src/core/Directus/Services/AbstractService.php",
                "line": 274,
                "function": "call_user_func_array",
                "args": [
                    [
                        {
                            "primaryKeyFieldName": "id",
                            "memcache": null
                        },
                        "getItems"
                    ],
                    [
                        {
                            "limit": "1000"
                        },
                        null
                    ]
                ]
            },
            {
                "file": "/var/www/directus-demo-api/src/core/Directus/Services/AbstractService.php",
                "line": 237,
                "function": "getDataAndSetResponseCacheTags",
                "class": "Directus\\Services\\AbstractService",
                "type": "->",
                "args": [
                    [
                        {
                            "primaryKeyFieldName": "id",
                            "memcache": null
                        },
                        "getItems"
                    ],
                    [
                        {
                            "limit": "1000"
                        },
                        null
                    ]
                ]
            },
            {
                "file": "/var/www/directus-demo-api/src/core/Directus/Services/ItemsService.php",
                "line": 49,
                "function": "getItemsAndSetResponseCacheTags",
                "class": "Directus\\Services\\AbstractService",
                "type": "->",
                "args": [
                    {
                        "primaryKeyFieldName": "id",
                        "memcache": null
                    },
                    {
                        "limit": "1000"
                    }
                ]
            },
            {
                "file": "/var/www/directus-demo-api/src/endpoints/Items.php",
                "line": 45,
                "function": "findAll",
                "class": "Directus\\Services\\ItemsService",
                "type": "->",
                "args": [
                    "members",
                    {
                        "limit": "1000"
                    }
                ]
            },
            {
                "function": "all",
                "class": "Directus\\Api\\Routes\\Items",
                "type": "->",
                "args": [
                    {},
                    {},
                    {
                        "env": "_",
                        "collection": "members"
                    }
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php",
                "line": 41,
                "function": "call_user_func",
                "args": [
                    [
                        {},
                        "all"
                    ],
                    {},
                    {},
                    {
                        "env": "_",
                        "collection": "members"
                    }
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/Route.php",
                "line": 335,
                "function": "__invoke",
                "class": "Slim\\Handlers\\Strategies\\RequestResponse",
                "type": "->",
                "args": [
                    [
                        {},
                        "all"
                    ],
                    {},
                    {},
                    {
                        "env": "_",
                        "collection": "members"
                    }
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php",
                "line": 117,
                "function": "__invoke",
                "class": "Slim\\Route",
                "type": "->",
                "args": [
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/Route.php",
                "line": 313,
                "function": "callMiddlewareStack",
                "class": "Slim\\Route",
                "type": "->",
                "args": [
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/App.php",
                "line": 513,
                "function": "run",
                "class": "Slim\\Route",
                "type": "->",
                "args": [
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/src/core/Directus/Application/Http/Middlewares/AuthenticationMiddleware.php",
                "line": 110,
                "function": "__invoke",
                "class": "Slim\\App",
                "type": "->",
                "args": [
                    {},
                    {}
                ]
            },
            {
                "function": "__invoke",
                "class": "Directus\\Application\\Http\\Middlewares\\AuthenticationMiddleware",
                "type": "->",
                "args": [
                    {},
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/DeferredCallable.php",
                "line": 43,
                "function": "call_user_func_array",
                "args": [
                    {},
                    [
                        {},
                        {},
                        {}
                    ]
                ]
            },
            {
                "function": "__invoke",
                "class": "Slim\\DeferredCallable",
                "type": "->",
                "args": [
                    {},
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php",
                "line": 70,
                "function": "call_user_func",
                "args": [
                    {},
                    {},
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/src/core/Directus/Application/Http/Middlewares/CorsMiddleware.php",
                "line": 20,
                "function": "Slim\\{closure}",
                "class": "Slim\\App",
                "type": "->",
                "args": [
                    {},
                    {}
                ]
            },
            {
                "function": "__invoke",
                "class": "Directus\\Application\\Http\\Middlewares\\CorsMiddleware",
                "type": "->",
                "args": [
                    {},
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/DeferredCallable.php",
                "line": 43,
                "function": "call_user_func_array",
                "args": [
                    {},
                    [
                        {},
                        {},
                        {}
                    ]
                ]
            },
            {
                "function": "__invoke",
                "class": "Slim\\DeferredCallable",
                "type": "->",
                "args": [
                    {},
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php",
                "line": 70,
                "function": "call_user_func",
                "args": [
                    {},
                    {},
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/akrabat/rka-ip-address-middleware/src/IpAddress.php",
                "line": 93,
                "function": "Slim\\{closure}",
                "class": "Slim\\App",
                "type": "->",
                "args": [
                    {},
                    {}
                ]
            },
            {
                "function": "__invoke",
                "class": "RKA\\Middleware\\IpAddress",
                "type": "->",
                "args": [
                    {},
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/DeferredCallable.php",
                "line": 43,
                "function": "call_user_func_array",
                "args": [
                    {},
                    [
                        {},
                        {},
                        {}
                    ]
                ]
            },
            {
                "function": "__invoke",
                "class": "Slim\\DeferredCallable",
                "type": "->",
                "args": [
                    {},
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php",
                "line": 70,
                "function": "call_user_func",
                "args": [
                    {},
                    {},
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/MiddlewareAwareTrait.php",
                "line": 117,
                "function": "Slim\\{closure}",
                "class": "Slim\\App",
                "type": "->",
                "args": [
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/App.php",
                "line": 406,
                "function": "callMiddlewareStack",
                "class": "Slim\\App",
                "type": "->",
                "args": [
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/vendor/slim/slim/Slim/App.php",
                "line": 314,
                "function": "process",
                "class": "Slim\\App",
                "type": "->",
                "args": [
                    {},
                    {}
                ]
            },
            {
                "file": "/var/www/directus-demo-api/src/core/Directus/Application/Application.php",
                "line": 154,
                "function": "run",
                "class": "Slim\\App",
                "type": "->",
                "args": [
                    false
                ]
            },
            {
                "file": "/var/www/directus-demo-api/public/index.php",
                "line": 5,
                "function": "run",
                "class": "Directus\\Application\\Application",
                "type": "->",
                "args": []
            }
        ]
    }
}

The output should just be

{
    "error": {
        "code": 300,
        "message": "Reading items from \"members\" collection was denied"
        }
}
wellingguzman commented 6 years ago

This is removed when the API is on production mode.

rijkvanzanten commented 6 years ago

Oh hey! There is an API production mode 🎉

Does that do anything else?

@benhaynes for the docs 🔔

benhaynes commented 6 years ago

I can't really document this... since I don't really know anything about it other than there's prod and dev variable settings. :/

benhaynes commented 6 years ago

@WellingGuzman perhaps you can add the basics to the API reference/docs and I can format it up?

rijkvanzanten commented 6 years ago

@WellingGuzman Using this config:

<?php

return [
    'app' => [
        'path' => '/',
        'env' => 'production',
        'debug' => false,
        'default_language' => 'en',
        'timezone' => 'America/New_York',
    ],

    'settings' => [
        'debug' => false,
        'displayErrorDetails' => false,
        'logger' => [
            'name' => 'directus-api',
            'level' => Monolog\Logger::DEBUG,
            'path' => __DIR__ . '/logs/app.log',
        ],
    ],

    // etc

The API still gives me a huge stacktrace:

{"error":{"code":3,"message":"Only Admin can see this information","class":"Directus\\Exception\\UnauthorizedException","file":"\/var\/www\/api\/src\/core\/Directus\/Services\/ServerService.php","line":14,"trace":[{"file":"\/var\/www\/api\/src\/endpoints\/Home.php","line":15,"function":"findAllInfo","class":"Directus\\Services\\ServerService","type":"->","args":[]},{"function":"__invoke","class":"Directus\\Api\\Routes\\Home","type":"->","args":[{},{},[]]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/Handlers\/Strategies\/RequestResponse.php","line":41,"function":"call_user_func","args":[[{},"__invoke"],{},{},[]]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/Route.php","line":335,"function":"__invoke","class":"Slim\\Handlers\\Strategies\\RequestResponse","type":"->","args":[[{},"__invoke"],{},{},[]]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/MiddlewareAwareTrait.php","line":117,"function":"__invoke","class":"Slim\\Route","type":"->","args":[{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/Route.php","line":313,"function":"callMiddlewareStack","class":"Slim\\Route","type":"->","args":[{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/App.php","line":513,"function":"run","class":"Slim\\Route","type":"->","args":[{},{}]},{"file":"\/var\/www\/api\/src\/core\/Directus\/Application\/Http\/Middlewares\/AuthenticationMiddleware.php","line":110,"function":"__invoke","class":"Slim\\App","type":"->","args":[{},{}]},{"function":"__invoke","class":"Directus\\Application\\Http\\Middlewares\\AuthenticationMiddleware","type":"->","args":[{},{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/DeferredCallable.php","line":43,"function":"call_user_func_array","args":[{},[{},{},{}]]},{"function":"__invoke","class":"Slim\\DeferredCallable","type":"->","args":[{},{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/MiddlewareAwareTrait.php","line":70,"function":"call_user_func","args":[{},{},{},{}]},{"file":"\/var\/www\/api\/src\/core\/Directus\/Application\/Http\/Middlewares\/CorsMiddleware.php","line":20,"function":"Slim\\{closure}","class":"Slim\\App","type":"->","args":[{},{}]},{"function":"__invoke","class":"Directus\\Application\\Http\\Middlewares\\CorsMiddleware","type":"->","args":[{},{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/DeferredCallable.php","line":43,"function":"call_user_func_array","args":[{},[{},{},{}]]},{"function":"__invoke","class":"Slim\\DeferredCallable","type":"->","args":[{},{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/MiddlewareAwareTrait.php","line":70,"function":"call_user_func","args":[{},{},{},{}]},{"file":"\/var\/www\/api\/vendor\/akrabat\/rka-ip-address-middleware\/src\/IpAddress.php","line":93,"function":"Slim\\{closure}","class":"Slim\\App","type":"->","args":[{},{}]},{"function":"__invoke","class":"RKA\\Middleware\\IpAddress","type":"->","args":[{},{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/DeferredCallable.php","line":43,"function":"call_user_func_array","args":[{},[{},{},{}]]},{"function":"__invoke","class":"Slim\\DeferredCallable","type":"->","args":[{},{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/MiddlewareAwareTrait.php","line":70,"function":"call_user_func","args":[{},{},{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/MiddlewareAwareTrait.php","line":117,"function":"Slim\\{closure}","class":"Slim\\App","type":"->","args":[{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/App.php","line":406,"function":"callMiddlewareStack","class":"Slim\\App","type":"->","args":[{},{}]},{"file":"\/var\/www\/api\/vendor\/slim\/slim\/Slim\/App.php","line":314,"function":"process","class":"Slim\\App","type":"->","args":[{},{}]},{"file":"\/var\/www\/api\/src\/core\/Directus\/Application\/Application.php","line":154,"function":"run","class":"Slim\\App","type":"->","args":[false]},{"file":"\/var\/www\/api\/public\/index.php","line":5,"function":"run","class":"Directus\\Application\\Application","type":"->","args":[]}]}}