Commit d5803692 authored by Yassine Doghri's avatar Yassine Doghri
Browse files

fix(op3): move op3 prefix to enclosure url instead of audio proxy

parent 94ceba60
Loading
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ use CodeIgniter\HTTP\IncomingRequest;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\HTTP\URI;
use Config\Services;
use Modules\Analytics\Config\Analytics;
use Modules\PremiumPodcasts\Entities\Subscription;
@@ -166,6 +167,18 @@ class EpisodeAudioController extends Controller
            $subscription instanceof Subscription ? $subscription->id : null
        );

        return redirect()->to($this->analyticsConfig->getAudioUrl($this->episode, $this->request->getGet()));
        $audioFileURI = new URI(service('file_manager')->getUrl($this->episode->audio->file_key));

        $queryParams = [];
        foreach ($this->request->getGet() as $key => $value) {
            // do not include token in query params
            if ($key !== 'token') {
                $queryParams[$key] = $value;
            }
        }

        $audioFileURI->setQueryArray($queryParams);

        return redirect()->to((string) $audioFileURI);
    }
}
+22 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ use App\Models\PostModel;
use CodeIgniter\Entity\Entity;
use CodeIgniter\Files\File;
use CodeIgniter\HTTP\Files\UploadedFile;
use CodeIgniter\HTTP\URI;
use CodeIgniter\I18n\Time;
use Config\Images;
use Exception;
@@ -30,6 +31,7 @@ use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
use League\CommonMark\Extension\DisallowedRawHtml\DisallowedRawHtmlExtension;
use League\CommonMark\Extension\SmartPunct\SmartPunctExtension;
use League\CommonMark\MarkdownConverter;
use Modules\Analytics\OP3;
use Modules\Media\Entities\Audio;
use Modules\Media\Entities\Chapters;
use Modules\Media\Entities\Image;
@@ -344,7 +346,26 @@ class Episode extends Entity

    public function getAudioUrl(): string
    {
        return url_to('episode-audio', $this->getPodcast()->handle, $this->slug, $this->getAudio()->file_extension);
        $audioURL = url_to(
            'episode-audio',
            $this->getPodcast()
->handle,
            $this->slug,
            $this->getAudio()
->file_extension
        );

        // Wrap episode url with OP3 if episode is public and OP3 is enabled on this podcast
        if (! $this->is_premium && service('settings')->get(
            'Analytics.enableOP3',
            'podcast:' . $this->podcast_id
        )) {
            $op3 = new OP3(config('Analytics')->OP3);

            return $op3->wrap($audioURL, $this);
        }

        return $audioURL;
    }

    public function getAudioWebUrl(): string
+0 −23
Original line number Diff line number Diff line
@@ -4,10 +4,7 @@ declare(strict_types=1);

namespace Modules\Analytics\Config;

use App\Entities\Episode;
use CodeIgniter\Config\BaseConfig;
use CodeIgniter\HTTP\URI;
use Modules\Analytics\OP3;

class Analytics extends BaseConfig
{
@@ -53,24 +50,4 @@ class Analytics extends BaseConfig
    ];

    public bool $enableOP3 = false;

    /**
     * get the full audio file url
     */
    public function getAudioUrl(Episode $episode, array $params): string
    {
        $audioFileURI = new URI(service('file_manager')->getUrl($episode->audio->file_key));
        $audioFileURI->setQueryArray($params);

        // Wrap episode url with OP3 if episode is public and OP3 is enabled on this podcast
        if (! $episode->is_premium && service('settings')->get(
            'Analytics.enableOP3',
            'podcast:' . $episode->podcast_id
        )) {
            $op3 = new OP3($this->OP3);
            $audioFileURI = new URI($op3->wrap($audioFileURI, $episode));
        }

        return (string) $audioFileURI;
    }
}
+4 −5
Original line number Diff line number Diff line
@@ -11,7 +11,6 @@ declare(strict_types=1);
namespace Modules\Analytics;

use App\Entities\Episode;
use CodeIgniter\HTTP\URI;

class OP3
{
@@ -25,11 +24,11 @@ class OP3
        $this->host = rtrim($config['host'], '/');
    }

    public function wrap(URI $audioURI, Episode $episode): string
    public function wrap(string $audioURL, Episode $episode): string
    {
        // remove scheme from audioURI
        $audioURI->setScheme('');
        // remove scheme from audioURI if https
        $audioURIWithoutHTTPS = preg_replace('(^https://)', '', $audioURL);

        return $this->host . '/e,pg=' . $episode->podcast->guid . '/' . $audioURI;
        return $this->host . '/e,pg=' . $episode->podcast->guid . '/' . $audioURIWithoutHTTPS;
    }
}