ef-keycloak-connect 1.5.1 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ef-keycloak-connect",
3
- "version": "1.5.1",
3
+ "version": "1.5.2",
4
4
  "description": "Node JS keycloak adapter for authentication and authorization.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -171,8 +171,9 @@ class KeycloakService extends Keycloak {
171
171
 
172
172
  //Fetching Groups data for each user.
173
173
  try {
174
-
174
+ let permissions = intrsopectionResponse.data.authorization.permissions;
175
175
  let teamData = await this.getUserSupervisedGroups(responseObject.id, responseObject.username);
176
+ //let teamData = await this.getUserSupervisedGroups(responseObject.id, permissions);
176
177
  responseObject.userTeam = teamData.userTeam;
177
178
  responseObject.supervisedTeams = teamData.supervisedTeams;
178
179
 
@@ -796,6 +797,147 @@ class KeycloakService extends Keycloak {
796
797
 
797
798
  }
798
799
 
800
+
801
+ //function to be used only in teams implementation, this function contains teams implementation with permissions/policies
802
+ /*
803
+ async getUserSupervisedGroups(userId, permissions) {
804
+
805
+ return new Promise(async (resolve, reject) => {
806
+
807
+ let error;
808
+ let token;
809
+ var URL = keycloakConfig["auth-server-url"] + 'realms/' + keycloakConfig.realm + '/protocol/openid-connect/token';
810
+
811
+ try {
812
+
813
+ var config = {
814
+ method: 'post',
815
+ url: URL,
816
+ headers: {
817
+ 'Accept': 'application/json',
818
+ 'cache-control': 'no-cache',
819
+ 'Content-Type': 'application/x-www-form-urlencoded'
820
+ },
821
+ data: {
822
+ client_id: keycloakConfig.CLIENT_ID,
823
+ username: keycloakConfig.USERNAME_ADMIN,
824
+ password: keycloakConfig.PASSWORD_ADMIN,
825
+ grant_type: keycloakConfig.GRANT_TYPE,
826
+ client_secret: keycloakConfig.credentials.secret
827
+ }
828
+ };
829
+
830
+ try {
831
+
832
+ let adminTokenResponse = await requestController.httpRequest(config, true);
833
+ token = adminTokenResponse.data.access_token;
834
+
835
+ config.method = 'get';
836
+ delete config.data;
837
+ delete config.url;
838
+
839
+ let URL2 = keycloakConfig["auth-server-url"] + 'admin/realms/' + keycloakConfig.realm + '/users/' + userId + '/groups';
840
+ config.url = URL2;
841
+ config.headers.Authorization = 'Bearer ' + token;
842
+
843
+ try {
844
+
845
+ let userGroup = await requestController.httpRequest(config, true);
846
+ let team = {};
847
+
848
+ if (userGroup.data.length != 0) {
849
+
850
+
851
+ let groups = userGroup.data;
852
+ let userTeam = {};
853
+
854
+ let filteredTeams = groups.filter(group => !group.name.includes('_permission'));
855
+
856
+ if (filteredTeams.length > 0) {
857
+
858
+ userTeam = {
859
+ 'teamId': filteredTeams[0].id,
860
+ 'teamName': filteredTeams[0].name
861
+ }
862
+
863
+ team.userTeam = userTeam;
864
+
865
+ config.method = 'get';
866
+ delete config.data;
867
+ delete config.url;
868
+
869
+
870
+ let teamPermission = permissions.filter(permission => permission.rsname == 'teams-dashboard');
871
+ team.supervisedTeams = [];
872
+
873
+ if (teamPermission.length > 0) {
874
+
875
+ let permissionScopes = teamPermission[0].scopes;
876
+
877
+ for (let scope of permissionScopes) {
878
+ let teamName = scope.split('-group');
879
+
880
+ let URL3 = keycloakConfig["auth-server-url"] + 'admin/realms/' + keycloakConfig.realm + '/groups?search=' + teamName[0] + '&exact=true';
881
+ config.url = URL3
882
+
883
+ try {
884
+ let groupData = await requestController.httpRequest(config, true);
885
+
886
+ if (groupData.data.length > 0) {
887
+
888
+ let supervisedTeam = {
889
+ 'teamId': groupData.data[0].id,
890
+ 'teamName': groupData.data[0].name
891
+ }
892
+
893
+ team.supervisedTeams.push(supervisedTeam);
894
+ }
895
+ } catch {
896
+ error = await this.checkErrorType(er);
897
+ reject(error);
898
+ }
899
+ }
900
+
901
+ resolve(team);
902
+
903
+ } else {
904
+ resolve(team);
905
+ }
906
+
907
+ } else {
908
+ reject({
909
+ status: 403,
910
+ errorMessage: 'No Teams group assigned to User, please assign one Team to user. If user has no team then assign it default group.'
911
+ });
912
+ }
913
+ } else {
914
+
915
+ team.userTeam = {};
916
+ team.supervisedTeams = [];
917
+
918
+ resolve(team);
919
+ }
920
+
921
+ } catch (er) {
922
+
923
+ error = await this.checkErrorType(er);
924
+ reject(error);
925
+ }
926
+ } catch (er) {
927
+
928
+ error = await this.checkErrorType(er);
929
+ reject(error);
930
+ }
931
+ } catch (er) {
932
+
933
+ error = await this.checkErrorType(er);
934
+ reject(error);
935
+ };
936
+ });
937
+
938
+ }
939
+ */
940
+
799
941
  //function to be used only in teams implementation
800
942
  async getTeamUsers(keycloakObj, groupsIdsArr, userToken) {
801
943
 
@@ -1090,14 +1232,22 @@ class KeycloakService extends Keycloak {
1090
1232
 
1091
1233
  } catch (err) {
1092
1234
 
1093
- if (err.response) {
1235
+ if (err.response && err.response.status !== 404) {
1236
+
1094
1237
  reject({
1095
1238
  status: err.response.status,
1096
1239
  errorMessage: err.response.data
1097
1240
  });
1098
- }
1099
1241
 
1100
- reject(err);
1242
+ } else if(err.message){
1243
+
1244
+ if(err.message !== 'Request failed with status code 404'){
1245
+ reject(err);
1246
+ }
1247
+
1248
+ }else{
1249
+ continue;
1250
+ }
1101
1251
 
1102
1252
  }
1103
1253
 
File without changes