diff --git a/app/Http/Controllers/Api/ClientApiController.php b/app/Http/Controllers/Api/ClientApiController.php index 1fe132db..07408ccd 100644 --- a/app/Http/Controllers/Api/ClientApiController.php +++ b/app/Http/Controllers/Api/ClientApiController.php @@ -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 ]); } diff --git a/app/Http/Controllers/Api/UserApiController.php b/app/Http/Controllers/Api/UserApiController.php index 5ddb775c..e71c80a3 100644 --- a/app/Http/Controllers/Api/UserApiController.php +++ b/app/Http/Controllers/Api/UserApiController.php @@ -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)); diff --git a/app/Repositories/AbstractEloquentOAuth2TokenRepository.php b/app/Repositories/AbstractEloquentOAuth2TokenRepository.php index 65ed1889..61782694 100644 --- a/app/Repositories/AbstractEloquentOAuth2TokenRepository.php +++ b/app/Repositories/AbstractEloquentOAuth2TokenRepository.php @@ -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()'], - ]); + ]; } /** diff --git a/app/Repositories/EloquentRefreshTokenRepository.php b/app/Repositories/EloquentRefreshTokenRepository.php index d78415bb..848821e5 100644 --- a/app/Repositories/EloquentRefreshTokenRepository.php +++ b/app/Repositories/EloquentRefreshTokenRepository.php @@ -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], + ]; + } + } \ No newline at end of file diff --git a/public/assets/js/oauth2/profile/edit-client-data.js b/public/assets/js/oauth2/profile/edit-client-data.js index 4188cc95..04f2fe2b 100644 --- a/public/assets/js/oauth2/profile/edit-client-data.js +++ b/public/assets/js/oauth2/profile/edit-client-data.js @@ -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; }); diff --git a/public/assets/js/oauth2/profile/edit-client-tokens.js b/public/assets/js/oauth2/profile/edit-client-tokens.js index ca01b677..aa174361 100644 --- a/public/assets/js/oauth2/profile/edit-client-tokens.js +++ b/public/assets/js/oauth2/profile/edit-client-tokens.js @@ -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 += "
  • "+(i+1)+"
  • "; + var active = ((i+1) == accessTokenCurrentPage) ? true : false; + pages_html += "
  • "+(i+1)+"
  • "; } $('#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 += "
  • "+(i+1)+"
  • "; + var active = ((i+1) == refreshTokenCurrentPage) ? true : false; + pages_html += "
  • "+(i+1)+"
  • "; } - $('#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; }); diff --git a/public/assets/js/oauth2/profile/edit-user-grants.js b/public/assets/js/oauth2/profile/edit-user-grants.js index 75899d9e..e068fe57 100644 --- a/public/assets/js/oauth2/profile/edit-user-grants.js +++ b/public/assets/js/oauth2/profile/edit-user-grants.js @@ -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 += "
  • "+(i+1)+"
  • "; + var active = ((i+1) == accessTokenCurrentPage) ? true : false; + pages_html += "
  • "+(i+1)+"
  • "; } $('#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 += "
  • "+(i+1)+"
  • "; + var active = ((i+1) == refreshTokenCurrentPage) ? true : false; + pages_html += "
  • "+(i+1)+"
  • "; } $('#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; }); diff --git a/resources/views/oauth2/profile/edit-client-tokens.blade.php b/resources/views/oauth2/profile/edit-client-tokens.blade.php index 6e429287..b2015f36 100644 --- a/resources/views/oauth2/profile/edit-client-tokens.blade.php +++ b/resources/views/oauth2/profile/edit-client-tokens.blade.php @@ -36,7 +36,7 @@
    @@ -88,7 +88,7 @@
    diff --git a/resources/views/oauth2/profile/edit-client.blade.php b/resources/views/oauth2/profile/edit-client.blade.php index 2dc7addd..269a8c55 100644 --- a/resources/views/oauth2/profile/edit-client.blade.php +++ b/resources/views/oauth2/profile/edit-client.blade.php @@ -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')!!} + @append @section('content') @@ -77,17 +82,18 @@ @endif +
    -