diff --git a/cli/daemon/daemon.pl b/cli/daemon/daemon.pl index 9faf846..b85d191 100755 --- a/cli/daemon/daemon.pl +++ b/cli/daemon/daemon.pl @@ -3,6 +3,8 @@ use strict; use warnings; use v5.14; +use MIME::Base64 qw(encode_base64); + # the website sending your current IP address our $checkip = "http://t.karchnu.fr/ip.php"; @@ -17,7 +19,7 @@ our $login = "idtest"; our $pass = "mdptest"; # Your entry to change -our $name = 'www'; +our $name = 'www'; # here, the entry is www.test.netlib.re our $type = 'A'; # could be AAAA # The CA certificate, to authenticate the website (should be provided) @@ -41,12 +43,15 @@ sub update { my $ip = get_ip; say "UPDATE :: domain $name.$domain => IP $ip, type $type"; + my $passb64 = encode_base64($pass); + chomp $passb64; my $cmd = "wget -O - "; $cmd .= - "https://$nddservice/domain/cliup/$login/$pass/$domain/$name/$type/$ip "; + "https://$nddservice/domain/cliup/$login/$passb64/$domain/$name/$type/$ip "; $cmd .= "--ca-certificate=$cacert"; - say `$cmd`; + say "CMD :: $cmd"; + `$cmd`; } update; diff --git a/lib/MyWeb/App.pm b/lib/MyWeb/App.pm index 18ccdc1..e45a6e7 100644 --- a/lib/MyWeb/App.pm +++ b/lib/MyWeb/App.pm @@ -35,6 +35,7 @@ sub what_is_next { } for(keys %{$$res{addsession}}) { + say "ajout de la session $_ : $$res{addsession}{$_}"; session $_ => $$res{addsession}{$_}; } @@ -200,6 +201,12 @@ prefix '/user' => sub { get_session( qw/login/ ); }; + post '/changepasswd' => sub { + what_is_next rt_user_changepasswd + get_session( qw/login/ ) + , get_param( qw/password/ ); + }; + get '/toggleadmin/:user' => sub { what_is_next rt_user_toggleadmin get_session( qw/login passwd/ ) diff --git a/lib/rt/domain.pm b/lib/rt/domain.pm index a8216e3..17adc71 100644 --- a/lib/rt/domain.pm +++ b/lib/rt/domain.pm @@ -9,6 +9,7 @@ use utf8; use Dancer ':syntax'; use Data::Dump qw( dump ); use Data::Validate::IP qw(is_ipv4 is_ipv6); +use MIME::Base64 qw(encode_base64 decode_base64); use Exporter 'import'; # what we want to export eventually @@ -66,7 +67,19 @@ sub rt_dom_cli_autoupdate { my $pass = encrypt($$param{pass}); my $app = app->new(get_cfg()); - my $user = $app->auth($$param{login}, $pass); + my $user; + + eval { + $user = $app->auth($$param{login}, $pass); + }; + + # if the mdp is in base64 + # useful for cli and http GET messages + if( $@ ) { + my $passb64 = decode_base64($$param{pass}); + $pass = encrypt($passb64); + $user = $app->auth($$param{login}, $pass); + } unless ( $user && ( $$user{admin} || $app->is_owning_domain($$user{login}, $$param{domain}))) { diff --git a/lib/rt/user.pm b/lib/rt/user.pm index 2483de3..c8c29d1 100644 --- a/lib/rt/user.pm +++ b/lib/rt/user.pm @@ -15,6 +15,7 @@ rt_user_login rt_user_del rt_user_toggleadmin rt_user_subscribe +rt_user_changepasswd rt_user_add rt_user_home /; @@ -25,6 +26,7 @@ our %EXPORT_TAGS = ( all => [qw/ rt_user_del rt_user_toggleadmin rt_user_subscribe + rt_user_changepasswd rt_user_add rt_user_home /] ); @@ -169,6 +171,37 @@ sub rt_user_subscribe { $res } +sub rt_user_changepasswd { + my ($session, $param, $request) = @_; + my $res; + + unless ( $$session{login} && $$param{password} ) { + $$res{deferred}{errmsg} = q{Identifiant ou mot de passe non renseigné.}; + $$res{route} = '/user/home'; + return $res; + } + + eval { + my $pass = encrypt($$param{password}); + my $app = app->new(get_cfg()); + + $app->update_passwd($$session{login}, $pass); + $app->disconnect(); + + $$res{deferred}{succmsg} = q{Changement de mot de passe effectué !}; + $$res{addsession}{passwd} = $pass; + $$res{route} = '/user/home'; + }; + + if($@) { + $$res{deferred}{errmsg} = q{Changement de mot de passe impossible !.}; + $$res{route} = '/user/subscribe'; + return $res; + } + + $res +} + sub rt_user_add { my ($session, $param, $request) = @_; my $res; @@ -245,7 +278,7 @@ sub rt_user_home { if( $@ ) { $$res{sessiondestroy} = 1; - $$res{deferred}{errmsg} = q{On a chié quelque-part.} . $@; + $$res{deferred}{errmsg} = q{Problème d'authentification.} . $@; $$res{route} = '/'; } diff --git a/views/home.tt b/views/home.tt index 9039a6f..8597f86 100644 --- a/views/home.tt +++ b/views/home.tt @@ -36,7 +36,6 @@

Ajouter un nouveau domaine :

-
<% IF domainName.defined %> @@ -51,10 +50,21 @@
+
+ +
+

Changer son mot de passe :

+ +
+ + +
+