1515 */
1616'use strict' ;
1717
18+ var Token = require ( './auth-utils/token' ) ;
19+ var Signature = require ( './auth-utils/signature' ) ;
20+
1821function Admin ( keycloak , url ) {
1922 this . _keycloak = keycloak ;
2023 if ( url [ url . length - 1 ] !== '/' ) {
@@ -35,50 +38,63 @@ function adminLogout (request, response, keycloak) {
3538 } ) ;
3639
3740 request . on ( 'end' , function ( ) {
38- let payload ;
39- let parts = data . split ( '.' ) ;
41+ let token = new Token ( data ) ;
42+ let signature ;
4043 try {
41- payload = JSON . parse ( Buffer . from ( parts [ 1 ] , 'base64' ) . toString ( ) ) ;
42- } catch ( e ) {
43- response . status ( 400 ) . end ( ) ;
44- return ;
45- }
46- if ( payload . action === 'LOGOUT' ) {
47- let sessionIDs = payload . adapterSessionIds ;
48- if ( ! sessionIDs ) {
49- keycloak . grantManager . notBefore = payload . notBefore ;
50- response . send ( 'ok' ) ;
51- return ;
52- }
53- if ( sessionIDs && sessionIDs . length > 0 ) {
54- let seen = 0 ;
55- sessionIDs . forEach ( id => {
56- keycloak . unstoreGrant ( id ) ;
57- ++ seen ;
58- if ( seen === sessionIDs . length ) {
44+ signature = new Signature ( keycloak . config ) ;
45+ signature . verify ( token ) . then ( token => {
46+ if ( token . content . action === 'LOGOUT' ) {
47+ let sessionIDs = token . content . adapterSessionIds ;
48+ if ( ! sessionIDs ) {
49+ keycloak . grantManager . notBefore = token . content . notBefore ;
50+ response . send ( 'ok' ) ;
51+ return ;
52+ }
53+ if ( sessionIDs && sessionIDs . length > 0 ) {
54+ let seen = 0 ;
55+ sessionIDs . forEach ( id => {
56+ keycloak . unstoreGrant ( id ) ;
57+ ++ seen ;
58+ if ( seen === sessionIDs . length ) {
59+ response . send ( 'ok' ) ;
60+ }
61+ } ) ;
62+ } else {
5963 response . send ( 'ok' ) ;
6064 }
61- } ) ;
62- } else {
63- response . send ( 'ok' ) ;
64- }
65+ } else {
66+ response . status ( 400 ) . end ( ) ;
67+ }
68+ } ) . catch ( ( err ) => {
69+ response . status ( 401 ) . end ( err . message ) ;
70+ } ) ;
71+ } catch ( err ) {
72+ response . status ( 400 ) . end ( err . message ) ;
6573 }
6674 } ) ;
6775}
6876
6977function adminNotBefore ( request , response , keycloak ) {
7078 let data = '' ;
71-
7279 request . on ( 'data' , d => {
7380 data += d . toString ( ) ;
7481 } ) ;
7582
7683 request . on ( 'end' , function ( ) {
77- let parts = data . split ( '.' ) ;
78- let payload = JSON . parse ( Buffer . from ( parts [ 1 ] , 'base64' ) . toString ( ) ) ;
79- if ( payload . action === 'PUSH_NOT_BEFORE' ) {
80- keycloak . grantManager . notBefore = payload . notBefore ;
81- response . send ( 'ok' ) ;
84+ let token = new Token ( data ) ;
85+ let signature ;
86+ try {
87+ signature = new Signature ( keycloak . config ) ;
88+ signature . verify ( token ) . then ( token => {
89+ if ( token . content . action === 'PUSH_NOT_BEFORE' ) {
90+ keycloak . grantManager . notBefore = token . content . notBefore ;
91+ response . send ( 'ok' ) ;
92+ }
93+ } ) . catch ( ( err ) => {
94+ response . status ( 401 ) . end ( err . message ) ;
95+ } ) ;
96+ } catch ( err ) {
97+ response . status ( 400 ) . end ( err . message ) ;
8298 }
8399 } ) ;
84100}
0 commit comments