Skip to content

Conversation

@LoanR
Copy link
Contributor

@LoanR LoanR commented Jun 27, 2024

New configuration

  • USE_ACTIVITYPUB: bool
  • DEFAULT_AP_THUMBNAIL: default ActivityPub thumbnail in png format (there is a svg default format but it is currently not allowed by Peertube)

ActivityPub signature

Full documentation about ActivityPub requests signatures can be found pod/activitypub/README.md -> new public and private keys are needed for ActivityPub to work pod/activitypub/ap.key pod/activitypub/ap.pub.

Requirements before running container

You need to run migrations for the new ActivityPub models Follower, Following, ExternalVideo and for some changes in Video model.

ElasticSearch index needs also to be rebuilt: id was a long number, it is now a keyword, and is_external is a new boolean.

Local testing

docker-compose-full-dev-with-volumes.yml now launches a Peertube instance available on peertube.localhost:9000 for testing purpose.

To be able to use a local version, from previous builds, the Site object must be changed on Django admin to point on pod.localhost:8000.

You can federate to an instance by adding its url in Django admin, Following then Send the federation request action.
To get existing videos via ActivityPub of a followed instance, you also need to Reindex the instance videos.

@LoanR LoanR changed the base branch from master to develop June 27, 2024 13:14
@gitguardian
Copy link

gitguardian bot commented Jun 27, 2024

️✅ There are no secrets present in this pull request anymore.

If these secrets were true positive and are still valid, we highly recommend you to revoke them.
While these secrets were previously flagged, we no longer have a reference to the
specific commits where they were detected. Once a secret has been leaked into a git
repository, you should consider it compromised, even if it was deleted immediately.
Find here more information about risks.


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

@LoanR LoanR force-pushed the activitypub branch 3 times, most recently from b2e297c to c06326f Compare June 28, 2024 15:02
@Badatos
Copy link
Collaborator

Badatos commented Jun 28, 2024

Bonjour,

Si vous êtes certains que les "secrets" détectés par GitGuardian n'en sont pas, je vous invite à insérer les variables à ignorer dans un cartouche de ce type :

# ggignore-start
# gitguardian:ignore
# Generate one using `openssl rand -hex 32`
 PEERTUBE_SECRET=804061c0547350xxxxx
# ggignore-end

Ou pour éviter que toutes les configurations laissées par défaut partagent le même secret, mettez

# Generate one using `openssl rand -hex 32`
PEERTUBE_SECRET=TO_CHANGE

@SebastienCozeDev
Copy link
Contributor

La migration de develop vers activitypub fonctionnement correctement pour les vidéos 👍

@ptitloup
Copy link
Contributor

Bonjour,
Est-ce possible de terminer cette PR pour ce vendredi svp ?
Merci

@LoanR
Copy link
Contributor Author

LoanR commented Jul 10, 2024

Je pense que ça va être compliqué de s'engager sur une livraison vendredi... Il nous reste des ajustements à faire et je suis en arrêt pour covid...
Je pense que ce sera plus raisonnable pour un autre jour. Une release est prévue à la fin de la semaine ?

@ptitloup
Copy link
Contributor

nous prévoyons en effet une 3.8 pour mercredi prochain. Nous voulions avoir le temps de faire les review et test fonctionnel de votre contribution.
Quel serait votre délais de réalisation ?

@ptitloup
Copy link
Contributor

Vous pouvez mettre à jour votre branche depuis develop pour recupérer la dernière version de pod et fixer les conflits

@LoanR LoanR marked this pull request as draft July 11, 2024 08:21
@LoanR LoanR force-pushed the activitypub branch 2 times, most recently from 3233327 to b957ed5 Compare July 11, 2024 10:37
@LoanR LoanR changed the title [WIP] Yaal Coop/Add ActivityPub functionnality [WIP] Yaal Coop/Add ActivityPub functionality Jul 11, 2024
@LoanR LoanR force-pushed the activitypub branch 6 times, most recently from 7a90a1b to 2a45f72 Compare July 11, 2024 14:20
@LoanR
Copy link
Contributor Author

LoanR commented Jul 11, 2024

Hello @Badatos ,

Concernant GitGuardian, j'ai tenté :

Localement, le précommit GitGuardian ne renvoie pas d'incidents.

Mais la CI échoue toujours sur ces deux variables...
Est-ce que le GitGuardian du projet est configuré pour ignorer la conf ?
Est-ce qu'il faut signaler cette conf ailleurs ?
J'ai l'impression d'avoir pourtant reproduit ce que j'ai pu trouver comme cas similaires dans le code...

@ptitloup
Copy link
Contributor

Petite question, mise à part les gitguardian, est-ce que la PR est terminée ? si oui, pouvez-vous la passer en DONE qu'on puisse review svp ? Merci !

@LoanR
Copy link
Contributor Author

LoanR commented Jul 11, 2024

