Ajax to remove OIDC consent (#826)

This commit is contained in:
Xavier Guimard 2017-09-18 20:40:01 +00:00
parent 9910a0aa0f
commit c3b2dc878d
6 changed files with 102 additions and 23 deletions

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "llng-fastcgi-server 1"
.TH llng-fastcgi-server 1 "2017-09-05" "perl v5.26.0" "User Contributed Perl Documentation"
.TH llng-fastcgi-server 1 "2017-09-18" "perl v5.26.0" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l

View File

@ -6,6 +6,7 @@ our $VERSION = '2.0.0';
package Lemonldap::NG::Portal::Main;
use strict;
use Mouse;
has skinRules => ( is => 'rw' );
@ -468,9 +469,16 @@ sub mkOidcConsent {
. '<tbody><tr>';
# TODO: add JS to remove consent
$tmp .= "<tr><td>$_</td></tr>"
foreach ( split /,/, $session->{_oidcConnectedRP} );
$tmp .= '</tbody></table>';
if ( $session->{_oidcConnectedRP} ) {
$tmp .=
qq'<tr><td>$_ <a class="oidcConsent" partner="$_">remove</a></td></tr>'
foreach ( split /,/, $session->{_oidcConnectedRP} );
$tmp .= qq'</tbody></table><script type="application/init">
{
"oidcConsents":"$session->{_oidcConnectedRP}"
}
</script>';
}
return $tmp;
}

View File

@ -88,6 +88,17 @@ has exportedAttr => (
}
);
has ott => (
is => 'rw',
lazy => 1,
default => sub {
my $ott =
$_[0]->{p}->loadModule('Lemonldap::NG::Portal::Lib::OneTimeToken');
$ott->timeout( $_[0]->conf->{formTimeout} );
return $ott;
}
);
# INITIALIZATION
sub init {
@ -294,6 +305,11 @@ sub mysession {
{ result => $req->userData->{ $self->conf->{whatToTrace} } } );
}
if ( defined $req->param('gettoken') ) {
return $self->p->sendJSONresponse( $req,
{ token => $self->ott->createToken() } );
}
# Verify authorizationfor arg
elsif ( my $url = $req->param('authorizationfor') ) {
@ -338,14 +354,26 @@ sub updateMySession {
my ( $self, $req ) = @_;
my $res = 0;
my $mKeys = [];
if ( $req->param('sessionType') eq 'persistent' ) {
foreach my $key (qw(_appsListOrder)) {
if ( my $v = $req->param($key) ) {
$res++;
push @$mKeys, $key;
$self->p->updatePersistentSession( $req, { $key => $v } );
if ( my $token = $req->param('token') ) {
if ( $self->ott->getToken($token) ) {
if ( $req->param('sessionType') eq 'persistent' ) {
foreach my $key (qw(_appsListOrder _oidcConnectedRP)) {
my $v = $req->param($key);
if ( defined $v ) {
$res++;
push @$mKeys, $key;
$self->p->updatePersistentSession( $req,
{ $key => $v } );
}
}
}
}
else {
$self->logger->error('Update session request with invalid token');
}
}
else {
$self->logger->error('Update session request without token');
}
unless ($res) {
return $self->p->sendError( $req, 'Modification refused', 403 );

View File

@ -49,12 +49,28 @@ setSelector = "#appslist"
# function that writes the list order to session
setOrder = ->
setKey '_appsListOrder', $(setSelector).sortable("toArray").join()
removeOidcConsent = (partner) ->
r = new RegExp partner, 'g'
datas['oidcConsents'] = datas['oidcConsents'].replace(r,'').replace(',+',',')
setKey '_oidcConnectedRP', datas['oidcConsents']
$(this).text()
setKey = (key,val) ->
$.ajax
type: "PUT"
url: datas['scriptname'] + '/mysession/persistent'
data:
_appsListOrder: $(setSelector).sortable("toArray").join()
type: "GET"
url: datas['scriptname'] + '/mysession/?gettoken'
dataType: 'json'
success: (data) ->
d =
token: data.token
d[key] = val
$.ajax
type: "PUT"
url: datas['scriptname'] + '/mysession/persistent'
dataType: 'json'
data: d
# function that restores the list order from session
restoreOrder = ->
@ -250,3 +266,5 @@ $(document).ready ->
s = new Date($(this).attr("val")*1000)
$(this).text s.toLocaleString()
$('.oidcConsent').on 'click', () ->
removeOidcConsent $(this).attr 'partner'

View File

@ -5,7 +5,7 @@ LemonLDAP::NG Portal jQuery scripts
*/
(function() {
var datas, getCookie, getValues, isHiddenFormValueSet, ping, restoreOrder, setCookie, setOrder, setSelector, translate, translatePage, translationFields,
var datas, getCookie, getValues, isHiddenFormValueSet, ping, removeOidcConsent, restoreOrder, setCookie, setKey, setOrder, setSelector, translate, translatePage, translationFields,
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
translationFields = {};
@ -71,13 +71,35 @@ LemonLDAP::NG Portal jQuery scripts
setSelector = "#appslist";
setOrder = function() {
return setKey('_appsListOrder', $(setSelector).sortable("toArray").join());
};
removeOidcConsent = function(partner) {
var r;
r = new RegExp(partner, 'g');
datas['oidcConsents'] = datas['oidcConsents'].replace(r, '').replace(',+', ',');
setKey('_oidcConnectedRP', datas['oidcConsents']);
return $(this).text();
};
setKey = function(key, val) {
return $.ajax({
type: "PUT",
url: datas['scriptname'] + '/mysession/persistent',
data: {
_appsListOrder: $(setSelector).sortable("toArray").join()
},
dataType: 'json'
type: "GET",
url: datas['scriptname'] + '/mysession/?gettoken',
dataType: 'json',
success: function(data) {
var d;
d = {
token: data.token
};
d[key] = val;
return $.ajax({
type: "PUT",
url: datas['scriptname'] + '/mysession/persistent',
dataType: 'json',
data: d
});
}
});
};
@ -261,11 +283,14 @@ LemonLDAP::NG Portal jQuery scripts
if (datas['pingInterval'] && datas['pingInterval'] > 0) {
window.setTimeout(ping, datas['pingInterval']);
}
return $(".localeDate").each(function() {
$(".localeDate").each(function() {
var s;
s = new Date($(this).attr("val") * 1000);
return $(this).text(s.toLocaleString());
});
return $('.oidcConsent').on('click', function() {
return removeOidcConsent($(this).attr('partner'));
});
});
}).call(this);

File diff suppressed because one or more lines are too long