Ajax to remove OIDC consent (#826)
This commit is contained in:
parent
9910a0aa0f
commit
c3b2dc878d
|
@ -129,7 +129,7 @@
|
||||||
.\" ========================================================================
|
.\" ========================================================================
|
||||||
.\"
|
.\"
|
||||||
.IX Title "llng-fastcgi-server 1"
|
.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
|
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
||||||
.\" way too many mistakes in technical documents.
|
.\" way too many mistakes in technical documents.
|
||||||
.if n .ad l
|
.if n .ad l
|
||||||
|
|
|
@ -6,6 +6,7 @@ our $VERSION = '2.0.0';
|
||||||
|
|
||||||
package Lemonldap::NG::Portal::Main;
|
package Lemonldap::NG::Portal::Main;
|
||||||
use strict;
|
use strict;
|
||||||
|
use Mouse;
|
||||||
|
|
||||||
has skinRules => ( is => 'rw' );
|
has skinRules => ( is => 'rw' );
|
||||||
|
|
||||||
|
@ -468,9 +469,16 @@ sub mkOidcConsent {
|
||||||
. '<tbody><tr>';
|
. '<tbody><tr>';
|
||||||
|
|
||||||
# TODO: add JS to remove consent
|
# TODO: add JS to remove consent
|
||||||
$tmp .= "<tr><td>$_</td></tr>"
|
if ( $session->{_oidcConnectedRP} ) {
|
||||||
|
$tmp .=
|
||||||
|
qq'<tr><td>$_ <a class="oidcConsent" partner="$_">remove</a></td></tr>'
|
||||||
foreach ( split /,/, $session->{_oidcConnectedRP} );
|
foreach ( split /,/, $session->{_oidcConnectedRP} );
|
||||||
$tmp .= '</tbody></table>';
|
$tmp .= qq'</tbody></table><script type="application/init">
|
||||||
|
{
|
||||||
|
"oidcConsents":"$session->{_oidcConnectedRP}"
|
||||||
|
}
|
||||||
|
</script>';
|
||||||
|
}
|
||||||
return $tmp;
|
return $tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
# INITIALIZATION
|
||||||
|
|
||||||
sub init {
|
sub init {
|
||||||
|
@ -294,6 +305,11 @@ sub mysession {
|
||||||
{ result => $req->userData->{ $self->conf->{whatToTrace} } } );
|
{ result => $req->userData->{ $self->conf->{whatToTrace} } } );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( defined $req->param('gettoken') ) {
|
||||||
|
return $self->p->sendJSONresponse( $req,
|
||||||
|
{ token => $self->ott->createToken() } );
|
||||||
|
}
|
||||||
|
|
||||||
# Verify authorizationfor arg
|
# Verify authorizationfor arg
|
||||||
elsif ( my $url = $req->param('authorizationfor') ) {
|
elsif ( my $url = $req->param('authorizationfor') ) {
|
||||||
|
|
||||||
|
@ -338,15 +354,27 @@ sub updateMySession {
|
||||||
my ( $self, $req ) = @_;
|
my ( $self, $req ) = @_;
|
||||||
my $res = 0;
|
my $res = 0;
|
||||||
my $mKeys = [];
|
my $mKeys = [];
|
||||||
|
if ( my $token = $req->param('token') ) {
|
||||||
|
if ( $self->ott->getToken($token) ) {
|
||||||
if ( $req->param('sessionType') eq 'persistent' ) {
|
if ( $req->param('sessionType') eq 'persistent' ) {
|
||||||
foreach my $key (qw(_appsListOrder)) {
|
foreach my $key (qw(_appsListOrder _oidcConnectedRP)) {
|
||||||
if ( my $v = $req->param($key) ) {
|
my $v = $req->param($key);
|
||||||
|
if ( defined $v ) {
|
||||||
$res++;
|
$res++;
|
||||||
push @$mKeys, $key;
|
push @$mKeys, $key;
|
||||||
$self->p->updatePersistentSession( $req, { $key => $v } );
|
$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) {
|
unless ($res) {
|
||||||
return $self->p->sendError( $req, 'Modification refused', 403 );
|
return $self->p->sendError( $req, 'Modification refused', 403 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,12 +49,28 @@ setSelector = "#appslist"
|
||||||
|
|
||||||
# function that writes the list order to session
|
# function that writes the list order to session
|
||||||
setOrder = ->
|
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: "GET"
|
||||||
|
url: datas['scriptname'] + '/mysession/?gettoken'
|
||||||
|
dataType: 'json'
|
||||||
|
success: (data) ->
|
||||||
|
d =
|
||||||
|
token: data.token
|
||||||
|
d[key] = val
|
||||||
$.ajax
|
$.ajax
|
||||||
type: "PUT"
|
type: "PUT"
|
||||||
url: datas['scriptname'] + '/mysession/persistent'
|
url: datas['scriptname'] + '/mysession/persistent'
|
||||||
data:
|
|
||||||
_appsListOrder: $(setSelector).sortable("toArray").join()
|
|
||||||
dataType: 'json'
|
dataType: 'json'
|
||||||
|
data: d
|
||||||
|
|
||||||
# function that restores the list order from session
|
# function that restores the list order from session
|
||||||
restoreOrder = ->
|
restoreOrder = ->
|
||||||
|
@ -250,3 +266,5 @@ $(document).ready ->
|
||||||
s = new Date($(this).attr("val")*1000)
|
s = new Date($(this).attr("val")*1000)
|
||||||
$(this).text s.toLocaleString()
|
$(this).text s.toLocaleString()
|
||||||
|
|
||||||
|
$('.oidcConsent').on 'click', () ->
|
||||||
|
removeOidcConsent $(this).attr 'partner'
|
||||||
|
|
|
@ -5,7 +5,7 @@ LemonLDAP::NG Portal jQuery scripts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function() {
|
(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; };
|
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 = {};
|
translationFields = {};
|
||||||
|
@ -71,13 +71,35 @@ LemonLDAP::NG Portal jQuery scripts
|
||||||
setSelector = "#appslist";
|
setSelector = "#appslist";
|
||||||
|
|
||||||
setOrder = function() {
|
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: "GET",
|
||||||
|
url: datas['scriptname'] + '/mysession/?gettoken',
|
||||||
|
dataType: 'json',
|
||||||
|
success: function(data) {
|
||||||
|
var d;
|
||||||
|
d = {
|
||||||
|
token: data.token
|
||||||
|
};
|
||||||
|
d[key] = val;
|
||||||
return $.ajax({
|
return $.ajax({
|
||||||
type: "PUT",
|
type: "PUT",
|
||||||
url: datas['scriptname'] + '/mysession/persistent',
|
url: datas['scriptname'] + '/mysession/persistent',
|
||||||
data: {
|
dataType: 'json',
|
||||||
_appsListOrder: $(setSelector).sortable("toArray").join()
|
data: d
|
||||||
},
|
});
|
||||||
dataType: 'json'
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -261,11 +283,14 @@ LemonLDAP::NG Portal jQuery scripts
|
||||||
if (datas['pingInterval'] && datas['pingInterval'] > 0) {
|
if (datas['pingInterval'] && datas['pingInterval'] > 0) {
|
||||||
window.setTimeout(ping, datas['pingInterval']);
|
window.setTimeout(ping, datas['pingInterval']);
|
||||||
}
|
}
|
||||||
return $(".localeDate").each(function() {
|
$(".localeDate").each(function() {
|
||||||
var s;
|
var s;
|
||||||
s = new Date($(this).attr("val") * 1000);
|
s = new Date($(this).attr("val") * 1000);
|
||||||
return $(this).text(s.toLocaleString());
|
return $(this).text(s.toLocaleString());
|
||||||
});
|
});
|
||||||
|
return $('.oidcConsent').on('click', function() {
|
||||||
|
return removeOidcConsent($(this).attr('partner'));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
}).call(this);
|
}).call(this);
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user