Skip to content

Commit

Permalink
fix: do not use deprecated code
Browse files Browse the repository at this point in the history
Closes #1
  • Loading branch information
Joedmin committed Oct 24, 2024
1 parent f658ae4 commit f1be517
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 58 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.DS_Store
fresh_rss_data/
vendor/
4 changes: 4 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"intelephense.environment.includePaths": ["../FreshRSS"],
"cSpell.enabled": false
}
82 changes: 54 additions & 28 deletions Controllers/readeckButtonController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@

class FreshExtension_readeckButton_Controller extends Minz_ActionController
{
public function jsVarsAction()
/** @var ReadeckButton\View */
protected $view;

public function jsVarsAction(): void
{
$extension = Minz_ExtensionManager::findExtension('Readeck Button');
$this->view->readeck_button_vars = json_encode(array(
'instance_api_url' => FreshRSS_Context::$user_conf->instance_api_url,
'keyboard_shortcut' => FreshRSS_Context::$user_conf->keyboard_shortcut,
'instance_api_url' => FreshRSS_Context::userConf()->attributeString('instance_api_url'),
'keyboard_shortcut' => FreshRSS_Context::userConf()->attributeString('keyboard_shortcut'),
'icons' => array(
'added_to_readeck' => $extension->getFileUrl('added_to_readeck.svg', 'svg'),
),
Expand All @@ -25,20 +28,20 @@ public function jsVarsAction()
header('Content-Type: application/javascript; charset=utf-8');
}

public function requestAccessAction()
public function requestAccessAction(): void
{
$api_token = Minz_Request::param('api_token', '');
$instance_api_url = Minz_Request::param('instance_api_url', '');
FreshRSS_Context::$user_conf->instance_api_url = $instance_api_url;
FreshRSS_Context::$user_conf->api_token = $api_token;
FreshRSS_Context::$user_conf->save();
$api_token = Minz_Request::paramString('api_token');
$instance_api_url = Minz_Request::paramString('instance_api_url');
FreshRSS_Context::userConf()->_attribute('instance_api_url', $instance_api_url);
FreshRSS_Context::userConf()->_attribute('api_token', $api_token);
FreshRSS_Context::userConf()->save();

$result = $this->curlGetRequest($instance_api_url . '/profile', $api_token);
if ($result['status'] == 200) {
FreshRSS_Context::$user_conf->username = $result['response']->user->username;
FreshRSS_Context::$user_conf->instance_api_url = $instance_api_url;
FreshRSS_Context::$user_conf->api_token = $api_token;
FreshRSS_Context::$user_conf->save();
FreshRSS_Context::userConf()->_attribute('username', $result['response']->user->username);
FreshRSS_Context::userConf()->_attribute('instance_api_url', $instance_api_url);
FreshRSS_Context::userConf()->_attribute('api_token', $api_token);
FreshRSS_Context::userConf()->save();

$url_redirect = array('c' => 'extension', 'a' => 'configure', 'params' => array('e' => 'Readeck Button'));
Minz_Request::good(_t('ext.readeckButton.notifications.authorized_success'), $url_redirect);
Expand All @@ -49,22 +52,22 @@ public function requestAccessAction()
Minz_Request::bad(_t('ext.readeckButton.notifications.request_access_failed', $result['status']), $url_redirect);
}

public function revokeAccessAction()
public function revokeAccessAction(): void
{
FreshRSS_Context::$user_conf->instance_api_url = '';
FreshRSS_Context::$user_conf->api_token = '';
FreshRSS_Context::$user_conf->username = '';
FreshRSS_Context::$user_conf->save();
FreshRSS_Context::userConf()->instance_api_url = '';
FreshRSS_Context::userConf()->api_token = '';
FreshRSS_Context::userConf()->username = '';
FreshRSS_Context::userConf()->save();

$url_redirect = array('c' => 'extension', 'a' => 'configure', 'params' => array('e' => 'Readeck Button'));
Minz_Request::forward($url_redirect);
}

public function addAction()
public function addAction(): void
{
$this->view->_layout(false);

$entry_id = Minz_Request::param('id');
$entry_id = Minz_Request::paramString('id');
$entry_dao = FreshRSS_Factory::createEntryDao();
$entry = $entry_dao->searchById($entry_id);

Expand All @@ -77,17 +80,20 @@ public function addAction()
'url' => $entry->link(),
);


$api_token = FreshRSS_Context::$user_conf->api_token;
$instance_api_url = FreshRSS_Context::$user_conf->instance_api_url;
$api_token = FreshRSS_Context::userConf()->api_token;
$instance_api_url = FreshRSS_Context::userConf()->instance_api_url;

$result = $this->curlPostRequest($instance_api_url . "/bookmarks", $post_data, $api_token);
$result['response'] = array('title' => $entry->title());

echo json_encode($result);
}

private function getRequestHeaders($api_token)
/**
* @param string $api_token
* @return array<string>
*/
private function getRequestHeaders($api_token): array
{
return array(
'Content-Type: application/json; charset=UTF-8',
Expand All @@ -96,7 +102,12 @@ private function getRequestHeaders($api_token)
);
}

private function getCurlBase($url, $api_token)
/**
* @param string $url
* @param string $api_token
* @return \CurlHandle
*/
private function getCurlBase($url, $api_token): \CurlHandle
{
$headers = $this->getRequestHeaders($api_token);

Expand All @@ -108,7 +119,12 @@ private function getCurlBase($url, $api_token)
return $curl;
}

private function curlGetRequest($url, $api_token)
/**
* @param string $url
* @param string $api_token
* @return array<string,mixed>
*/
private function curlGetRequest($url, $api_token): array
{
$curl = $this->getCurlBase($url, $api_token);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
Expand All @@ -127,7 +143,13 @@ private function curlGetRequest($url, $api_token)
);
}

private function curlPostRequest($url, $post_data, $api_token)
/**
* @param string $url
* @param array<string,mixed> $post_data
* @param string $api_token
* @return array<string,mixed>
*/
private function curlPostRequest($url, $post_data, $api_token): array
{
$curl = $this->getCurlBase($url, $api_token);
curl_setopt($curl, CURLOPT_POST, true);
Expand All @@ -147,7 +169,11 @@ private function curlPostRequest($url, $post_data, $api_token)
);
}

private function httpHeaderToArray($header)
/**
* @param string $header
* @return array<string,string>
*/
private function httpHeaderToArray($header): array
{
$headers = array();
$headers_parts = explode("\r\n", $header);
Expand Down
54 changes: 28 additions & 26 deletions configure.phtml
Original file line number Diff line number Diff line change
@@ -1,67 +1,69 @@
<?php
$instance_api_url = FreshRSS_Context::$user_conf->instance_api_url;
$api_token = FreshRSS_Context::$user_conf->api_token;
$username = FreshRSS_Context::$user_conf->username;
$keyboard_shortcut = FreshRSS_Context::$user_conf->keyboard_shortcut;

declare(strict_types=1);
/** @var ReadeckButtonExtension $this */
$instance_url = FreshRSS_Context::userConf()->attributeString('instance_api_url');
$api_token = FreshRSS_Context::userConf()->attributeString('api_token');
$username = FreshRSS_Context::userConf()->attributeString('username');
$keyboard_shortcut = FreshRSS_Context::userConf()->attributeString('keyboard_shortcut');
?>

<form action="<?php echo _url('extension', 'configure', 'e', urlencode($this->getName())); ?>" method="post">
<input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<form action="<?= _url('extension', 'configure', 'e', urlencode($this->getName())); ?>" method="post">
<input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken(); ?>" />
<div class="form-group">
<label class="group-name" for="keyboard_shortcut"><?php echo _t('ext.readeckButton.configure.keyboard_shortcut'); ?></label>
<label class="group-name" for="keyboard_shortcut"><?= _t('ext.readeckButton.configure.keyboard_shortcut'); ?></label>
<div class="group-controls">
<input type="text" name="keyboard_shortcut" id="keyboard_shortcut" maxlength="1" value="<?php echo $keyboard_shortcut; ?>">
<input type="text" name="keyboard_shortcut" id="keyboard_shortcut" maxlength="1" value="<?= $keyboard_shortcut; ?>">
</div>
</div>

<div class="form-group form-actions">
<div class="group-controls">
<button type="submit" class="btn btn-important"><?php echo _t('gen.action.submit'); ?></button>
<button type="submit" class="btn btn-important"><?= _t('gen.action.submit'); ?></button>
</div>
</div>
</form>

<?php if ($this->isEnabled() && (empty($username) || empty($api_token) || empty($instance_api_url))) : ?>
<form action="<?php echo _url('readeckButton', 'requestAccess'); ?>" method="post">
<input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<?php if ($this->isEnabled() && (empty($username) || empty($api_token) || empty($instance_url))) : ?>
<form action="<?= _url('readeckButton', 'requestAccess'); ?>" method="post">
<input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken(); ?>" />
<div class="form-group">
<label class="group-name" for="instance_api_url"><?php echo _t('ext.readeckButton.configure.instance_api_url'); ?></label>
<label class="group-name" for="instance_api_url"><?= _t('ext.readeckButton.configure.instance_api_url'); ?></label>
<div class="group-controls">
<!-- TODO: regex -->
<input type="text" name="instance_api_url" id="instance_api_url" pattern="https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)\/api\/?" value="<?php echo $instance_api_url; ?>" required>
<input type="url" name="instance_api_url" id="instance_api_url" title="Please enter a valid URL starting with http:// or https://" value="<?= $instance_url; ?>" required>
</div>
<label class="group-name" for="api_token"><?php echo _t('ext.readeckButton.configure.api_token'); ?></label>
<label class="group-name" for="api_token"><?= _t('ext.readeckButton.configure.api_token'); ?></label>
<div class="group-controls">
<input type="text" name="api_token" id="api_token" value="<?php echo $api_token; ?>" required>
<input type="text" name="api_token" id="api_token" value="<?= $api_token; ?>" required>
</div>
</div>

<div class="alert alert-warn">
<?php echo _t('ext.readeckButton.configure.api_token_description'); ?>
<?= _t('ext.readeckButton.configure.api_token_description'); ?>
</div>

<div class="form-group form-actions">
<div class="group-controls">
<button type="submit" class="btn btn-important"><?php echo _t('ext.readeckButton.configure.connect_to_readeck'); ?></button>
<button type="submit" class="btn btn-important"><?= _t('ext.readeckButton.configure.connect_to_readeck'); ?></button>
</div>
</div>
</form>
<?php elseif (!$this->isEnabled()) : ?>
<p class="alert alert-error">
<?php echo _t('ext.readeckButton.configure.extension_disabled'); ?>
<?= _t('ext.readeckButton.configure.extension_disabled'); ?>
</p>
<?php endif ?>

<?php if (!empty($username) && !empty($api_token) && !empty($instance_api_url)) : ?>
<?php if (!empty($username) && !empty($api_token) && !empty($instance_url)) : ?>
<p class="alert alert-success">
<?php echo _t('ext.readeckButton.configure.connected_to_readeck', $username, $api_token, $instance_api_url); ?>
<?= _t('ext.readeckButton.configure.connected_to_readeck', $username, $api_token, $instance_url); ?>
</p>
<form action="<?php echo _url('readeckButton', 'revokeAccess'); ?>" method="post">
<input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<form action="<?= _url('readeckButton', 'revokeAccess'); ?>" method="post">
<input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken(); ?>" />
<div class="form-group form-actions">
<div class="group-controls">
<button type="submit" class="btn btn-important"><?php echo _t('ext.readeckButton.configure.revoke_access'); ?></button>
<button type="submit" class="btn btn-important"><?= _t('ext.readeckButton.configure.revoke_access'); ?></button>
</div>
</div>
</form>
<?php endif ?>
<?php endif ?>
10 changes: 6 additions & 4 deletions extension.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,28 @@

class ReadeckButtonExtension extends Minz_Extension
{
#[\Override]
public function init()
{
$this->registerTranslates();

Minz_View::appendScript($this->getFileUrl('script.js', 'js'), false, false, false);
Minz_View::appendStyle($this->getFileUrl('style.css', 'css'));
Minz_View::appendScript(_url('readeckButton', 'jsVars'), false, true, false);
Minz_View::appendScript(strval(_url('readeckButton', 'jsVars')), false, true, false);

$this->registerController('readeckButton');
$this->registerViews();
}

#[\Override]
public function handleConfigureAction()
{
$this->registerTranslates();

if (Minz_Request::isPost()) {
$keyboard_shortcut = Minz_Request::param('keyboard_shortcut', '');
FreshRSS_Context::$user_conf->keyboard_shortcut = $keyboard_shortcut;
FreshRSS_Context::$user_conf->save();
$keyboard_shortcut = Minz_Request::paramString('keyboard_shortcut');
FreshRSS_Context::userConf()->_attribute('readeck_keyboard_shortcut', $keyboard_shortcut);
FreshRSS_Context::userConf()->save();
}
}
}

0 comments on commit f1be517

Please sign in to comment.