Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/02/2012, à 18:18

Tomzz

[script] OVH hubiC, 25go stockage cloud gratuit, script pour Ubuntu.

Bonjour,
Je vous fais par d'un script découvert sur le web (merci a son auteur) qui permet enfin de pouvoir se connecter a son compte hubiC OVH en WebDAV.

Vous trouverez http://www.protocol-hacking.org/post/2012/01/29/Hubic,-maintenant-vraiment-ubiquitous

Le script est en Perl et sert juste à récupérer vos ID de connexion.

Je rappelle ce script n'est pas de moi mais de http://www.protocol-hacking.org/ de plus je ne connais quasiment rien à Perl alors à vous de voir...

Il faut installer le paquet davfs2

#!/usr/bin/perl
#
# $Id: hubic.pl 6 2012-02-08 17:46:06Z gomor $
#
package Hubic;
use strict;
use warnings;

use LWP::UserAgent;

sub new {
   my $self  = shift;
   my $class = ref($self) || $self;

   my %h     = (
      host => 'ws.ovh.com',
      @_,
   );

   my $ua = LWP::UserAgent->new;
   $ua->agent("hubiC/1.0.9 (Windows NT 6.1; fr_FR)");
   $h{_ua} = $ua;

   return bless(\%h, $class);
}

sub getWebdavInfo {
   my $self = shift;

   my $id                 = $self->_postNasLogin;
   my $url                = $self->_postGetNas($id);
   my ($login, $password) = $self->_postGetCredentials($id);

   return ($url, $login, $password);
}

sub _postNasLogin {
   my $self = shift;

   my $ua       = $self->{_ua};
   my $host     = $self->{host};
   my $login    = $self->{login};
   my $password = $self->{password};

   my $params = '{"email":"'.$login.'","password":"'.$password.'"}';

   # Encode characters if URI::Escape is available
   eval("use URI::Escape;");
   if (!$@) {
      print "[DEBUG] URI::Escape available\n" if $self->{debug};
      $params = uri_escape($params);
   }

   # 'POST /cloudnas/r0/ws.dispatcher/nasLogin HTTP/1.1'."\r\n".
   # 'Content-Type: application/x-www-form-urlencoded'."\r\n".
   # 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n".
   # 'Content-Length: 126'."\r\n".
   # 'Connection: Keep-Alive'."\r\n".
   # 'Accept-Encoding: gzip'."\r\n".
   # 'Accept-Language: fr-FR,en,*'."\r\n".
   # 'Host: ws.ovh.com'."\r\n".
   # ''."\r\n".
   # 'session=&params=%7B%20%22email%22%20%3A%20%22<login>%22%2C%20%22password%22%20%3A%20%22<password>%22%20%7D'."\r\n".
   # "\r\n";
   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/nasLogin",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content('session=&params='.$params);

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postNasLogin() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $id = $reply) =~ s/^.*"\s*id\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got ID [$id]\n" if $self->{debug};

   return $id;
}

sub _postGetNas {
   my $self = shift;
   my ($id) = @_;

   my $ua   = $self->{_ua};
   my $host = $self->{host};

   # 'POST /cloudnas/r0/ws.dispatcher/getNas HTTP/1.1'."\r\n".
   # 'Content-Type: application/x-www-form-urlencoded'."\r\n".
   # 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n".
   # 'Content-Length: 54'."\r\n".
   # 'Connection: Keep-Alive'."\r\n".
   # 'Accept-Encoding:gzip'."\r\n".
   # 'Accept-Language: fr-FR,en,*'."\r\n".
   # 'Host: ws.ovh.com'."\r\n".
   # ''."\r\n".
   # 'session=<id>'."\r\n".
   # "\r\n";
   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/getNas",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content("session=$id");

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postGetNas() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $url = $reply) =~ s/^.*"\s*url\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got URL [$url]\n" if $self->{debug};

   return $url;
}

