WIP - Append/remove favorite apps (#1689)

This commit is contained in:
Christophe Maudoux 2019-04-24 23:28:55 +02:00
parent 4adc002327
commit 1cf78550b4
1 changed files with 73 additions and 16 deletions

View File

@ -30,18 +30,18 @@ sub init {
sub register {
my ( $self, $req ) = @_;
my $user = $req->userData->{ $self->conf->{whatToTrace} };
my $app = $req->param('app');
my $logo = $req->param('logo') || '';
my $desc = $req->param('desc') || '';
my $title = $req->param('title') || '';
# TODO -> test app
my ( $app, $result );
unless ( $app = $req->param('app') ) {
return $self->p->sendError( $req, 'Missing App. URI', 400 );
}
$self->logger->debug("Favorite application received : $app");
my $logo = $req->param('logo') || '';
my $desc = $req->param('desc') || '';
my $title = $req->param('title') || '';
# Read existing favorite Apps
$self->logger->debug("Looking for $user favorite Apps...");
my $_favApps;
$self->logger->debug("*****" . Data::Dumper::Dumper($req));
if ( $req->userData->{_favApps} ) {
$_favApps = eval {
from_json( $req->userData->{_favApps}, { allow_nonref => 1 } );
@ -56,18 +56,41 @@ sub register {
$_favApps = [];
}
push @$_favApps, { app => $app, logo => $logo, desc => $desc, title => $title };
$self->p->updatePersistentSession( $req,
{ _favApps => to_json($_favApps) } );
$self->userLogger->notice("Favorite apps registration of $app succeeds for $user");
# Append or remove favorite application
my $nbrApps = @$_favApps;
$self->logger->debug("$nbrApps favorite Apps found");
if ( $self->_isFavApp( $_favApps, $app ) ) {
$_favApps = $self->_removeFavApp( $_favApps, $app );
$self->p->updatePersistentSession( $req,
{ _favApps => to_json($_favApps) } );
$result = '{"result":0}';
$self->userLogger->notice(
"Favorite apps deletion of $app succeeds for $user");
}
else {
if ( $nbrApps < $self->conf->{favAppsMaxNumber} ) {
$_favApps =
$self->_appendFavApp( $_favApps, $app, $logo, $desc, $title );
$self->p->updatePersistentSession( $req,
{ _favApps => to_json($_favApps) } );
$result = '{"result":1}';
$self->userLogger->notice(
"Favorite apps registration of $app succeeds for $user");
}
else {
$result = '{"error":1}';
$self->userLogger->notice(
"Max number of favorite apps reached for $user");
}
}
return [
200,
[
'Content-Type' => 'application/json',
'Content-Length' => 12,
'Content-Length' => length($result),
],
['{"result":1}']
[$result]
];
}
@ -83,7 +106,7 @@ sub read {
from_json( $req->sessionInfo->{_favapps}, { allow_nonref => 1 } );
};
if ($@) {
$self->logger->error("Corrupted session (_2fDevices): $@");
$self->logger->error("Corrupted session (_favApps): $@");
return $self->p->sendError( $req, "Corrupted session", 500 );
}
}
@ -94,10 +117,11 @@ sub read {
# Serialize data
my $data = to_json( {
result => 1, apps => $_favapps
result => 1,
apps => $_favapps
}
);
$self->logger->debug(scalar @$_favapps . " Apps found for $user");
$self->logger->debug( scalar @$_favapps . " Apps found for $user" );
return [
200,
@ -109,4 +133,37 @@ sub read {
];
}
sub _isFavApp {
my ( $self, $_favApps, $app ) = @_;
my $test = 0;
foreach (@$_favApps) {
if ( $_->{app} eq $app ) {
$test = 1;
last;
}
}
$self->logger->debug("App. already registered? $test");
return $test;
}
sub _appendFavApp {
my ( $self, $_favApps, $app, $logo, $desc, $title ) = @_;
push @$_favApps,
{ app => $app, logo => $logo, desc => $desc, title => $title };
$self->logger->debug("App. $app appended");
return $_favApps;
}
sub _removeFavApp {
my ( $self, $_favApps, $app ) = @_;
my $keep = [];
while (@$_favApps) {
my $element = shift @$_favApps;
$self->logger->debug("Looking for favorite App to remove...");
push @$keep, $element unless ( $element->{app} eq $app );
}
$self->logger->debug("App. $app removed");
return $keep;
}
1;