Page 1 of 1

zm/api/monitors.json failing

Posted: Mon Dec 24, 2018 5:33 pm
by SkippyDo
Recently installed 1.32.2 and it looks like I've got api configuration issues as I am unable to get http://<server>/zm/api/monitors.json to work from a browser (first discovered there was an api issue when attempting to access via ZMninja pro). No clue as to where to look for resolving this.

Re: zm/api/monitors.json failing

Posted: Mon Dec 24, 2018 8:28 pm
by rockedge
I think you are missing PHP modules php-apcu and php-apcu-bc ...install these and enable them and restart Apache

Re: zm/api/monitors.json failing

Posted: Mon Dec 24, 2018 11:12 pm
by SkippyDo
From what I can tell those are installed:

ii cakephp 2.10.11-2 all rapid application development framework for PHP
ii cakephp-scripts 2.10.11-2 all rapid application development framework for PHP (scripts)

ii php 2:7.3+69 all server-side, HTML-embedded scripting language (default)
ii php-apcu 5.1.16+4.0.11-1 amd64 APC User Cache for PHP
ii php-apcu-bc 1.0.4-3 amd64 APCu Backwards Compatibility Module
ii php-common 2:69 all Common files for PHP packages
ii php-gd 2:7.3+69 all GD module for PHP [default]
ii php-mysql 2:7.3+69 all MySQL module for PHP [default]
ii php7.0 7.0.33-0+deb9u1 all server-side, HTML-embedded scripting language (metapackage)
ii php7.0-cli 7.0.33-0+deb9u1 amd64 command-line interpreter for the PHP scripting language
ii php7.0-common 7.0.33-0+deb9u1 amd64 documentation, examples and common module for PHP
ii php7.0-json 7.0.33-0+deb9u1 amd64 JSON module for PHP
ii php7.0-mysql 7.0.33-0+deb9u1 amd64 MySQL module for PHP
ii php7.0-opcache 7.0.33-0+deb9u1 amd64 Zend OpCache module for PHP
ii php7.0-readline 7.0.33-0+deb9u1 amd64 readline module for PHP
ii php7.3 7.3.0-2 all server-side, HTML-embedded scripting language (metapackage)
ii php7.3-cli 7.3.0-2 amd64 command-line interpreter for the PHP scripting language
ii php7.3-common 7.3.0-2 amd64 documentation, examples and common module for PHP
ii php7.3-gd 7.3.0-2 amd64 GD module for PHP
ii php7.3-json 7.3.0-2 amd64 JSON module for PHP
ii php7.3-mysql 7.3.0-2 amd64 MySQL module for PHP
ii php7.3-opcache 7.3.0-2 amd64 Zend OpCache module for PHP
ii php7.3-readline 7.3.0-2 amd64 readline module for PHP

Re: zm/api/monitors.json failing

