21
21
import com .fasterxml .jackson .core .JsonProcessingException ;
22
22
import com .fasterxml .jackson .databind .JsonNode ;
23
23
import com .fasterxml .jackson .databind .ObjectMapper ;
24
+ import org .apache .commons .codec .binary .Base64 ;
24
25
import org .apache .commons .lang3 .StringUtils ;
25
26
import org .apache .commons .logging .Log ;
26
27
import org .apache .commons .logging .LogFactory ;
27
28
import org .wso2 .carbon .apimgt .gateway .internal .ServiceReferenceHolder ;
28
29
import org .wso2 .carbon .apimgt .gateway .jwt .RevokedJWTDataHolder ;
29
30
import org .wso2 .carbon .apimgt .impl .APIConstants ;
30
31
31
- import javax .jms .*;
32
+ import javax .jms .JMSException ;
33
+ import javax .jms .Message ;
34
+ import javax .jms .MessageListener ;
35
+ import javax .jms .TextMessage ;
36
+ import javax .jms .Topic ;
37
+ import java .util .HashMap ;
32
38
33
39
public class GatewayTokenRevocationMessageListener implements MessageListener {
34
40
@@ -58,25 +64,6 @@ public void onMessage(Message message) {
58
64
payloadData .get (APIConstants .REVOKED_TOKEN_EXPIRY_TIME ).asLong (),
59
65
payloadData .get (APIConstants .REVOKED_TOKEN_TYPE ).asText ());
60
66
}
61
-
62
- if (payloadData .get (APIConstants .INTERNAL_REVOCATION_EVENT_TYPE ) != null
63
- && payloadData .get (APIConstants .INTERNAL_REVOCATION_EVENT_TYPE ).asText ()
64
- .equals (APIConstants .NotificationEvent .CONSUMER_APP_REVOCATION_EVENT )) {
65
- handleInternallyRevokedConsumerKeyMessage (
66
- payloadData .get (APIConstants .INTERNAL_REVOCATION_CONSUMER_KEY ).asText (),
67
- payloadData .get (APIConstants .INTERNAL_REVOCATION_TIME ).asLong (),
68
- payloadData .get (APIConstants .INTERNAL_REVOCATION_EVENT_TYPE ).asText ());
69
- }
70
-
71
- if (payloadData .get (APIConstants .INTERNAL_REVOCATION_EVENT_TYPE ) != null
72
- && payloadData .get (APIConstants .INTERNAL_REVOCATION_EVENT_TYPE ).asText ()
73
- .equals (APIConstants .NotificationEvent .SUBJECT_ENTITY_REVOCATION_EVENT )) {
74
- handleInternallyRevokedUserEventMessage (
75
- payloadData .get (APIConstants .INTERNAL_REVOCATION_ENTITY_ID ).asText (),
76
- payloadData .get (APIConstants .INTERNAL_REVOCATION_ENTITY_TYPE ).asText (),
77
- payloadData .get (APIConstants .INTERNAL_REVOCATION_TIME ).asLong (),
78
- payloadData .get (APIConstants .INTERNAL_REVOCATION_EVENT_TYPE ).asText ());
79
- }
80
67
}
81
68
} else {
82
69
log .warn ("Event dropped due to unsupported message type " + message .getClass ());
@@ -89,45 +76,66 @@ public void onMessage(Message message) {
89
76
}
90
77
}
91
78
92
- private void handleRevokedTokenMessage (String revokedToken , long expiryTime ,String tokenType ) {
79
+ private void handleRevokedTokenMessage (String revokedToken , long expiryTime , String tokenType ) {
93
80
94
81
boolean isJwtToken = false ;
95
82
if (StringUtils .isEmpty (revokedToken )) {
96
83
return ;
97
84
}
98
85
99
- //handle JWT tokens
100
- if (APIConstants .API_KEY_AUTH_TYPE .equals (tokenType ) || APIConstants .JWT .equals (tokenType )) {
101
- ServiceReferenceHolder .getInstance ().getRevokedTokenService ()
102
- .addRevokedJWTIntoMap (revokedToken , expiryTime );
103
- // Add revoked token to revoked JWT map
104
- isJwtToken = true ;
105
- }
106
- if (APIConstants .API_KEY_AUTH_TYPE .equals (tokenType )) {
107
- ServiceReferenceHolder .getInstance ().getRevokedTokenService ()
108
- .removeApiKeyFromGatewayCache (revokedToken );
86
+ if (APIConstants .NotificationEvent .CONSUMER_APP_REVOCATION_EVENT .equals (tokenType )) {
87
+ HashMap <String , Object > revokedTokenMap = base64Decode (revokedToken );
88
+ if (revokedTokenMap .containsKey (APIConstants .NotificationEvent .CONSUMER_KEY ) &&
89
+ revokedTokenMap .get (APIConstants .NotificationEvent .CONSUMER_KEY ) != null &&
90
+ revokedTokenMap .containsKey (APIConstants .NotificationEvent .REVOCATION_TIME ) &&
91
+ revokedTokenMap .get (APIConstants .NotificationEvent .REVOCATION_TIME ) != null ) {
92
+ RevokedJWTDataHolder .getInstance ().addRevokedConsumerKeyToMap (
93
+ (String ) revokedTokenMap .get (APIConstants .NotificationEvent .CONSUMER_KEY ),
94
+ (long ) revokedTokenMap .get (APIConstants .NotificationEvent .REVOCATION_TIME ));
95
+ }
96
+ } else if (APIConstants .NotificationEvent .SUBJECT_ENTITY_REVOCATION_EVENT .equals (tokenType )) {
97
+ HashMap <String , Object > revokedTokenMap = base64Decode (revokedToken );
98
+ if (revokedTokenMap .get (APIConstants .NotificationEvent .ENTITY_TYPE ) != null &&
99
+ revokedTokenMap .get (APIConstants .NotificationEvent .REVOCATION_TIME ) != null &&
100
+ revokedTokenMap .get (APIConstants .NotificationEvent .ENTITY_ID ) != null ) {
101
+ String entityType = (String ) revokedTokenMap .get (APIConstants .NotificationEvent .ENTITY_TYPE );
102
+ long revocationTime = (long ) revokedTokenMap .get (APIConstants .NotificationEvent .REVOCATION_TIME );
103
+ String entityId = (String ) revokedTokenMap .get (APIConstants .NotificationEvent .ENTITY_ID );
104
+ if (APIConstants .NotificationEvent .ENTITY_TYPE_USER_ID .equals (entityType )) {
105
+ RevokedJWTDataHolder .getInstance ().addRevokedSubjectEntityUserToMap (entityId , revocationTime );
106
+ } else if (APIConstants .NotificationEvent .ENTITY_TYPE_CLIENT_ID .equals (entityType )) {
107
+ RevokedJWTDataHolder .getInstance ()
108
+ .addRevokedSubjectEntityConsumerAppToMap (entityId , revocationTime );
109
+ }
110
+ }
109
111
} else {
110
- ServiceReferenceHolder .getInstance ().getRevokedTokenService ()
111
- .removeTokenFromGatewayCache (revokedToken , isJwtToken );
112
- }
113
- }
114
-
115
- private void handleInternallyRevokedConsumerKeyMessage (String consumerKey , long revocationTime , String type ) {
116
- if (APIConstants .NotificationEvent .CONSUMER_APP_REVOCATION_EVENT .equals (type )) {
117
- RevokedJWTDataHolder .getInstance ().addRevokedConsumerKeyToMap (consumerKey , revocationTime );
112
+ //handle JWT tokens
113
+ if (APIConstants .API_KEY_AUTH_TYPE .equals (tokenType ) || APIConstants .JWT .equals (tokenType )) {
114
+ ServiceReferenceHolder .getInstance ().getRevokedTokenService ()
115
+ .addRevokedJWTIntoMap (revokedToken , expiryTime );
116
+ // Add revoked token to revoked JWT map
117
+ isJwtToken = true ;
118
+ }
119
+ if (APIConstants .API_KEY_AUTH_TYPE .equals (tokenType )) {
120
+ ServiceReferenceHolder .getInstance ().getRevokedTokenService ()
121
+ .removeApiKeyFromGatewayCache (revokedToken );
122
+ } else {
123
+ ServiceReferenceHolder .getInstance ().getRevokedTokenService ()
124
+ .removeTokenFromGatewayCache (revokedToken , isJwtToken );
125
+ }
118
126
}
119
127
}
120
128
121
- private void handleInternallyRevokedUserEventMessage (String subjectId , String subjectIdType ,
122
- long revocationTime , String type ) {
129
+ private HashMap <String , Object > base64Decode (String encodedRevokedToken ) {
123
130
124
- if ( APIConstants . NotificationEvent . SUBJECT_ENTITY_REVOCATION_EVENT . equals ( type )) {
125
- if ( "USER_ID" . equals ( subjectIdType )) {
126
- RevokedJWTDataHolder . getInstance (). addRevokedSubjectEntityUserToMap ( subjectId , revocationTime );
127
- } else if ( "CLIENT_ID" . equals ( subjectIdType )) {
128
- RevokedJWTDataHolder . getInstance (). addRevokedSubjectEntityConsumerAppToMap ( subjectId ,
129
- revocationTime );
130
- }
131
+ byte [] eventDecoded = Base64 . decodeBase64 ( encodedRevokedToken );
132
+ String eventJson = new String ( eventDecoded );
133
+ ObjectMapper objectMapper = new ObjectMapper ( );
134
+ try {
135
+ return objectMapper . readValue ( eventJson , HashMap . class );
136
+ } catch ( JsonProcessingException e ) {
137
+ log . error ( "Error while decoding revoked token event." );
131
138
}
139
+ return new HashMap <>();
132
140
}
133
141
}
0 commit comments