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(),
        ),
    )));
});

source Github