> termcourse : lire et publier sur les instances Discourse depuis le terminal

Ceci est une application Terminal (TUI), juste pour le plaisir… et un peu expérimentale à ce stade !

:information_source: Résumé Une interface utilisateur en terminal pour parcourir et publier sur les forums Discourse avec des listes de sujets, des vues complètes de sujets, des réponses, des “j’aime”, la recherche et un compositeur intégré.
:hammer_and_wrench: Lien du dépôt GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token)
:open_book: Guide d’installation README.md dans le dépôt (section Démarrage rapide)
:heart: Parrainage Veuillez envisager de devenir un sponsor continu de mon travail open source (Sponsor @merefield on GitHub Sponsors · GitHub) à un niveau qui convient à vos ressources et à celles de votre organisation afin de garantir que ce projet reçoive la maintenance qu’il mérite et continue de fonctionner pour votre site à l’avenir.

Vous appréciez termcourse ? Veuillez lui donner une :star: sur GitHub

Aperçu

> termcourse est un client basé sur terminal pour Discourse. Il se comporte comme une session de navigateur légère avec connexion basée sur les cookies (nom d’utilisateur/email + mot de passe) et prend en charge TOTP/codes de secours pour l’authentification multifacteur (MFA). Il existe également une solution de secours par clé API pour les sites verrouillés ou uniquement par SSO (Single Sign-On).

Fonctionnalités

  • Parcourir les listes de sujets Derniers / Populaires / Nouveaux / Non lus / Meilleurs, avec cyclage de la période pour les Meilleurs.
  • Ouvrir des sujets via les flèches + Entrée, ou les raccourcis numériques (1-0) pour les 10 premiers sujets visibles.
  • Afficher les sujets complets avec des publications défilables, un en-tête/pied de page fixe et une barre de progression/position de publication.
  • Développer les publications sélectionnées en contenu complet ; les publications non sélectionnées affichent des extraits compacts.
  • Répondre à des sujets entiers ou à des publications spécifiques.
  • Créer de nouveaux sujets avec titre, sélecteur de catégorie et compositeur de corps en ligne.
  • Aimer/ne plus aimer les publications avec un état visuel de cœur par publication.
  • Rechercher des publications et sauter directement au contexte de sujet/publication correspondant.
  • Le compositeur en ligne prend en charge le mouvement du curseur, l’insertion, les nouvelles lignes, la touche retour arrière et un compteur de longueur minimale en direct.
  • Rendu sensible au Markdown, y compris les liens enveloppés et la prise en charge de l’aperçu d’images en ligne (chafa / viu).
  • Substitutions d’emoji pour les jetons :emoji: courants et les émoticônes de style :)-.
  • Prise en charge des informations d’identification multi-sites via des variables d’environnement + un fichier credentials.yml par hôte (avec invite pour les champs de connexion manquants).
  • Connexion nom d’utilisateur/mot de passe avec session par cookie et prise en charge de l’authentification multifacteur (TOTP + code de secours), ainsi qu’une solution de secours par clé API.
  • Thèmes pilotés par YAML avec des éléments intégrés (défaut, ardoise, champ de foire) et des remplacements locaux via theme.yml.
  • Redessin réactif au redimensionnement avec intervalle de sondage configurable (TERMCOURSE_TICK_MS).
  • Journalisation de débogage optionnelle pour le diagnostic HTTP/authentification et le rendu de l’interface utilisateur.

Démarrage rapide

Consultez le dernier README pour plus d’informations

git clone https://github.com/merefield/termcourse
cd termcourse
bundle install

Nom d’utilisateur/mot de passe (recommandé)

bundle exec bin/termcourse votre.hote.discourse

Solution de secours par clé API

DISCOURSE_API_KEY=“votre_clé” DISCOURSE_API_USERNAME=“votre_nom_utilisateur” \
bundle exec bin/termcourse votre.hote.discourse

Notes sur l’authentification

  • La connexion nom d’utilisateur/mot de passe utilise une session normale de type navigateur.
  • L’authentification multifacteur est prise en charge pour TOTP et les codes de secours.
  • Les clés API sont prises en charge comme solution de secours.

Sécurité

  • Les informations d’identification ne sont pas stockées ; les cookies sont uniquement en mémoire.
  • Les variables d’environnement ou la réponse à l’invite fournie évitent que les mots de passe n’apparaissent dans l’historique du shell.
  • La journalisation est opt-in et désactivée par défaut.

Limitations

  • Certains sites ne sont pas compatibles avec le nom d’utilisateur/mot de passe car ils interdisent les invites à distance
  • Il réside dans le terminal

Crédits

Partiellement inspiré par Dumbcourse – Old-browser friendly UI at /dumb (D-pad + small screens) :clap:

16 « J'aime »

Ainsi, vous pouvez vous connecter rapidement à plusieurs sites (une seule session à la fois par onglet, évidemment), j’ai apporté les améliorations suivantes :

Améliorations de l’authentification et de la configuration de termcourse

  • Le nom d’utilisateur/mot de passe est désormais le chemin de connexion par défaut.
  • Vous n’avez plus besoin d’inclure https:// - c’est facultatif.
  • Les champs de connexion manquants sont demandés de manière interactive (par exemple : nom d’utilisateur connu, mot de passe manquant).
  • L’aide de l’interface de ligne de commande (CLI) inclut les variables d’environnement principales et les emplacements des fichiers journaux de débogage.