Non, je pense que la PR ne sera pas terminée avant la release...
On pourrait avoir une bonne surprise, dans ce cas là, je préviendrai, mais je n'y crois pas trop.

@ptitloup
Copy link
Contributor

ha ok, comme la PR passait les tests, je le croyais mais pas grave !

@Badatos
Copy link
Collaborator

Badatos commented Nov 20, 2024

En effet :
https://pod-test.univ-cotedazur.fr/.well-known/nodeinfo

{
"links": [{"rel": "http://nodeinfo.diaspora.software/ns/schema/2.0",
 "href": "http://pod-test.univ-cotedazur.fr/nodeinfo/2.0.json"},
{"rel": "https://www.w3.org/ns/activitystreams#Application",
 "href": "http://pod-test.univ-cotedazur.fr/ap"}]}

@Badatos
Copy link
Collaborator

Badatos commented Nov 20, 2024

On avance :)
J'ai donc mis le paramètre "SECURE_SSL_REDIRECT" du serveur pod-test à True, et cette fois le nodeinfo est correct, la tache "follow" renvoit enfin "True" :

Task pod.activitypub.tasks.task_follow[efd84c95-f4a5-4969-9a3f-xxx] succeeded in 13.38195166200012s: True

... Mais toujours aucun "Follower" n'apparait sur pod-test :/

@LoanR
Copy link
Contributor Author

LoanR commented Nov 20, 2024

Le dump de data est toujours à None ?

@Badatos
Copy link
Collaborator

Badatos commented Nov 21, 2024

Lorsque le serveur 2 envoie une requete "follow" au serveur 1, voici ce qui apparait dans les requetes du serveur 1 :

[21/Nov/2024:09:50:04 +0100] "GET /.well-known/nodeinfo HTTP/1.1" 200 246 "-" "python-requests/2.32.0"
[21/Nov/2024:09:50:04 +0100] "GET /ap HTTP/1.1" 200 1234 "-" "python-requests/2.32.0"
[21/Nov/2024:09:50:17 +0100] "POST /ap/inbox HTTP/1.1" 204 0 "-" "python-requests/2.32.0"

La dernière requete "/ap/inbox" est en HTTP 204 No Content, c'est normal ?

@Badatos
Copy link
Collaborator

Badatos commented Nov 21, 2024

Voici le data dump :

inbox query: {
 "@context": [
  "https://www.w3.org/ns/activitystreams",
  "https://w3id.org/security/v1",
  {
   "RsaSignature2017": "https://w3id.org/security#RsaSignature2017"
  }
 ],
 "type": "Follow",
 "id": "http://pod.localhost:8000/ap/following/1",
 "actor": "http://pod.localhost:8000/ap",
 "object": "https://pod-test.univ-cotedazur.fr/ap",
 "signature": {
  "type": "RsaSignature2017",
  "creator": "http://pod.localhost:8000/ap",
  "created": "2024-11-21T09:21:49.758230+00:00",
  "signatureValue": "JDMf0B8wp4KKSK4/c6eSIdGUxtZniFqMDD+BzJtz8iVQYmCw5iUj3nW1MJO1fGQ1ZSnSKMFeBw5LOX4ojCnjTShRybXl4d9xmWVPBqqV6/oPIUA1AD0+MGRLXfnECLHSv23WNyagJlbemlV9Gq7/ks7sJ3KMddi6Bj0NM3CrvvA2xgZQsOnmx1gwTwNrG+4zI8bZNlhmvHZCJ5qxshLstiF9+LQf24Lldp08y7LXIIOpC9hmEKtuo/0ApAQKufg4AE1X5plpg6D+h1tqPKkumzBwYFHbuC9pVpR4EsK+Rr8gjCJdN16JvSwFKswEE7f7JMQkiaAJvNmN22EuBWgZng=="
 }
} 

@LoanR
Copy link
Contributor Author

LoanR commented Nov 21, 2024

Je pense qu'avec un pod dans un conteneur en local ça ne peut pas fonctionner. J'explique ce que je pense qu'il se passe :

  • pod.localhost:8000 envoie une activité follow vers pod-test.univ-cotedazur.fr
  • pod-test.univ-cotedazur.fr reçoit bien cette requête avec les bonnes data.
  • pour poursuivre, pod-test.univ-cotedazur.fr doit récupérer un certain nombre d'informations sur l'actor, il fait donc une requête sur l'url de l'actor, dans notre cas http://pod.localhost:8000/ap
  • cette url ne répond pas, on se retrouve avec des data à None, la demande de follow échoue.

Pour pouvoir aller plus loin, il faudrait avoir deux instances de pod accessibles l'une pour l'autre. Donc une autre instance de test, ou bien utiliser un service comme ngrok pour avoir une url pour le pod local dockerisé accessible depuis le web.

@Badatos
Copy link
Collaborator

Badatos commented Nov 21, 2024

