#1 Le 11/02/2012, à 17: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=¶ms=%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=¶ms='.$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, à 17:17)
Hors ligne
#2 Le 12/02/2012, à 17: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=¶ms='.$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
Dernière modification par Tomzz (Le 12/02/2012, à 19:31)
Hors ligne
#3 Le 13/02/2012, à 13: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=¶ms='.$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, à 13:55)
Hors ligne
#4 Le 25/02/2012, à 16: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, à 16: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, à 16: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