11package com .uid2 .admin .auth ;
22
3-
43import com .okta .jwt .*;
54import com .uid2 .admin .AdminConst ;
65import com .uid2 .shared .auth .Role ;
76import io .vertx .core .Handler ;
87import io .vertx .core .json .JsonObject ;
98import io .vertx .ext .web .RoutingContext ;
10- import org .slf4j .Logger ;
11- import org .slf4j .LoggerFactory ;
129import com .uid2 .shared .audit .AuditParams ;
1310import com .uid2 .shared .audit .Audit ;
1411
1512import java .util .*;
1613
1714public class AdminAuthMiddleware {
18- private static final Logger LOGGER = LoggerFactory . getLogger ( AdminAuthMiddleware .class );
15+ private final Map < Role , List < OktaGroup >> roleToOktaGroups = new EnumMap <>( Role .class );
1916 private final AuthProvider authProvider ;
2017 private final String environment ;
2118 private final boolean isAuthDisabled ;
2219 private final Audit audit ;
2320
24- final Map <Role , List <OktaGroup >> roleToOktaGroups = new EnumMap <>(Role .class );
2521 public AdminAuthMiddleware (AuthProvider authProvider , JsonObject config ) {
2622 this .authProvider = authProvider ;
2723 this .environment = config .getString ("environment" , "local" );
@@ -59,7 +55,6 @@ public Handler<RoutingContext> handle(Handler<RoutingContext> handler, Role... r
5955 return this .handle (handler , new AuditParams (), roles );
6056 }
6157
62-
6358 private Handler <RoutingContext > logAndHandle (Handler <RoutingContext > handler , AuditParams params ) {
6459 return ctx -> {
6560 ctx .addBodyEndHandler (v -> this .audit .log (ctx , params ));
@@ -73,6 +68,7 @@ private static class AdminAuthHandler {
7368 private final Set <Role > allowedRoles ;
7469 private final Map <Role , List <OktaGroup >> roleToOktaGroups ;
7570 private final AuthProvider authProvider ;
71+
7672 private AdminAuthHandler (Handler <RoutingContext > handler , AuthProvider authProvider , Set <Role > allowedRoles ,
7773 String environment , Map <Role , List <OktaGroup >> roleToOktaGroups ) {
7874 this .environment = environment ;
@@ -96,6 +92,7 @@ public static String extractBearerToken(String headerValue) {
9692 }
9793 }
9894 }
95+
9996 private boolean isAuthorizedUser (List <String > userAssignedGroups ) {
10097 for (Role role : allowedRoles ) {
10198 if (roleToOktaGroups .containsKey (role )) {
@@ -109,6 +106,7 @@ private boolean isAuthorizedUser(List<String> userAssignedGroups) {
109106 }
110107 return false ;
111108 }
109+
112110 private boolean isAuthorizedService (List <String > scopes ) {
113111 for (String scope : scopes ) {
114112 if (allowedRoles .contains (OktaCustomScope .fromName (scope ).getRole ())) {
@@ -117,21 +115,22 @@ private boolean isAuthorizedService(List<String> scopes) {
117115 }
118116 return false ;
119117 }
118+
120119 public void handle (RoutingContext rc ) {
121120 // human user
122121 String idToken = null ;
123- if (rc .user () != null && rc .user ().principal () != null ) {
122+ if (rc .user () != null && rc .user ().principal () != null ) {
124123 idToken = rc .user ().principal ().getString ("id_token" );
125124 }
126- if (idToken != null ) {
125+ if (idToken != null ) {
127126 validateIdToken (rc , idToken );
128127 return ;
129128 }
130129
131130 // machine user
132131 String authHeaderValue = rc .request ().getHeader ("Authorization" );
133132 String accessToken = extractBearerToken (authHeaderValue );
134- if (accessToken == null ) {
133+ if (accessToken == null ) {
135134 rc .response ().putHeader ("REQUIRES_AUTH" , "1" ).setStatusCode (401 ).end ();
136135 return ;
137136 }
@@ -146,7 +145,7 @@ private void validateAccessToken(RoutingContext rc, String accessToken) {
146145 rc .response ().setStatusCode (401 ).end ();
147146 return ;
148147 }
149- if (jwt .getClaims ().get ("environment" ) == null || !jwt .getClaims ().get ("environment" ).toString ().equals (environment )) {
148+ if (jwt .getClaims ().get ("environment" ) == null || !jwt .getClaims ().get ("environment" ).toString ().equals (environment )) {
150149 rc .response ().setStatusCode (401 ).end ();
151150 return ;
152151 }
@@ -155,7 +154,7 @@ private void validateAccessToken(RoutingContext rc, String accessToken) {
155154 serviceAccountDetails .put ("scope" , scopes );
156155 serviceAccountDetails .put ("client_id" , jwt .getClaims ().get ("client_id" ));
157156 rc .put ("user_details" , serviceAccountDetails );
158- if (isAuthorizedService (scopes )) {
157+ if (isAuthorizedService (scopes )) {
159158 innerHandler .handle (rc );
160159 } else {
161160 rc .response ().setStatusCode (401 ).end ();
@@ -171,7 +170,7 @@ private void validateIdToken(RoutingContext rc, String idToken) {
171170 rc .response ().putHeader ("REQUIRES_AUTH" , "1" ).setStatusCode (401 ).end ();
172171 return ;
173172 }
174- if (jwt .getClaims ().get ("environment" ) == null || !jwt .getClaims ().get ("environment" ).toString ().equals (environment )) {
173+ if (jwt .getClaims ().get ("environment" ) == null || !jwt .getClaims ().get ("environment" ).toString ().equals (environment )) {
175174 rc .response ().setStatusCode (401 ).end ();
176175 return ;
177176 }
@@ -181,7 +180,7 @@ private void validateIdToken(RoutingContext rc, String idToken) {
181180 userDetails .put ("email" , jwt .getClaims ().get ("email" ));
182181 userDetails .put ("sub" , jwt .getClaims ().get ("sub" ));
183182 rc .put ("user_details" , userDetails );
184- if (isAuthorizedUser (groups )) {
183+ if (isAuthorizedUser (groups )) {
185184 innerHandler .handle (rc );
186185 } else {
187186 rc .response ().setStatusCode (401 ).end ();
0 commit comments