Skip to content

Commit

Permalink
fix: missing readeck prefix in config variables
Browse files Browse the repository at this point in the history
Closes #3

References #4
  • Loading branch information
Joedmin committed Oct 25, 2024
1 parent 28e1de3 commit d9fa88a
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 27 deletions.
86 changes: 70 additions & 16 deletions Controllers/readeckButtonController.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ public function jsVarsAction(): void
{
$extension = Minz_ExtensionManager::findExtension('Readeck Button');
$this->view->readeck_button_vars = json_encode(array(
'instance_api_url' => FreshRSS_Context::userConf()->attributeString('instance_api_url'),
'keyboard_shortcut' => FreshRSS_Context::userConf()->attributeString('keyboard_shortcut'),
'instance_url' => FreshRSS_Context::userConf()->attributeString('readeck_instance_url'),
'keyboard_shortcut' => FreshRSS_Context::userConf()->attributeString('readeck_shortcut'),
'icons' => array(
'added_to_readeck' => $extension->getFileUrl('added_to_readeck.svg', 'svg'),
),
Expand All @@ -30,22 +30,24 @@ public function jsVarsAction(): void

public function requestAccessAction(): void
{
$instance_url = Minz_Request::paramString('instance_url');
$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);

// TODO: handle trailing slash in url


FreshRSS_Context::userConf()->_attribute('readeck_instance_url', $instance_url);
FreshRSS_Context::userConf()->_attribute('readeck_api_token', $api_token);
FreshRSS_Context::userConf()->save();

$result = $this->curlGetRequest($instance_api_url . '/profile', $api_token);
$result = $this->curlGetRequest($instance_url . '/api/profile', $api_token);
if ($result['status'] == 200) {
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()->_attribute('readeck_username', $result['response']->user->username);
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);
exit();
return;
}

$url_redirect = array('c' => 'extension', 'a' => 'configure', 'params' => array('e' => 'Readeck Button'));
Expand All @@ -54,15 +56,64 @@ public function requestAccessAction(): void

public function revokeAccessAction(): void
{
FreshRSS_Context::userConf()->_attribute('instance_api_url');
FreshRSS_Context::userConf()->_attribute('api_token');
FreshRSS_Context::userConf()->_attribute('username');
// TODO: remove in the next 2 versions
$this->migrateConfigvariables();

FreshRSS_Context::userConf()->_attribute('readeck_instance_url');
FreshRSS_Context::userConf()->_attribute('readeck_api_token');
FreshRSS_Context::userConf()->_attribute('readeck_username');
FreshRSS_Context::userConf()->save();

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

// TODO: remove this method after the next 2 versions - all users should've already been migrated, hopefuly
private function migrateConfigvariables(): void
{
$username = FreshRSS_Context::userConf()->attributeString('username');
$keyboard_shortcut = FreshRSS_Context::userConf()->attributeString('keyboard_shortcut');
$instance_url = FreshRSS_Context::userConf()->attributeString('instance_api_url');
$api_token = FreshRSS_Context::userConf()->attributeString('api_token');

if (!isset($username) && !isset($instance_url) && !isset($api_token))
{
// Already migrated.
return;
}

// Migrate to base url
if (substr($instance_url, -1) == '/')
{
$instance_url = substr($instance_url, 0, -1);
}
if (substr($instance_url, -4) == '/api')
{
$instance_url = substr($instance_url, 0, -4);
}

// Save them with preix
FreshRSS_Context::userConf()->_attribute('readeck_username', $username);
FreshRSS_Context::userConf()->_attribute('readeck_instance_url', $instance_url);
FreshRSS_Context::userConf()->_attribute('readeck_api_token', $api_token);

// Remove old variables
FreshRSS_Context::userConf()->_attribute('username');
FreshRSS_Context::userConf()->_attribute('instance_api_url');
FreshRSS_Context::userConf()->_attribute('api_token');

if (isset($keyboard_shortcut)) {
FreshRSS_Context::userConf()->_attribute('readeck_shortcut', $keyboard_shortcut);
FreshRSS_Context::userConf()->_attribute('keyboard_shortcut');
}
else {
// Does not matter, user might have not even set it
}

// Migration complete
FreshRSS_Context::userConf()->save();
}

public function addAction(): void
{
$this->view->_layout(null);
Expand All @@ -80,10 +131,13 @@ public function addAction(): void
'url' => $entry->link(),
);

$api_token = FreshRSS_Context::userConf()->attributeString('api_token');
$instance_api_url = FreshRSS_Context::userConf()->attributeString('instance_api_url');
// TODO: remove in the next 2 versions
$this->migrateConfigvariables();

$api_token = FreshRSS_Context::userConf()->attributeString('readeck_api_token');
$instance_url = FreshRSS_Context::userConf()->attributeString('readeck_instance_url');

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

echo json_encode($result);
Expand Down
14 changes: 7 additions & 7 deletions configure.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

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');
$instance_url = FreshRSS_Context::userConf()->attributeString('readeck_instance_url');
$api_token = FreshRSS_Context::userConf()->attributeString('readeck_api_token');
$username = FreshRSS_Context::userConf()->attributeString('readeck_username');
$keyboard_shortcut = FreshRSS_Context::userConf()->attributeString('readeck_shortcut');
?>

<form action="<?= _url('extension', 'configure', 'e', urlencode($this->getName())); ?>" method="post">
Expand All @@ -28,13 +28,13 @@ $keyboard_shortcut = FreshRSS_Context::userConf()->attributeString('keyboard_sho
<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"><?= _t('ext.readeckButton.configure.instance_api_url'); ?></label>
<label class="group-name" for="instance_url"><?= _t('ext.readeckButton.configure.instance_url'); ?></label>
<div class="group-controls">
<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>
<input type="url" name="instance_url" id="instance_url" title="Please enter a valid URL starting with http:// or https://" value="<?= $instance_url; ?>" required>
</div>
<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="<?= $api_token; ?>" required>
<input type="password" name="api_token" id="api_token" value="<?= $api_token; ?>" required>
</div>
</div>

Expand Down
3 changes: 1 addition & 2 deletions extension.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,9 @@ public function init()
public function handleConfigureAction()
{
$this->registerTranslates();

if (Minz_Request::isPost()) {
$keyboard_shortcut = Minz_Request::paramString('keyboard_shortcut');
FreshRSS_Context::userConf()->_attribute('readeck_keyboard_shortcut', $keyboard_shortcut);
FreshRSS_Context::userConf()->_attribute('readeck_shortcut', $keyboard_shortcut);
FreshRSS_Context::userConf()->save();
}
}
Expand Down
2 changes: 1 addition & 1 deletion i18n/cs/ext.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<span>Podrobnosti naleznete na <a href="https://github.com/Joedmin/freshrss-readeck-button" target="_blank">GitHubu</a>!',
'connect_to_readeck' => 'Připojit se k Readecku',
'username' => 'Uživatelské jméno',
'instance_api_url' => 'URL adresy API instance Readeck',
'instance_url' => 'URL adresa instance Readeck',
'keyboard_shortcut' => ' Klávesová zkratka',
'extension_disabled' => 'Před připojením ke službě Readeck je nutné rozšíření povolit!',
'connected_to_readeck' => 'Jste připojeni k Readecku skrze účet <b>%s</b> zapomocí API tokenu <b>%s</b> na adrese <b>%s</b>.',
Expand Down
2 changes: 1 addition & 1 deletion i18n/en/ext.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<span>Details can be found on <a href="https://github.com/Joedmin/freshrss-readeck-button" target="_blank">GitHub</a>!',
'connect_to_readeck' => 'Connect to Readeck',
'username' => 'Username',
'instance_api_url' => 'Readeck instance API url',
'instance_url' => 'Readeck instance url',
'keyboard_shortcut' => 'Keyboard shortcut',
'extension_disabled' => 'You need to enable the extension before you can connect to Readeck!',
'connected_to_readeck' => 'You are connected to Readeck with the account <b>%s</b> using the access token <b>%s</b> at <b>%s</b>.',
Expand Down

0 comments on commit d9fa88a

Please sign in to comment.