Fix on revoke refresh token admin UI

revoking refresh token from edit oauth2
client was erroring bc a wrong api call.

Change-Id: Ifb21ba3036d6083bcae75bc48b4e6e86e3a905df
This commit is contained in:
Sebastian Marcet 2017-02-14 15:18:50 -03:00
parent dff98a009a
commit 8efd84a502
10 changed files with 195 additions and 112 deletions

View File

@ -596,7 +596,7 @@ final class ClientApiController extends AbstractRESTController implements ICRUDC
}
return $this->ok([
'total' => $paginator->total(),
'pages' => $paginator->total() > 0 ? ceil($paginator->total()/$page_size) : 0,
'pages' => $paginator->total() > 0 && $page_size > 0 ? ceil($paginator->total()/$page_size) : 0,
'items' => $res
]);
}

View File

@ -93,7 +93,7 @@ class UserApiController extends AbstractRESTController implements ICRUDControlle
$hint = Input::get('hint','none');
switch($hint){
case 'access_token':{
case 'access-token':{
$token = $this->token_service->getAccessToken($value,true);
if(is_null($token))
throw new Exception(sprintf("access token %s expired!.",$value));
@ -102,7 +102,7 @@ class UserApiController extends AbstractRESTController implements ICRUDControlle
$this->token_service->revokeAccessToken($value,true);
}
break;
case 'refresh_token':
case 'refresh-token':
$token = $this->token_service->getRefreshToken($value,true);
if(is_null($token))
throw new Exception(sprintf("access token %s expired!.",$value));

View File

@ -48,10 +48,14 @@ abstract class AbstractEloquentOAuth2TokenRepository extends AbstractEloquentEnt
*/
function getAllValidByClientIdentifier($client_identifier, $page_nbr = 1, $page_size = 10)
{
return $this->getAll($page_nbr, $page_size, [
return $this->getAll($page_nbr, $page_size, $this->getAllValidByClientIdentifierFilterCondition($client_identifier));
}
protected function getAllValidByClientIdentifierFilterCondition($client_identifier){
return [
['name' => 'client_id', 'op' => '=','value' => $client_identifier ],
['raw' => 'DATE_ADD(created_at, INTERVAL lifetime second) >= UTC_TIMESTAMP()'],
]);
];
}
/**
@ -62,10 +66,14 @@ abstract class AbstractEloquentOAuth2TokenRepository extends AbstractEloquentEnt
*/
function getAllValidByUserId($user_id, $page_nbr = 1, $page_size = 10)
{
return $this->getAll($page_nbr, $page_size, [
return $this->getAll($page_nbr, $page_size, $this->getAllValidByUserIdFilterCondition($user_id));
}
protected function getAllValidByUserIdFilterCondition($user_id){
return [
['name' => 'user_id', 'op' => '=','value' => $user_id ],
['raw' => 'DATE_ADD(created_at, INTERVAL lifetime second) >= UTC_TIMESTAMP()'],
]);
];
}
/**

View File

@ -31,4 +31,19 @@ final class EloquentRefreshTokenRepository extends AbstractEloquentOAuth2TokenRe
$this->log_service = $log_service;
}
protected function getAllValidByClientIdentifierFilterCondition($client_identifier){
return [
['name' => 'client_id', 'op' => '=','value' => $client_identifier ],
['name' => 'void', 'op' => '=','value' => 0],
];
}
protected function getAllValidByUserIdFilterCondition($user_id){
return [
['name' => 'user_id', 'op' => '=','value' => $user_id ],
['name' => 'void', 'op' => '=','value' => 0],
];
}
}

View File

@ -12,7 +12,7 @@ jQuery(document).ready(function($){
// event.item: contains the item
// event.cancel: set to true to prevent the item getting added
var regex_email = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ig;
var current = regex_email.test( event.item );
var current = regex_email.test( event.item );
if(!current)
event.cancel = true;
});

View File

@ -1,5 +1,10 @@
var pageSizeTokens = 25;
var refreshTokenCurrentPage = 1;
var accessTokenCurrentPage = 1;
function updateAccessTokenList(page, page_size){
//reload access tokens
accessTokenCurrentPage = page;
$.ajax({
type: "GET",
url: TokensUrls.AccessTokenUrls.get +'?offset='+page+'&limit='+page_size,
@ -36,7 +41,8 @@ function updateAccessTokenList(page, page_size){
$('#body-access-tokens').html(html.html());
var pages_html = '';
for(var i = 0 ; i < data.pages ; i++){
pages_html += "<li><a class='access_token_page' href='#' data-page-nbr='"+(i+1)+"'>"+(i+1)+"</a></li>";
var active = ((i+1) == accessTokenCurrentPage) ? true : false;
pages_html += "<li "+(active ? "class='active'":"" )+"><a class='access_token_page' href='#' data-page-nbr='"+(i+1)+"'>"+(i+1)+"</a></li>";
}
$('#access_token_paginator').html(pages_html)
}
@ -49,6 +55,7 @@ function updateAccessTokenList(page, page_size){
function updateRefreshTokenList(page, page_size){
//reload access tokens
refreshTokenCurrentPage = page;
$.ajax({
type: "GET",
url: TokensUrls.RefreshTokenUrl.get+'?offset='+page+'&limit='+page_size,
@ -86,11 +93,13 @@ function updateRefreshTokenList(page, page_size){
};
var html = template.render(data.items, directives);
$('#body-refresh-tokens').html(html.html());
var pages_html = '';
for(var i = 0 ; i < data.pages ; i++){
pages_html += "<li><a class='refresh_token_page' href='#' data-page-nbr='"+(i+1)+"'>"+(i+1)+"</a></li>";
var active = ((i+1) == refreshTokenCurrentPage) ? true : false;
pages_html += "<li "+(active ? "class='active'":"" )+"><a class='refresh_token_page' href='#' data-page-nbr='"+(i+1)+"'>"+(i+1)+"</a></li>";
}
$('#refresh_token_paginator').html(pages_html)
updateAccessTokenList();
$('#refresh_token_paginator').html(pages_html);
updateAccessTokenList(1, pageSizeTokens);
}
},
error: function (jqXHR, textStatus, errorThrown) {
@ -101,7 +110,7 @@ function updateRefreshTokenList(page, page_size){
jQuery(document).ready(function($){
var pageSize = 25;
if($('#table-access-tokens tr').length == 1){
$('#info-access-tokens').show();
@ -122,31 +131,31 @@ jQuery(document).ready(function($){
}
$("body").on('click','.refresh-access-tokens',function(event){
updateAccessTokenList(1, pageSize);
updateAccessTokenList(1, pageSizeTokens);
event.preventDefault();
return false;
});
$("body").on('click','.refresh-access-tokens',function(event){
updateRefreshTokenList(1, pageSize);
$("body").on('click','.refresh-refresh-tokens',function(event){
updateRefreshTokenList(1, pageSizeTokens);
event.preventDefault();
return false;
});
$("body").on("click",".access_token_page", function(event){
event.preventDefault();
var page = $(this).data('page-nbr');
accessTokenCurrentPage = $(this).data('page-nbr');
updateAccessTokenList(page, pageSize);
updateAccessTokenList(accessTokenCurrentPage, pageSizeTokens);
return false;
});
$("body").on("click",".refresh_token_page", function(event){
event.preventDefault();
var page = $(this).data('page-nbr');
refreshTokenCurrentPage= $(this).data('page-nbr');
updateRefreshTokenList(page, pageSize);
updateRefreshTokenList(refreshTokenCurrentPage, pageSizeTokens);
return false;
});
@ -154,39 +163,58 @@ jQuery(document).ready(function($){
$("body").on('click',".revoke-token",function(event){
var link = $(this);
var value = link.attr('data-value');
var hint = link.attr('data-hint');
var value = link.data('value');
var hint = link.data('hint');
var url = link.attr('href');
var table_id = hint ==='refresh-token'? 'table-refresh-tokens':'table-access-tokens';
var info_id = hint ==='refresh-token'? 'info-refresh-tokens':'info-access-tokens';
var confirm_msg = hint ==='refresh-token'? 'Are you sure?, revoking this refresh token also will become void all related Access Tokens':'Are you sure?';
if(confirm(confirm_msg)){
var confirm_msg = hint ==='refresh-token'? 'Revoking this refresh token also will become void all related Access Tokens.':'Revoke Access Token?';
$.ajax(
{
type: "DELETE",
url: url,
dataType: "json",
timeout:60000,
success: function (data,textStatus,jqXHR) {
//load data...
var row = $('#'+value);
row.remove();
var row_qty = $('#'+table_id+' tr').length;
if(row_qty===1){ //only we have the header ...
$('#'+table_id).hide();
$('#'+info_id).show();
swal({
title: "Are you sure?",
text: confirm_msg,
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Yes, revoke it!",
closeOnConfirm: true
},
function(){
$.ajax(
{
type: "DELETE",
url: url,
dataType: "json",
timeout:60000,
success: function (data,textStatus,jqXHR) {
//load data...
var row = $('#'+value);
row.remove();
var row_qty = $('#'+table_id+' tr').length;
if(row_qty===1){ //only we have the header ...
if(hint=='refresh-token' && refreshTokenCurrentPage > 1) {
refreshTokenCurrentPage -= 1;
updateRefreshTokenList(refreshTokenCurrentPage, pageSizeTokens);
}
if(hint=='access-token' && accessTokenCurrentPage > 1) {
accessTokenCurrentPage -= 1;
updateAccessTokenList(accessTokenCurrentPage, pageSizeTokens);
}
else{
$('#'+table_id).hide();
$('#'+info_id).show();
}
}
if(hint=='refresh-token'){
updateAccessTokenList(1, pageSizeTokens);
}
},
error: function (jqXHR, textStatus, errorThrown) {
ajaxError(jqXHR, textStatus, errorThrown);
}
if(hint=='refresh-token'){
updateAccessTokenList();
}
},
error: function (jqXHR, textStatus, errorThrown) {
ajaxError(jqXHR, textStatus, errorThrown);
}
}
);
}
);
});
event.preventDefault();
return false;
});

View File

@ -1,4 +1,9 @@
var pageSizeUserGrants = 25;
var refreshTokenCurrentPage = 1;
var accessTokenCurrentPage = 1;
function updateAccessTokenList(page, page_size){
accessTokenCurrentPage = page;
//reload access tokens
$.ajax({
type: "GET",
@ -36,7 +41,8 @@ function updateAccessTokenList(page, page_size){
$('#body-access-tokens').html(html.html());
var pages_html = '';
for(var i = 0 ; i < data.pages ; i++){
pages_html += "<li><a class='access_token_page' href='#' data-page-nbr='"+(i+1)+"'>"+(i+1)+"</a></li>";
var active = ((i+1) == accessTokenCurrentPage) ? true : false;
pages_html += "<li "+(active ? "class='active'":"" )+"><a class='access_token_page' href='#' data-page-nbr='"+(i+1)+"'>"+(i+1)+"</a></li>";
}
$('#access_token_paginator').html(pages_html)
}
@ -48,6 +54,7 @@ function updateAccessTokenList(page, page_size){
}
function updateRefreshTokenList(page, page_size){
refreshTokenCurrentPage = page;
//reload access tokens
$.ajax({
type: "GET",
@ -86,11 +93,13 @@ function updateRefreshTokenList(page, page_size){
};
var html = template.render(data.items, directives);
$('#body-refresh-tokens').html(html.html());
var pages_html = '';
for(var i = 0 ; i < data.pages ; i++){
pages_html += "<li><a class='refresh_token_page' href='#' data-page-nbr='"+(i+1)+"'>"+(i+1)+"</a></li>";
var active = ((i+1) == refreshTokenCurrentPage) ? true : false;
pages_html += "<li "+(active ? "class='active'":"" )+"><a class='refresh_token_page' href='#' data-page-nbr='"+(i+1)+"'>"+(i+1)+"</a></li>";
}
$('#refresh_token_paginator').html(pages_html)
updateAccessTokenList();
updateAccessTokenList(1, pageSizeUserGrants);
}
},
error: function (jqXHR, textStatus, errorThrown) {
@ -101,7 +110,7 @@ function updateRefreshTokenList(page, page_size){
jQuery(document).ready(function($){
var pageSize = 25;
$('#oauth2-console','#main-menu').addClass('active');
@ -125,58 +134,75 @@ jQuery(document).ready(function($){
$("body").on("click",".access_token_page", function(event){
event.preventDefault();
var page = $(this).data('page-nbr');
updateAccessTokenList(page, pageSize);
accessTokenCurrentPage = $(this).data('page-nbr');
updateAccessTokenList(accessTokenCurrentPage, pageSizeUserGrants);
return false;
});
$("body").on("click",".refresh_token_page", function(event){
event.preventDefault();
var page = $(this).data('page-nbr');
updateRefreshTokenList(page, pageSize);
refreshTokenCurrentPage = $(this).data('page-nbr');
updateRefreshTokenList(refreshTokenCurrentPage, pageSizeUserGrants);
return false;
});
$("body").on('click',".revoke-token",function(event){
var link = $(this);
var value = link.attr('data-value');
var hint = link.attr('data-hint');
var value = link.data('value');
var hint = link.data('hint');
var url = link.attr('href');
var table_id = hint ==='refresh-token'? 'table-refresh-tokens':'table-access-tokens';
var info_id = hint ==='refresh-token'? 'info-refresh-tokens':'info-access-tokens';
var confirm_msg = hint ==='refresh-token'? 'Are you sure?, revoking this refresh token also will become void all related Access Tokens':'Are you sure?';
if(confirm(confirm_msg)){
var confirm_msg = hint ==='refresh-token'? 'Revoking this refresh token also will become void all related Access Tokens':'Revoke Access Token ?';
$.ajax(
{
type: "DELETE",
url: url,
dataType: "json",
timeout:60000,
success: function (data,textStatus,jqXHR) {
//load data...
var row = $('#'+value);
row.remove();
var row_qty = $('#'+table_id+' tr').length;
if(row_qty===1){ //only we have the header ...
$('#'+table_id).hide();
$('#'+info_id).show();
swal({
title: "Are you sure?",
text: confirm_msg,
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "Yes, revoke it!",
closeOnConfirm: true
},
function(){
$.ajax(
{
type: "DELETE",
url: url,
dataType: "json",
timeout:60000,
success: function (data,textStatus,jqXHR) {
//load data...
var row = $('#'+value);
row.remove();
var row_qty = $('#'+table_id+' tr').length;
if(row_qty===1){ //only we have the header ...
if(hint=='refresh-token' && refreshTokenCurrentPage > 1) {
refreshTokenCurrentPage -= 1;
updateRefreshTokenList(refreshTokenCurrentPage, pageSizeUserGrants);
}
if(hint=='access-token' && accessTokenCurrentPage > 1) {
accessTokenCurrentPage -= 1;
updateAccessTokenList(accessTokenCurrentPage, pageSizeUserGrants);
}
else{
$('#'+table_id).hide();
$('#'+info_id).show();
}
}
if(hint=='refresh-token'){
updateAccessTokenList(1, pageSizeUserGrants);
}
},
error: function (jqXHR, textStatus, errorThrown) {
ajaxError(jqXHR, textStatus, errorThrown);
}
if(hint=='refresh-token'){
updateAccessTokenList();
}
},
error: function (jqXHR, textStatus, errorThrown) {
ajaxError(jqXHR, textStatus, errorThrown);
}
}
);
}
);
});
event.preventDefault();
return false;
});

View File

@ -36,7 +36,7 @@
<div class="col-md-12">
<ul class="pagination" id="access_token_paginator">
<?php for($i = 0 ; $i < $access_tokens_pages ; $i++){ ?>
<li><a class="access_token_page" href="#" data-page-nbr="{!! $i+1 !!}">{!! $i+1 !!}</a></li>
<li <?php if($i == 0) echo "class='active'" ?>><a class="access_token_page" href="#" data-page-nbr="{!! $i+1 !!}">{!! $i+1 !!}</a></li>
<?php } ?>
</ul>
</div>
@ -88,7 +88,7 @@
<div class="col-md-12">
<ul class="pagination" id="refresh_token_paginator">
<?php for($i = 0 ; $i < $refresh_tokens_pages ; $i++){ ?>
<li><a class="refresh_token_page" href="#" data-page-nbr="{!! $i+1 !!}">{!! $i+1 !!}</a></li>
<li <?php if($i == 0) echo "class='active'" ?>><a class="refresh_token_page" href="#" data-page-nbr="{!! $i+1 !!}">{!! $i+1 !!}</a></li>
<?php } ?>
</ul>
</div>

View File

@ -13,6 +13,7 @@
{!! HTML::script('bower_assets/typeahead.js/dist/typeahead.bundle.js')!!}
{!! HTML::script('bower_assets/bootstrap-tagsinput/dist/bootstrap-tagsinput.js')!!}
{!! HTML::script('bower_assets/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js')!!}
<script type="application/javascript">
var dataClientUrls =
@ -37,18 +38,22 @@
key_management_algorihtms: {!!Utils\ArrayUtils::toJson(OAuth2\OAuth2Protocol::$supported_key_management_algorithms)!!},
content_encryption_algorihtms: {!!Utils\ArrayUtils::toJson(OAuth2\OAuth2Protocol::$supported_content_encryption_algorithms)!!}
};
var current_admin_users = [];
@foreach($client->admin_users()->get() as $user)
current_admin_users.push({ "id": {!!$user->id!!} , "value": "{!! $user->getFullName() !!}" });
@endforeach
$(document).ready
(
function()
{
}
);
$(document).ready(function () {
$('.panel-collapse').collapse('hide');
location.hash && $(location.hash + '.collapse').collapse('show');
$(document).on('click', '.head-button', function(e){
$('.panel-collapse').collapse('hide');
window.location.hash = $(this).attr('href');
});
});
</script>
@append
@section('content')
@ -77,17 +82,18 @@
</ul>
</div>
@endif
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<!-- main data -->
<div class="panel panel-default" style="padding-bottom:0px">
<div class="panel-heading" role="tab" id="headingOne" style="margin-bottom:0px">
<div class="panel-heading" role="tab" id="main_data_heading" style="margin-bottom:0px">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
<a role="button" class="head-button" data-toggle="collapse" data-parent="#accordion" href="#main_data" aria-expanded="true" aria-controls="main_data">
OAuth 2.0 Client Data
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
<div id="main_data" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="main_data_heading">
<div class="panel-body">
@include('oauth2.profile.edit-client-data',array('access_tokens' => $access_tokens, 'refresh_tokens' => $refresh_tokens,'client' => $client))
</div>
@ -95,14 +101,14 @@
</div>
<!-- scopes -->
<div class="panel panel-default" style="padding-bottom:0px">
<div class="panel-heading" role="tab" id="heading4" style="margin-bottom:0px">
<div class="panel-heading" role="tab" id="allowed_scopes_heading" style="margin-bottom:0px">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse4" aria-expanded="false" aria-controls="collapse4">
<a class="collapsed head-button" role="button" data-toggle="collapse" data-parent="#accordion" href="#allowed_scopes" aria-expanded="false" aria-controls="allowed_scopes">
Application Allowed Scopes
</a>
</h4>
</div>
<div id="collapse4" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading4">
<div id="allowed_scopes" class="panel-collapse collapse" role="tabpanel" aria-labelledby="allowed_scopes_heading">
<div class="panel-body">
@include('oauth2.profile.edit-client-scopes',array('access_tokens' => $access_tokens, 'refresh_tokens' => $refresh_tokens,'client'=>$client) )
</div>
@ -110,14 +116,14 @@
</div>
<!-- grants -->
<div class="panel panel-default" style="padding-bottom:0px">
<div class="panel-heading" role="tab" id="heading5" style="margin-bottom:0px">
<div class="panel-heading" role="tab" id="grants_heading" style="margin-bottom:0px">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse5" aria-expanded="false" aria-controls="collapse5">
<a class="collapsed head-button" role="button" data-toggle="collapse" data-parent="#accordion" href="#grants" aria-expanded="false" aria-controls="grants">
Application Grants
</a>
</h4>
</div>
<div id="collapse5" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading5">
<div id="grants" class="panel-collapse collapse" role="tabpanel" aria-labelledby="grants_heading">
<div class="panel-body">
@include('oauth2.profile.edit-client-tokens',array('access_tokens' => $access_tokens, 'refresh_tokens' => $refresh_tokens,'client'=>$client) )
</div>
@ -125,14 +131,14 @@
</div>
<!-- security settings -->
<div class="panel panel-default" style="padding-bottom:0px">
<div class="panel-heading" role="tab" id="heading6" style="margin-bottom:0px">
<div class="panel-heading" role="tab" id="security_heading" style="margin-bottom:0px">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse6" aria-expanded="false" aria-controls="collapse6">
<a class="collapsed head-button" role="button" data-toggle="collapse" data-parent="#accordion" href="#security" aria-expanded="false" aria-controls="security">
Security Settings
</a>
</h4>
</div>
<div id="collapse6" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading6">
<div id="security" class="panel-collapse collapse" role="tabpanel" aria-labelledby="security_heading">
<div class="panel-body">
@include('oauth2.profile.edit-client-security-main-settings',array('client' => $client) )
<hr/>

View File

@ -32,7 +32,7 @@
<td>{!!$access_token->client()->first()->getFriendlyApplicationType()!!}</td>
<td>{!!$access_token->client()->first()->app_name!!}</td>
<td>{!!$access_token->scope!!}</td>
<td>{!! HTML::link(URL::action("Api\\UserApiController@revokeToken",array("id"=>$user_id,"value"=>$access_token->value, "hint"=>'access_token')),'Revoke Access',array('data-value' => $access_token->value,'data-hint'=>'access_token','class'=>'btn btn-default btn-md active btn-delete revoke-token','title'=>'Revoke Access Token')) !!}</td>
<td>{!! HTML::link(URL::action("Api\\UserApiController@revokeToken",array("id"=>$user_id,"value"=>$access_token->value, "hint"=>'access-token')),'Revoke Access',array('data-value' => $access_token->value,'data-hint'=>'access-token','class'=>'btn btn-default btn-md active btn-delete revoke-token','title'=>'Revoke Access Token')) !!}</td>
</tr>
@endforeach
</tbody>
@ -44,7 +44,7 @@
<div class="col-md-12">
<ul class="pagination" id="access_token_paginator">
<?php for($i = 0 ; $i < $access_tokens_pages ; $i++){ ?>
<li><a class="access_token_page" href="#" data-page-nbr="{!! $i+1 !!}">{!! $i+1 !!}</a></li>
<li <?php if($i == 0) echo "class='active'" ?>><a class="access_token_page" href="#" data-page-nbr="{!! $i+1 !!}">{!! $i+1 !!}</a></li>
<?php } ?>
</ul>
</div>
@ -75,7 +75,7 @@
<td>{!!$refresh_token->client()->first()->getFriendlyApplicationType()!!}</td>
<td>{!!$refresh_token->client()->first()->app_name!!}</td>
<td>{!!$refresh_token->scope!!}</td>
<td>{!! HTML::link(URL::action("Api\\UserApiController@revokeToken",array("id" => $user_id,"value" => $refresh_token->value, "hint" => 'refresh_token')),'Revoke Access',array('data-value' => $refresh_token->value,'data-hint' => 'refresh_token','class' => 'btn btn-default btn-md active btn-delete revoke-token','title' => 'Revoke Access Token')) !!}</td>
<td>{!! HTML::link(URL::action("Api\\UserApiController@revokeToken",array("id" => $user_id,"value" => $refresh_token->value, "hint" => 'refresh-token')),'Revoke Access',array('data-value' => $refresh_token->value,'data-hint' => 'refresh_token','class' => 'btn btn-default btn-md active btn-delete revoke-token','title' => 'Revoke Access Token')) !!}</td>
</tr>
@endforeach
</tbody>
@ -87,7 +87,7 @@
<div class="col-md-12">
<ul class="pagination" id="refresh_token_paginator">
<?php for($i = 0 ; $i < $refresh_tokens_pages ; $i++){ ?>
<li><a class="refresh_token_page" href="#" data-page-nbr="{!! $i+1 !!}">{!! $i+1 !!}</a></li>
<li <?php if($i == 0) echo "class='active'" ?> ><a class="refresh_token_page" href="#" data-page-nbr="{!! $i+1 !!}">{!! $i+1 !!}</a></li>
<?php } ?>
</ul>
</div>
@ -101,11 +101,11 @@
var TokensUrls = {
AccessTokenUrls : {
get : '{!! URL::action("Api\\ClientApiController@getAccessTokensByCurrentUser", array() )!!}',
delete :'{!! URL::action("Api\\UserApiController@revokeToken",array("id" => $user_id, "value" => -1, "hint" =>"access_token")) !!}'
delete :'{!! URL::action("Api\\UserApiController@revokeToken",array("id" => $user_id, "value" => -1, "hint" =>"access-token")) !!}'
},
RefreshTokenUrl : {
get: '{!! URL::action("Api\\ClientApiController@getRefreshTokensByCurrentUser", array() )!!}',
delete :'{!! URL::action("Api\\UserApiController@revokeToken",array("id" => $user_id, "value" => -1, "hint" => "refresh_token")) !!}'
delete :'{!! URL::action("Api\\UserApiController@revokeToken",array("id" => $user_id, "value" => -1, "hint" => "refresh-token")) !!}'
}
};
</script>