##############################
Réception d'un fichier via R66
##############################

.. _documentation Waarp R66: https://doc.waarp.org/waarp-r66/latest/fr/
.. _page de téléchargements: https://dl.waarp.org/

Nous allons mettre en place un second transfert: la réception d'un fichier 
sur Waarp Transfer depuis un serveur R66.
Si vous avez suivi la mise en place du transfert d'envoie alors vous pouvez
aller directement au paramétrage de la règle.

Login et mot de passe
=====================

L'authentification R66 étant bidirectionnelle (le client s'authentifie au
serveur et le serveur s'authentifie au client), le client utilisera le login
``r66_client`` et le mot de passe ``client_password``, le serveur utilisera 
le login ``r66_server`` et le mot de passe ``server_password``.

Configuration client
====================

Pour pouvoir envoyer des fichiers, nous allons devoir ajouter un partenaire R66
à Waarp Transfer, un utilisateur associé à ce partenaire, et une règle de transfert en réception.

Création d'un partenaire R66
----------------------------

Commençons par ajouter un partenaire R66 :

.. code-block:: shell-session

   $ waarp-transfer partner add --name "r66_server" --address "localhost:6666" --config "serverLogin:r66_server" --config "serverPassword:server_password" --protocol "r66"
   The partner "r66_server" was successfully added.