Posted: Wed Dec 26, 2018 2:34 pm
by SkippyDo
Reinstalled everything (except OS) and still no go. However, I now get a page with "Release Notes for CakePHP 2.10.11." when specifying only the api directory (http://<server>/zm/api), which means that I'm now reading the api directory.

Contents of my zm/api directory:

app/ build.properties build.xml composer.json CONTRIBUTING.md css@ img@ index.php lib/ README.md

Re: zm/api/monitors.json failing

Posted: Thu Dec 27, 2018 2:38 am
by rockedge
what comes up with the URL? ->

Code: Select all

http://yourzm_server/zm/api/host/getVersion.json

Re: zm/api/monitors.json failing

Posted: Thu Dec 27, 2018 7:46 am
by SkippyDo
The requested URL /zm/api/host/getVersion.json was not found on this server.

NOTE: In my subject title I omitted the "host" path component. But with or without it still produces a 404 error.

Re: zm/api/monitors.json failing

Posted: Thu Dec 27, 2018 9:26 am
by SkippyDo
What version of PHP should I be running? I seem to have bits for both 7.0 and 7.3 installed.

Re: zm/api/monitors.json failing

Posted: Thu Dec 27, 2018 1:47 pm
by rockedge
the url for example on one of my test systems is
http://localhost/zm/api/host/getVersion.json and the response is in the code block below
for this test since I have OPT_USE_AUTH turned ON so I login to the web console gui then in a new tab on the browser use the above URL
and I receive the response below.
As far as the PHP version I would stick with PHP 7.3 but I think either one would work.

Code: Select all

{
    "version": "1.33.0",
    "apiversion": "1.0"
}
I login into the web console so the API authority is satisfied and if I don't login this as the response. But it would indicate also that the API is working.

Code: Select all

{
    "success": false,
    "data": {
        "name": "Not Authenticated",
        "message": "Not Authenticated",
        "url": "\/zm\/api\/host\/getVersion.json",
        "exception": {
            "class": "UnauthorizedException",
            "code": 401,
            "message": "Not Authenticated",
            "trace": [
                "#0 \/usr\/share\/zoneminder\/www\/api\/lib\/Cake\/Event\/CakeEventManager.php(243): AppController->beforeFilter(Object(CakeEvent))",
                "#1 \/usr\/share\/zoneminder\/www\/api\/lib\/Cake\/Controller\/Controller.php(677): CakeEventManager->dispatch(Object(CakeEvent))",
                "#2 \/usr\/share\/zoneminder\/www\/api\/lib\/Cake\/Routing\/Dispatcher.php(189): Controller->startupProcess()",
                "#3 \/usr\/share\/zoneminder\/www\/api\/lib\/Cake\/Routing\/Dispatcher.php(167): Dispatcher->_invoke(Object(HostController), Object(CakeRequest))",
                "#4 \/usr\/share\/zoneminder\/www\/api\/app\/webroot\/index.php(107): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))",
                "#5 {main}"
            ]
        },
        "queryLog": []
    }
}

Re: zm/api/monitors.json failing

Posted: Thu Dec 27, 2018 2:23 pm
by SkippyDo
Yes, I see those tests everywhere, but... no matter what I do I can only get this response:

The requested URL /zm/host/api/getVersion.json was not found on this server.

Just what is the "host" directory? Is it a virtual rewrite or something? I have no such directory (nothing, anywhere). It "seems" like I have all the necessary php libraries/files but they are not being found/loaded by ZM: libphp7.0.so and libphp7.3.so exist in /usr/lib/apache2/modules.

I can get output from zm/api/composer.json (composer.json is in the api directory).

Re: zm/api/monitors.json failing

Posted: Thu Dec 27, 2018 4:13 pm
by rockedge
I think you have found a clue! rewrites are very important for the API to work as is the example of /host/.....The Cakewalk framework and CRUD are what builds the API...dependent on rewrites! Yes /host/ is important and is how the Calkwalk frame work works...

check that mod rewrite is on!
and that a .htaccess file exists in /zm/api with this in it:

Code: Select all

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^$ app/webroot/ [L]
   RewriteRule (.*) app/webroot/$1 [L]
   RewriteBase /zm/api
</IfModule>
I use Hiawatha and the that rewrite looks like this:

Code: Select all

UrlToolkit {
  ToolkitID = api_rule
  Match ^/zm/api Rewrite  /zm/api/app/webroot/index.php$1
}

Re: zm/api/monitors.json failing

Posted: Fri Dec 28, 2018 7:52 am
by SkippyDo
Got it!

I initially tried via .htaccess but not go. Some more searching and I can across https://community.openhab.org/t/zonemin ... i/34575/26. I added the following to the /etc/apache2/conf-enabled/zoneminder.conf file:

Code: Select all

<Directory "/usr/share/zoneminder/www/api/app">
   RewriteEngine on
   RewriteRule ^$ webroot/ [L]
   RewriteRule (.*) webroot/$1 [L]
   RewriteBase /zm/api
</Directory>

<Directory "/usr/share/zoneminder/www/api/app/webroot">
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    RewriteBase /zm/api
</Directory>