Ok, merci pour les infos !
Attendons donc d'avoir un 2e serveur Pod sous activitypub pour la suite des tests.

En attendant, je vous invite tout de même à modifier la ligne 136 du fichier views.py :
Avant :

if (
        data["type"] in ("Announce", "Update", "Delete")
        and not settings.TEST_SETTINGS
        and not check_signatures(request)
    ):
        return HttpResponse("Signature could not be verified", status=403)

Après :

if (
        data is None or 
        (data["type"] in ("Announce", "Update", "Delete")
        and not settings.TEST_SETTINGS
        and not check_signatures(request))
    ):
        return HttpResponse("Signature could not be verified", status=403)

Ca évitera de déclencher une Exception quand data est None.

@LoanR
Copy link
Contributor Author

LoanR commented Nov 21, 2024

J'ai 'ajouté un try except pour clarifier et logger les erreurs.

@LoanR
Copy link
Contributor Author

LoanR commented Dec 10, 2024

J'ai rebase sur develop, il y avait un conflit.

@LoanR
Copy link
Contributor Author

LoanR commented Jan 20, 2025

Hello ! Bonne année !
J'ai à nouveau rebase sur develop, il y avait un conflit.

@Badatos
Copy link
Collaborator

Badatos commented Jan 20, 2025

Hello ! Bonne année ! J'ai à nouveau rebase sur develop, il y avait un conflit.

Merci Loan !
Mes meilleurs voeux pour 2025 ;)

@Badatos Badatos linked an issue Jan 23, 2025 that may be closed by this pull request
@azmeuk
Copy link
Contributor

azmeuk commented Jun 11, 2025

@Badatos
J'ai résolu les derniers conflits, mais j'ai l'impression que désormais vous travaillez sur la branche main plutôt que sur la branche develop.
Faut-il que je mette à jour la branche de destination ?

@Badatos
Copy link
Collaborator

Badatos commented Jun 11, 2025

Bonjour @azmeuk
Les branches "master" et "develop" sont relatives à la V3 d'Esup-Pod.
Une V4 est en cours de développement, et sera basée sur la branche "main" en effet. La sortie est prévue pour cet été. à ce moment là, une nouvelle branche develop4 sera dédiée au nouveaux développements.

Pour cette PR ActivityPub, tout dépend donc de la version visée : pour la V3 elle peut continuer à se baser sur "develop", et pour une intégration éventuelle à la V4 il faudrait alors plutôt attendre la sortie de la V4 et la création de la branche "develop4" à priori, car nous sommes en phase de finalisation et aucune nouvelle fonctionnalité ne doit s'ajouter à la 4.0

@azmeuk
Copy link
Contributor

azmeuk commented Jun 11, 2025

Pour le moment cette PR vise la v3, si c'est acceptable alors gardons les choses comme ça.

J'aurai un peu de temps disponible dans les semaines à venir pour aider à la relecture de la PR et la fusionner.
Si tu le souhaites, on peut se prendre un temps en visio pour faire un test ensemble où tu me partagerais ton écran et où l'on ferait fonctionner ActivityPub dans ton environnement de travail. Je pense que ça peut fluidifier les retours, et éventuellement m'aider à comprendre le contexte si des erreurs surviennent.

Nous souhaitons terminer la mission sur ActivityPub mais nous ne pourrons pas garantir d'avoir de la disponibilité pour aider à la relecture d'ici quelques semaines.

Qu'en dis-tu ?

@Badatos
Copy link
Collaborator

Badatos commented Jun 12, 2025

Qu'en dis-tu ?

Je n'ai malheureusement plus de serveur de test Esup-Pod en V3 disponible pour permettre un test croisé de connexion AP, et les prochains mois sont plutôt chargés ici, entre les exams, la mise à jour des serveurs pendant la pause pédagogique, puis la rentrée...

Peut-être voir avec un autre membre de la communauté, @marchal-julien peut-être ?

@azmeuk
Copy link
Contributor

azmeuk commented Jun 17, 2025

Est-ce que cibler la v4 au lieu de la v3 aiderait pour une relecture plus rapide ?

@Badatos
Copy link
Collaborator

Badatos commented Jun 17, 2025

Est-ce que cibler la v4 au lieu de la v3 aiderait pour une relecture plus rapide ?

Le problème selon moi n'est pas au niveau de la relecture, mais des tests fonctionnels.
Il nous faut 2 établissements ayant installé Pod+AP dans des environnements de tests qui soient interrogeables l'un/l'autre, et ces conditions n'ont pas encore été remplies à l'heure actuelle.

@azmeuk
Copy link
Contributor

azmeuk commented Jun 18, 2025

Est-ce que si nous mettons en place un docker-compose qui lance deux instances de pod+AP ça permettrait de valider la PR, ou bien faut-il nécessairement un environnement de tests grandeur nature ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implémentation d'ActivityPub

6 participants