-1

I'm creating a Nextcloud-App (using Nextcloud 20). I want a simple call to my external service. Due to CSP restrictions (set by default by netxcloud), I simply can't.

Everytime I request my URL, using window.OC.generateUrl('/apps/[MYAPP]/video/trim'); I get a redirect response (code 302), instead of a success (code 200). What did I miss?

I registered my route:

// [MYAPP]/appinfo/routes.php
return [
    'routes' => [
       ['name' => 'video#trim', 'url' => '/trim', 'verb' => 'POST']
    ]
];

I've build my controller:

// [MYAPP]/lib/controller/VideoController.php
namespace OCA\[MYAPP]\Controller;

use OCP\IRequest;
use GuzzleHttp\Client;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\DataResponse;

class VideoController extends Controller
{

   /**
    * @NoAdminRequired
    */
    public function trim(string $title, string $content)
    {
        $client = new Client([
          'base_uri' => 'http://localhost:3000/push',
          'timeout'  => 2.0,
        ]);

        $response = $client->request('POST', ['json' => $content]);

        return new DataResponse(['foo' => 'bar']);
    }
}

I'm POSTing my request to it. In console I see a redirect to Location http://localhost:9000/apps/dashboard/.

// js
const opts = {}; // my payload
const url = window.OC.generateUrl('/apps/[MYAPP]/video/trim');
fetch(url, {method: 'post', body: JSON.stringify(opts)})
    .catch((err) => console.error(err))
    .then((response) => response.json())
    .then((data) => console.log(data));
Michael Hirschler
  • 2,345
  • 16
  • 28

1 Answers1

0

I finally found the problem in routes.php!

Since I'm generating the URL for /apps/[MYAPP]/video/trim, the url in routes.php should look like /video/trim instead of /trim.

// [MYAPP]/appinfo/routes.php
return [
    'routes' => [
       ['name' => 'video#trim', 'url' => '/video/trim', 'verb' => 'POST']
    ]
];
Michael Hirschler
  • 2,345
  • 16
  • 28