Informations d’identification et comportement des variables d’environnement (ENV)

  • Prend en charge le fichier d’informations d’identification mappé à l’hôte avec l’ordre de recherche suivant :
    1. TERMCOURSE_CREDENTIALS_FILE (si défini)
    2. ./credentials.yml
    3. ~/.config/termcourse/credentials.yml
  • Précedence de l’authentification :
    1. Indicateurs (flags) de la CLI
    2. Informations d’identification de l’hôte à partir du fichier YAML
    3. Variables d’environnement génériques DISCOURSE_*
    4. Invite interactive
  • Pour l’authentification : les valeurs manquantes de nom d’utilisateur/mot de passe lors de la connexion sont demandées.
  • Pour l’authentification API, le nom d’utilisateur API et la clé doivent tous deux aboutir à des valeurs non vides.

Débogage

  • Débogage HTTP/authentification : TERMCOURSE_HTTP_DEBUG=1 → /tmp/termcourse_http_debug.txt
  • Débogage du rendu de l’interface utilisateur (UI) : TERMCOURSE_DEBUG=1 → /tmp/termcourse_debug.txt

Hygiène du dépôt (Repo hygiene)

  • Ajout de credentials.example.yml et .env.example avec des exemples alignés.
  • Ajout d’entrées .gitignore pour les fichiers secrets locaux :
    • .env
    • credentials.yml
2 « J'aime »

C’est assez rudimentaire mais ça fonctionne.

Vous devez avoir viu ou chafa installé - et cela peut être un projet en soi :slight_smile:

En mode haute qualité sur chafa ou avec viu, Windows Terminal est supérieur au terminal MacOS car il prend en charge beaucoup plus de couleurs (merci Microsoft !)

Notes de version : Rendu d’images (dans le terminal !)

Rendu d’images

  • Ajout d’aperçus d’images de publication intégrés avec sélection du backend :
    • essaie chafa en premier, puis viu automatiquement.
    • TERMCOURSE_CHAFA_MODE=stable|quality
    • stable : sortie conservatrice pour la stabilité du terminal.
    • quality : rendu de symboles avec plus de détails/couleurs.
  • Ajout du contrôle de la hauteur de l’aperçu :
    • TERMCOURSE_IMAGE_LINES (défaut : 14)
    • S’applique à la hauteur des lignes d’aperçu ; utile pour ajuster la densité visuelle.
  • Amélioration du comportement d’aspect de viu :
    • Passage au rendu ciblé par ligne (-h) pour mieux préserver le rapport d’aspect.
  • Ajout des contrôles de filtre de qualité d’aperçu :
    • TERMCOURSE_IMAGE_QUALITY_FILTER=1 filtre les aperçus bruyants composés uniquement de blocs.
    • Réglez sur 0 pour toujours afficher la sortie du moteur de rendu.
  • Ajout d’une limite de sécurité pour le téléchargement d’images :
    • TERMCOURSE_IMAGE_MAX_BYTES (défaut : 5242880)
    • Empêche les téléchargements d’images surdimensionnées d’affecter les performances.
  • Ajout de la prise en charge des liens d’image Discourse upload://… :
    • Résolution automatique vers /uploads/short-url/…
  • Amélioration de la désinfection/stabilité du terminal :
    • Conserve les codes de couleur SGR valides si nécessaire.
    • Supprime les séquences de contrôle/graphiques déstabilisantes.
    • Empêche l’affichage des fragments d’échappement ANSI sous forme de texte brut.

Une note : J’ai trouvé un site qui bloque le nom d’utilisateur/mot de passe à distance, donc ce client ne fonctionnera pas dans cette situation (à moins que vous ne le possédiez et que vous puissiez définir une clé d’API !) - suggestions bienvenues, mais aucun support actuellement dans ces cas.

Je ne suis pas sûr de l’utiliser dans le monde réel, je n’en vois pas l’utilité pour moi, mais je l’ai essayé et c’est délicieux. J’adore pouvoir interagir avec une plateforme de forum de nouvelle génération depuis une interface primitive, bare-metal.

D’une certaine manière, c’est très esthétiquement plaisant.

1 « J'aime »

Oui, je pense que cela pourrait être utile lorsque :

  • vous êtes sur une plateforme à faible fidélité
  • vous bricolez sur un Raspberry Pi (non encore testé, pour information)
  • depuis un serveur pour vérifier que vous êtes en ligne… ou si le code du front-end plante ! :smiley:
  • pour un site Discourse très basé sur le texte…
  • … et par curiosité technique :slight_smile:

J’ai l’intention de le tester sur mon téléphone avec Terminus…

3 « J'aime »

OK, probablement la dernière mise à jour pour aujourd’hui :

  • l’interface est maintenant réactive au redimensionnement de la fenêtre :tada:
  • améliorations du contenu dans les instructions de la barre supérieure
  • les touches 1 à (1)0 ouvrent maintenant le sujet correspondant dans la liste des sujets

N’oubliez pas de faire un git pull pour obtenir les mises à jour.

2 « J'aime »

Mec, maintenant je dois me mettre au travail sur mes œuvres d’art ASCII !!
¯\_(ツ)_/¯

2 « J'aime »

J’ai ajouté un système de thèmes entièrement personnalisable, voici « fairground » (fête foraine) :

… et voici « slate » (ardoise) :

détails dans le README :graduation_cap:

4 « J'aime »

ok, voici quelques mises à jour intéressantes les amis : :tangerine:

  • ajout de la prise en charge des messages privés - appuyez deux fois sur f :tada:
  • ajout de colonnes supplémentaires pour Catégorie, Utilisateurs, Vues, progressivement lorsque la largeur est étendue
  • ajustement du thème pour les séparateurs verticaux
  • README mis à jour