sub _postGetCredentials {
   my $self = shift;
   my ($id) = @_;

   my $ua   = $self->{_ua};
   my $host = $self->{host};

   # 'POST /cloudnas/r0/ws.dispatcher/getCredentials HTTP/1.1'."\r\n".
   # 'Content-Type: application/x-www-form-urlencoded'."\r\n".
   # 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n".
   # 'Content-Length: 54'."\r\n".
   # 'Connection: Keep-Alive'."\r\n".
   # 'Accept-Encoding: gzip'."\r\n".
   # 'Accept-Language: fr-FR,en,*'."\r\n".
   # 'Host: ws.ovh.com'."\r\n".
   # ''."\r\n".
   # 'session=<id>'."\r\n".
   # "\r\n";
   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/getCredentials",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content("session=$id");

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postGetCredentials() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $username = $reply) =~ s/^.*"\s*username\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got username [$username]\n" if $self->{debug};

   (my $secret = $reply) =~ s/^.*"\s*secret\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got secret [$secret]\n" if $self->{debug};

   return ($username, $secret);
}

1;

package main;

use Getopt::Std;
my %opts;
getopts('l:dh', \%opts);

if (!$opts{l} || $opts{h}) {
   die("Usage: $0 -l login [-d] [-h]\n");
}

eval("use Term::ReadKey;");
my $password = '';
print "Password:";
if (!$@) {
   print "[DEBUG] Term::ReadKey available\n" if $opts{d};
   ReadMode('noecho');
}
$password = <>;
chomp($password);
print "\n";

my $hubic = Hubic->new(
   login    => $opts{l},
   password => $password,
   debug    => $opts{d},
);
my ($hubicUrl, $hubicLogin, $hubicPassword) = $hubic->getWebdavInfo;

print "URL:      $hubicUrl\n";
print "Login:    $hubicLogin\n";
print "Password: $hubicPassword\n\n";
print "mount -t davfs $hubicUrl /mnt\n";

exit(0);

Dernière modification par Tomzz (Le 12/02/2012, à 18:17)

Hors ligne

#2 Le 12/02/2012, à 18:11

Tomzz

Re : [script] OVH hubiC, 25go stockage cloud gratuit, script pour Ubuntu.

Bonjour,
J'essai de bidouiller ce script pour en rendre l'utilisation plus automatisée.
(a lancer avec la commande ./hubic1.pl -l email-inscription-hubiC
J'en suis là:

#!/usr/bin/perl
#
# $Id: hubic.pl 6 2012-02-08 17:46:06Z gomor $
#
package Hubic;
use strict;
use warnings;

use LWP::UserAgent;

## renseignez votre mot de passe d'acces a Hubic
my $password = 'secret';

sub new {
   my $self  = shift;
   my $class = ref($self) || $self;

   my %h     = (
      host => 'ws.ovh.com',
      @_,
   );

   my $ua = LWP::UserAgent->new;
   $ua->agent("hubiC/1.0.9 (Windows NT 6.1; fr_FR)");
   $h{_ua} = $ua;

   return bless(\%h, $class);
}

sub getWebdavInfo {
   my $self = shift;

   my $id                 = $self->_postNasLogin;
   my $url                = $self->_postGetNas($id);
   my ($login, $password) = $self->_postGetCredentials($id);

   return ($url, $login, $password);
}

sub _postNasLogin {
   my $self = shift;

   my $ua       = $self->{_ua};
   my $host     = $self->{host};
   my $login    = $self->{login};
   my $password = $self->{password};

   my $params = '{"email":"'.$login.'","password":"'.$password.'"}';

   # Encode characters if URI::Escape is available
   eval("use URI::Escape;");
   if (!$@) {
      print "[DEBUG] URI::Escape available\n" if $self->{debug};
      $params = uri_escape($params);
   }

   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/nasLogin",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content('session=&params='.$params);

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postNasLogin() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $id = $reply) =~ s/^.*"\s*id\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got ID [$id]\n" if $self->{debug};

   return $id;
}

sub _postGetNas {
   my $self = shift;
   my ($id) = @_;

   my $ua   = $self->{_ua};
   my $host = $self->{host};

   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/getNas",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content("session=$id");

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postGetNas() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $url = $reply) =~ s/^.*"\s*url\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got URL [$url]\n" if $self->{debug};

   return $url;
}