Pour créer un partenaire, nous devons préciser son nom, ainsi que des
informations additionnelles pour contacter le serveur (ici l'adresse de connection,
le port, ainsi que les informations d'authentification du serveur).

.. seealso::

   Plus d'options de configuration sont disponibles pour les partenaires R66.

   Le détail des options est disponible :any:`ici <proto-config-r66>`

(Optionnel) Activation de TLS
-----------------------------

Optionnellement, si vous souhaitez sécuriser vos transfert vers ce partenaire
avec TLS, il faut altérer la configuration du partenaire en activant l'option
``isTLS`` ainsi :

.. code-block:: shell-session

   $ waarp-transfer partner update "r66_server" --config "serverLogin:r66_server" --config "serverPassword:server_password" --config "isTLS:true"
   The partner "r66_server" was successfully updated.

.. note:: Il est nécessaire de re-entrer la configuration en entier pour que les
   valeurs de ``serverLogin`` et ``serverPassword`` ne soient pas perdues.

Attention, Waarp Transfer refuse les certificats TLS auto-signés. Si votre partenaire
R66 utilise un certificat auto-signé, il faudra l'ajouter à la liste des certificats
de confiance du partenaire comme ceci :

.. code-block:: shell-session

   $ waarp-transfer partner credential "r66_server" add --name "r66_server_cert" --type "trusted_tls_certificate" --value "r66.pem"
   The "r66_server_cert" credential was successfully added.

Il vous faudra également activer TLS dans la configuration du serveur.

Création d'un utilisateur
-------------------------

Pour pouvoir s'authentifier auprès du partenaire, nous devons maintenant créer un
utilisateur. Cela se fait en créant un "compte distant" dans Waarp Transfer. Cet
utilisateur aura ``r66_client`` comme login et ``client_password`` comme mot de
passe:

.. code-block:: shell-session

   $ waarp-transfer account remote "r66_server" add --login "r66_client" --password "client_password"
   The account "r66_client" was successfully added.

L'utilisateur est maintenant créé. Pour pouvoir faire un transfert, nous devons
maintenant créer une :term:`règle` de transfert

Ajout d'une règle
-----------------

Enfin créons la règle ``pull`` en mode ``receive`` pour pouvoir envoyer des fichiers 

Voici donc la commande pour créer la règle :

.. code-block:: shell-session

   $ waarp-transfer rule add --name "pull" --direction "receive"
   The rule "pull" was successfully added.


Configuration du serveur
========================

Dans cette partie nous allons paramétrer le serveur r66 sur la même instance de
Waarp Transfer que celle portant le client. Cependant vous êtes libres d'utiliser
une autre instance de Waarp Transfer ou une autre solution utilisant le protocol
R66.

.. todo::
   liens vers Waarp R66

Paramétrage du serveur
----------------------

Créons d'abord le serveur et démarrons ce dernier.
Les informations doivent correspondre à celle définies lors de la création du
partenaire pendant la configuration du client.

.. code-block:: shell-session

   $ waarp-transfer server add --name "r66" --address "localhost:6666" --config "serverLogin:r66_server" --config "serverPassword:server_password"
     The server "r66" was successfully created.
   $ waarp-transfer server start "r66"
     The server "r66" was successfully started.

Optionnellement, si vous souhaitez sécuriser vos transfert vers ce partenaire
avec TLS, il faut à la place démarrer le serveur ``r66-tls`` et lui ajouter des
certificats

.. code-block:: shell-session
   
   $ waarp-transfer server add --name "r66-tls" --address "localhost:6667" --config "serverLogin:r66_server" --config "serverPassword:server_password"
   The server "r66-tls" was successfully created.
   $ waarp-transfer server credential "r66-tls" add --name "r66_tls_cert" --type "tls_certificate" --value "r66.crt" --secondary-value "r66.key"
   The "r66_tls_cert" credential was successfully added.
   $ waarp-transfer server restart "r66-tls"
   The server "r66-tls" was successfully restarted.


Ajout de l'utilisateur
----------------------

Nous ajoutons ensuite les informations d'authentification de l'utilisateur afin
de l'autoriser à ce connecter:

.. code-block:: shell-session

   $ waarp-transfer account local "r66" add --login "r66_client" --password "client_password"
   The account "r66_client" was successfully added.

Attention si vous utilisez le serveur r66-tls de Waarp Transfer pensez à 
ajouter l'utilisateur au serveur ``r66-tls`` plutôt que ``r66``:

.. code-block:: shell-session

   $ waarp-transfer account local "r66-tls" add --login "r66_client" --password "client_password"
   The account "r66_client" was successfully added.

Ajout de la règle de transfert
------------------------------

Enfin créons la règle ``pull`` en mode ``send`` pour pouvoir envoyer des fichiers 
quand le client essaie de nous en demander avec cette règle.

.. code-block:: shell-session

    $ waarp-transfer rule add --name "pull" --direction "send"
     The rule "pull" was successfully added.

Le sens des règles est toujours à prendre du point de vue de Waarp Transfer (si on demande un fichier à un serveur, celui ci l'*envoie*).
Attention, le nom de la règle doit être identique à celui de la règle définie
sur le client (``pull`` dans notre exemple).

Lancer le transfert
===================

Maintenant que nous avons un client et un serveur configurés, nous
pouvons effectuer un transfert. Créons d'abord un fichier à transférer sur le serveur, puis
récupérerons le avec Waarp Transfer :

.. code-block:: shell-session

   # echo "hello world\!" > /var/lib/waarp-transfer/out/a-recevoir.txt

   $ waarp-transfer transfer add --file "a-recevoir.txt" --way "receive" --partner "r66_server" --login "r66_client" --rule "pull"
   The transfer of file a-recevoir.txt was successfully added.

Après avoir établi une connexion avec Waarp Transfer, nous avons récupérer un fichier
depuis le dossier ``out`` de l'agent ``r66_server`` avec la règle ``pull``.

Nous pouvons vérifier que le transfert s'est bien passé dans l'historique des
transferts :

.. code-block:: shell-session

   $ waarp-transfer history list
   History:
   [...]
   ● Transfer 1 (receive as client) [DONE]
    Remote ID:       1862073248406044672
    Rule:            pull
    Protocol:        r66-tls
    Requester:       r66_client
    Requested:       r66_server
    Local filepath:  /var/lib/waarp-transfer/in/a-recevoir.txt
    Remote filepath: a-recevoir.txt
    File size:       13
    Block size:      0
    Block check:     false
    Hash algo:
    Start date:      2024-11-28T10:57:12.72556+01:00
    Step:            StepNone
    Progress:        13
    Task number:     0

Le fichier disponible est maintenant dans le dossier ``in`` de Waarp Transfer.
Comme nous n'avons pas spécifié de dossier spécifique dans la règle, c'est le
dossier par défaut de l'instance qui est utilisé :

.. code-block:: shell-session

 ls -l /var/lib/waarp-transfer/in/a-recevoir.txt
 -rw------- 1 waarp waarp 13 Nov 27 19:01 /var/lib/waarp-transfer/in/a-recevoir.txt


