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

This commit is contained in:
Yassine Doghri 2024-02-12 16:55:09 +00:00
parent 94ceba6081
commit d580369235
4 changed files with 40 additions and 30 deletions

View File

@ -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);
}
}

View File

@ -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

View File

@ -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;
}
}

View File

@ -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;
}
}