Ajout d’une fonction à l’api pour récupérer les items non lues d’un seul flux :
Éditer le fichier jsonrpc.php
// Get all items unread for a specific feed
$server->register('item_unread.feed.list', function ($feed_id, $offset ###### null, $limit null) {
return Model<br/>Item<br/>get_unread_by_feed($feed_id, $offset, $limit);
});
Éditer le fichier app/models/item.php
// Get all items unread per feed
function get_unread_by_feed($feed_id, $offset ###### null, $limit null, $order_column ###### 'updated', $order_direction 'desc')
{
return Database::get('db')
->table('items')
->columns(
'items.id',
'items.title',
'items.updated',
'items.url',
'items.enclosure',
'items.enclosure_type',
'items.feed_id',
'items.status',
'items.content',
'items.bookmark',
'items.language',
'feeds.site_url',
'feeds.rtl'
)
->join('feeds', 'id', 'feed_id')
->eq('status', 'unread')
->eq('feed_id', $feed_id)
->orderBy($order_column, $order_direction)
->offset($offset)
->limit($limit)
->findAll();
}
Et pour tester que tout fonctionne :
curl -u "<user>:<api token>" <br/>
-d '{"jsonrpc": "2.0", "method": "item_unread.feed.list", "params": {"feed_id": 3}, "id": 1}' <br/>
https://rss.hectorpablo.fr/jsonrpc.php
Ajout d’un bypass de l’authentification pour le réseau local :
Ajout d’une fonction dans le fichier app/models/user.php
function is_inlan()
{
return preg_match("/192.168.1.[0-9]{1,3}/",$_SERVER["REMOTE_ADDR"]);
}
Attention ! si l’appli web est derrière un reverse proxy, il faut utiliser ce code
function is_inlan()
{
return preg_match("/192.168.1.[0-9]{1,3}/",$_SERVER["HTTP_X_FORWARDED_FOR"]);
}
Ajout d’un bypass de l’authentification via custom header :
Exemple avec Firefox : Installer l’extension “Modify Header Value (HTTP Headers)” et rajouter une règle pour une URL donnée et avec une valeur spécifique.
Ensuite modifier la fonction dans le fichier app/models/user.php
function is_fingerprint()
{
return preg_match("/<ma valeur perso>/",$_SERVER["HTTP_<MON CUSTOM HEADER>"]);
}
Modification de la fonction qui gère l’authentification dans app/controllers/auth.php
:
// Display form login
Router<br/>get_action('login', function () {
if (Model<br/>User<br/>is_inlan()){
$_SESSION['user_id'] = 1;
$_SESSION['username'] = "admin";
$_SESSION['is_admin'] = 1;
}
if (SessionStorage::getInstance()->isLogged()) {
Response<br/>redirect('?action=unread');
}
Response<br/>html(Template<br/>load('auth/login', array(
'errors' => array(),
'values' => array(
'csrf' => Helper<br/>generate_csrf(),
),
)));
});