Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BNF only : accès à mediapart via bnf #284

Merged
merged 2 commits into from
Jan 30, 2025

Conversation

JeremieGiffard
Copy link
Contributor

BNF developpement specifique

#22

Ajout du site mediapart pour les abonné.e.s BNF .
Le bouton s'affiche sur le bandeau paywall de l'article.
Pas de redirection sur l'article mis en place. Le bouton redirige à l'acceuil du site miroir. Voir plus bas.

tests effectués

exemple article payant mediapart
dans le cas ou l'utilisateur.ice n'est pas encore connecté.e à son compte BNF :

Problème de connection partielle si redirection sur l'article

cas avec bouton redirige directement vers l'article sur le mirroir.

https://bnf.idm.oclc.org/login?url=http://www.mediapart.fr/journal/international/180125/etats-unis-l-arrivee-de-trump-un-grand-defi-pour-les-defenseurs-du-climat

  1. Sur le site mediapart, en cliquant sur le bouton 'lire avec BNF' , on arrive sur l'ecran de connection BNF.
  2. après connection on est redirigé vers l'article sur le domaine mirroir.
  3. On peut naviguer sur le site mirroir mediapart mais les articles sont toujours derrière paywall. Et on n'apparait pas comme connecté avec le compte BNF.

site  mirroir mediapart sans compte enregistré

cas avec bouton redirige vers le mirroir, sans redirection sur l'article.

https://bnf.idm.oclc.org/login?url=http://www.mediapart.fr/licence

  1. Sur le site mediapart, en cliquant sur le bouton 'lire avec BNF' , on arrive sur l'ecran de connection BNF.
  2. après connection on est redirigé vers l'acceuil.
  3. On peut naviguer sur le site mirroir mediapart, acceder aux articles, et on apparait comme connecté au compte BNF.

site mirroir mediapart avec compte enregistré

Je pense qu'un traitement specifique est fait sur la page licence ``https://bnf.idm.oclc.org/login?url=http://www.mediapart.fr/licence` au moment de la connection bnf.
Du coup faudra se contenter pour l'instant d'un accès part l'acceuil du mirroir.

@Write
Copy link
Collaborator

Write commented Jan 20, 2025

Ah c'est marrant, je me demandais pourquoi je n'arrivais pas à être authentifié sur Mediapart avec le proxy de ma bibliothèque, mais il semblerait que tu sois tombé sur le même bug quand on redirige directement vers le bon article.

Je pensais que c'était un bug qui n'affectait que ma bibliothèque. Je vais voir, l'idéal serait quand même d'avoir, à la toute fin, une redirection vers l'article, quitte à avoir la page d'accueil Mediapart une première fois.

Je suis quasiment sûr que la redirection /licence fixe le problème. Il faudrait alors "consommer" comme on le fait avec la recherche Europresse, une fois la page d'accueil détectée... hmm...

@babeuh
Copy link

babeuh commented Jan 20, 2025

Pour info, sur Mediapart, il suffit également, lorsque l'on arrive sur un article du domaine https://www-mediapart-fr.bnf.idm.oclc.org/ sans être connecté à Mediapart mais en ayant accès au miroir, de faire une requête avec fetch comme ceci, puis de recharger la page pour avoir accès aux articles :

fetch("https://www-mediapart-fr.bnf.idm.oclc.org/licence").then(() => window.location.reload());

Alors, il semble possible de créer un fonctionnement qui redirige vers l'URL https://bnf.idm.oclc.org/login?url=http://www.mediapart.fr/journal/... Une fois sur cette page, il faudrait vérifier si l'on est connecté, par exemple en utilisant mediapart.user.uid === 0 (qui est vrai lorsque l'on est déconnecté et que la page a chargé correctement, c'est-à-dire que l'on est connecté à la BnF, puisque le proxy nous laisse passer et donc que le contenu de la page définit l'objet mediapart). Et, dans ce cas, faire la requête au portail de licence et recharger la page.

J'utilise actuellement un userscript que j'ai fait qui suit ce principe : https://gist.github.com/babeuh/ae3310043c32339ef5df4e480d22905b

@JeremieGiffard
Copy link
Contributor Author

Genial, merci pour les infos @babeuh !

Copy link
Collaborator

@Write Write left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bien. Plus que la partie qui redirige sur l'article correct Mediapart :)

@JeremieGiffard JeremieGiffard marked this pull request as ready for review January 29, 2025 21:33
@JeremieGiffard
Copy link
Contributor Author

je Passe la pr en status ready. suis tombé sur le problème décrit dans cet article :
https://kpracuk.dev/articles/accessing-websites-window-object-in-chrome-extension

Problème de scope ou contexte, ouvrir la console du navigateur sur la page, me donne bien accès à window.mediapart. Mais je n'y ai pas accès via le code du plugin.

A moins que vous ayez de la doc assez precise sur ce sujet, j'abandonne la redirection mediapart pour l'instant :)

@Write
Copy link
Collaborator

Write commented Jan 29, 2025

Vue qu'on peut modifier l'html de la page, ne peut t'on pas simplement injecter une balise <script> avec le script, dans le contexte principal (dans la page en elle même du coup), le script devrait alors avoir bien accès à l'objet Window

@babeuh
Copy link

babeuh commented Jan 29, 2025

Je ne pense pas que cela serait possible @Write en Manifest V3 à cause de la CSP qui s'applique au extensions. Je crois qu'il n'est pas encore obligatoire mais ca devrait bientôt être le cas iirc.

(Je pense ca provoquerait une erreur de type: Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'")

Vu que c'est aussi possible d'utiliser la fonction message entre un script dans le world isolé et un deuxième dans le world MAIN (comme montré ici https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts#host-page-communication), j'imagine ca serait possible d'injecter deux content scripts differents dans la page, un pour chaque world. (Probablement possible d'avoir les deux dans le même file .js en verifiant quelque chose que accessible dans un des deux mondes avec une condition if)

On peut définir le world ici: https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts#static-declarative

Je pense ça serait aussi possible d'injecter un script avec chrome.scripting.executeScript, c'est peut-être une autre piste.

@Write Write merged commit 02669b2 into lovasoa:master Jan 30, 2025
1 check passed
@JeremieGiffard JeremieGiffard deleted the feature/BNF-mediapart branch January 30, 2025 20:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Question] Bien-fondé d'ajouter des fonctionnalités supplémentaires liées spécifiquement à la BNF ?
3 participants