sub _postGetCredentials {
   my $self = shift;
   my ($id) = @_;

   my $ua   = $self->{_ua};
   my $host = $self->{host};

   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/getCredentials",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content("session=$id");

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postGetCredentials() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $username = $reply) =~ s/^.*"\s*username\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got username [$username]\n" if $self->{debug};

   (my $secret = $reply) =~ s/^.*"\s*secret\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got secret [$secret]\n" if $self->{debug};

   return ($username, $secret);
}

1;

package main;

use Getopt::Std;
my %opts;
getopts('l:dh', \%opts);

if (!$opts{l} || $opts{h}) {
   die("Usage: $0 -l login [-d] [-h]\n");
}

my $hubic = Hubic->new(
   login    => $opts{l},
   password => $password,
   debug    => $opts{d},
);
my ($hubicUrl, $hubicLogin, $hubicPassword) = $hubic->getWebdavInfo;

print "URL:      $hubicUrl\n";
print "Login:    $hubicLogin\n";
print "Password: $hubicPassword\n\n";
system "sudo mount -t davfs $hubicUrl /media/hubic -o username=\"$hubicLogin\",uid=1000\n";

exit(0);

Le script exécute le montage directement maintenant, mais je ne parviens pas a indiquer le mot de passe a mount dans cette ligne:

sudo mount -t davfs $hubicUrl /media/hubic -o username="$hubicLogin",uid=1000

J'ai essaye avec pass= et password= sans succès
Il semble que l'usage de mount avec davfs2 diffère de mount tout seul, le man pour mount.davfs me propose ceci qui pourrait etre une solution:

conf=absolute path
                     An  alternative  user  configuration file. This option is
                     intended for cases where the default  user  configuration
                     file in the users home directory can not be used.
                     Default: ~/.davfs2/davfs2.conf

Mais je n'ai aucune idée de quoi mettre dans ce fichier davfs2.conf


Quelqu'un saurai comment ajouter le password à cette commande:

sudo mount -t davfs $hubicUrl /media/hubic -o username="$hubicLogin",uid=1000

[edit] ce dit un petit tour dans la doc de davfs2 devrai pouvoir m'aider roll

Dernière modification par Tomzz (Le 12/02/2012, à 20:31)

Hors ligne

#3 Le 13/02/2012, à 14:53

Tomzz

Re : [script] OVH hubiC, 25go stockage cloud gratuit, script pour Ubuntu.

Bonjour,
J'approche...

#!/usr/bin/perl
#
# $Id: hubic.pl 6 2012-02-08 17:46:06Z gomor $
#
package Hubic;
use strict;
use warnings;

use LWP::UserAgent;

my $password = 'secret';

sub new {
   my $self  = shift;
   my $class = ref($self) || $self;

   my %h     = (
      host => 'ws.ovh.com',
      @_,
   );

   my $ua = LWP::UserAgent->new;
   $ua->agent("hubiC/1.0.9 (Windows NT 6.1; fr_FR)");
   $h{_ua} = $ua;

   return bless(\%h, $class);
}

sub getWebdavInfo {
   my $self = shift;

   my $id                 = $self->_postNasLogin;
   my $url                = $self->_postGetNas($id);
   my ($login, $password) = $self->_postGetCredentials($id);

   return ($url, $login, $password);
}

sub _postNasLogin {
   my $self = shift;

   my $ua       = $self->{_ua};
   my $host     = $self->{host};
   my $login    = $self->{login};
   my $password = $self->{password};

   my $params = '{"email":"'.$login.'","password":"'.$password.'"}';

   # Encode characters if URI::Escape is available
   eval("use URI::Escape;");
   if (!$@) {
      print "[DEBUG] URI::Escape available\n" if $self->{debug};
      $params = uri_escape($params);
   }

   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/nasLogin",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content('session=&params='.$params);

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postNasLogin() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $id = $reply) =~ s/^.*"\s*id\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got ID [$id]\n" if $self->{debug};

   return $id;
}

sub _postGetNas {
   my $self = shift;
   my ($id) = @_;

   my $ua   = $self->{_ua};
   my $host = $self->{host};

   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/getNas",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content("session=$id");

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postGetNas() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $url = $reply) =~ s/^.*"\s*url\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got URL [$url]\n" if $self->{debug};

   return $url;
}

sub _postGetCredentials {
   my $self = shift;
   my ($id) = @_;

   my $ua   = $self->{_ua};
   my $host = $self->{host};

   my $req = HTTP::Request->new(
      POST => "https://$host/cloudnas/r0/ws.dispatcher/getCredentials",
   );
   $req->content_type('application/x-www-form-urlencoded');
   $req->content("session=$id");

   my $res = $ua->request($req);
   if (! $res->is_success) {
      die("FATAL: postGetCredentials() failed:\n[", $res->content, "]\n");
   }

   my $reply = $res->content;
   print "[DEBUG] $reply\n" if $self->{debug};

   (my $username = $reply) =~ s/^.*"\s*username\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got username [$username]\n" if $self->{debug};

   (my $secret = $reply) =~ s/^.*"\s*secret\s*?"\s*?:\s*?"\s*(.*?)\s*".*$/$1/;
   print "[DEBUG] Got secret [$secret]\n" if $self->{debug};

   return ($username, $secret);
}

1;

package main;

use Getopt::Std;
my %opts;
getopts('l:dh', \%opts);

if (!$opts{l} || $opts{h}) {
   die("Usage: $0 -l login [-d] [-h]\n");
}

my $hubic = Hubic->new(
   login    => $opts{l},
   password => $password,
   debug    => $opts{d},
);
my ($hubicUrl, $hubicLogin, $hubicPassword) = $hubic->getWebdavInfo;

print "URL:      $hubicUrl\n";
print "Login:    $hubicLogin\n";
print "Password: $hubicPassword\n\n";
system "sudo rm -f /home/tom/.davfs2/secrets";
system "echo \"/home/tom/hubiC $hubicLogin    $hubicPassword\" > /home/tom/.davfs2/secrets";
system "sudo chown root:root /home/tom/.davfs2/secrets";
system "sudo chmod 600 /home/tom/.davfs2/secrets"; 
system "sudo mount.davfs $hubicUrl ~/hubiC -o conf=\"/home/tom/.davfs2/davfs2.conf\",uid=1000\n";

exit(0);

J'ai simplement suivis la doc de davfs2
Pour résumer, il faut faire cette manip:

mkdir ~/.davfs2
cp /etc/davfs2/davfs2.conf ~/.davfs2

puis modifier la ligne 35 de ~/.davfs2/davfs2.conf en:

secrets         /home/tom/.davfs2/secrets # user config file only

Bien sur en adaptant le chemin.
Toujours a lancer sous la forme ./hubic1.pl -l email-inscription-hubiC si le nom du script est hubic1.pl évidemment.

Il me reste deux soucis:
Est-il possible d’intégrer une portion de bash dans le script perl sans passer par la syntaxe system "commande bash" à chaque lignes ?

Le montage en userspace tel que décrit dans la doc serai préférable mais il me demande une modif du fstab, ce que je ne souhaite pas.
Y a t'il une autre solution ?

Dernière modification par Tomzz (Le 13/02/2012, à 14:55)

Hors ligne

#4 Le 25/02/2012, à 17:27

Tomzz

Re : [script] OVH hubiC, 25go stockage cloud gratuit, script pour Ubuntu.

Bonjour,
Pour ceux que ça intéresse, j'ai abandonné l'idee pour le moment et je vais attendre le client officiel.
Parce que même si le script marche le montage est très instable et me fais planter nautilus.
La copie en cli avec cp accumule les erreurs, en un mot c'est inutilisable.

Je retenterai plus tard quand le service aura mûri.

Hors ligne

#5 Le 25/02/2012, à 17:35

ftarkin

Re : [script] OVH hubiC, 25go stockage cloud gratuit, script pour Ubuntu.

Tu as regardé ce sujet ?


Ordi perso monté en Core i3, 4 Go RAM Voyager 12.04 64
Dell Latitude E6210 (Core i3, 6 Go DDR3) Voyager 12.04 64
HP Z800 (biproc Xeon QuadCore 18 Go DDR3) Voyager 12.04 64

Hors ligne

#6 Le 25/02/2012, à 17:56

Tomzz

Re : [script] OVH hubiC, 25go stockage cloud gratuit, script pour Ubuntu.

Oui, je le connaissais mais je viens juste de lire la remarque a propos de CP, je ferai quelques tests avec rsync.

Hors ligne