Skip to content

Commit 8e511e2

Browse files
committed
Fix handling of individual scope for public read models
1 parent ddf1148 commit 8e511e2

File tree

1 file changed

+75
-51
lines changed

1 file changed

+75
-51
lines changed

src/main/java/org/computate/frFR/java/EcrireApiClasse.java

Lines changed: 75 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2103,6 +2103,7 @@ public void ecrireGenApiServiceImpl2(String classeLangueNom) throws Exception {
21032103
|| classeApiMethode.contains(i18nGlobale.getString(I18n.var_PageUtilisateur))
21042104
|| classeApiMethode.contains(i18nGlobale.getString(I18n.var_Telechargement))
21052105
) {
2106+
// EditPage, DisplayPage, UserPage, Download
21062107
l();
21072108
tl(1, "@Override");
21082109
t(1, "public void ", classeApiOperationIdMethode, "(");
@@ -2137,7 +2138,7 @@ public void ecrireGenApiServiceImpl2(String classeLangueNom) throws Exception {
21372138
tl(4, "form.add(\"permission\", String.format(\"%s#%s\", ", classeNomSimple, ".", i18nGlobale.getString(I18n.var_CLASSE_AUTH_RESSOURCE), ", \"", classeAuthPortee, "\"));");
21382139
}
21392140
tl(4, "if(", classeVarId, " != null)");
2140-
if(classeAuthRessource == null) {
2141+
if(classeAuthRessource == null || !classeRessourcesAutorisation.contains(String.format("%s-%s", classeAuthRessource, classeVarId))) {
21412142
tl(5, "form.add(\"permission\", String.format(\"%s-%s#%s\", ", classeNomSimple, ".", i18nGlobale.getString(I18n.var_CLASSE_AUTH_RESSOURCE), ", ", classeVarId, ", \"", classeApiPortee, "\"));");
21422143
} else {
21432144
tl(5, "form.add(\"permission\", String.format(\"%s#%s\", ", classeVarId, ", \"", classeApiPortee, "\"));");
@@ -2170,7 +2171,7 @@ public void ecrireGenApiServiceImpl2(String classeLangueNom) throws Exception {
21702171
tl(6, "JsonArray authorizationDecisionBody = authorizationDecisionResponse.failed() ? new JsonArray() : authorizationDecision.bodyAsJsonArray();");
21712172
tl(6, "JsonArray scopes = authorizationDecisionBody.stream().map(o -> (JsonObject)o).filter(o -> \"", classeAuthRessource, "\".equals(o.getString(\"rsname\"))).findFirst().map(decision -> ((JsonObject)decision).getJsonArray(\"scopes\")).orElse(new JsonArray());");
21722173
if(classeRessourcesAutorisation.size() > 0) {
2173-
tl(6, "if(!scopes.contains(\"", classeApiPortee, "\") && !", i18nGlobale.getString(I18n.var_classe), i18nGlobale.getString(I18n.var_PublicLire), ") {");
2174+
tl(6, "if(!scopes.contains(\"", classeApiPortee, "\")) {");
21742175
tl(7, "List<String> fqs = new ArrayList<>();");
21752176
for(String classeRessourceAutorisation : classeRessourcesAutorisation) {
21762177

@@ -2181,27 +2182,37 @@ public void ecrireGenApiServiceImpl2(String classeLangueNom) throws Exception {
21812182
tl(9, "}).forEach(permission -> {");
21822183
tl(10, "fqs.add(String.format(\"%s:%s\", \"", StringUtils.substringAfter(classeRessourceAutorisation, "-"), "\", permission.getString(\"rsname\")));");
21832184
tl(10, "permission.getJsonArray(\"scopes\").stream().map(s -> (String)s).forEach(scope -> {");
2184-
tl(11, "if(!scopes.contains(scope))");
2185+
if(classePublicLire) {
2186+
if(classeAuthRessource == null || !classeRessourcesAutorisation.contains(String.format("%s-%s", classeAuthRessource, classeVarId))) {
2187+
tl(11, "if(!scopes.contains(scope) && String.format(\"%s-%s\", ", classeNomSimple, ".", i18nGlobale.getString(I18n.var_CLASSE_AUTH_RESSOURCE), ", ", classeVarId, ").equals(permission.getString(\"rsname\")))");
2188+
} else {
2189+
tl(11, "if(!scopes.contains(scope) && String.format(\"%s\", ", classeVarId, ").equals(permission.getString(\"rsname\")))");
2190+
}
2191+
} else {
2192+
tl(11, "if(!scopes.contains(scope))");
2193+
}
21852194
tl(12, "scopes.add(scope);");
21862195
tl(10, "});");
21872196
tl(9, "});");
21882197
}
2189-
tl(7, "JsonObject authParams = ", i18nGlobale.getString(I18n.var_requeteSite), ".get", i18nGlobale.getString(I18n.var_RequeteService), "().getParams();");
2190-
tl(7, "JsonObject authQuery = authParams.getJsonObject(\"query\");");
2191-
tl(7, "if(authQuery == null) {");
2192-
tl(8, "authQuery = new JsonObject();");
2193-
tl(8, "authParams.put(\"query\", authQuery);");
2194-
tl(7, "}");
2195-
tl(7, "JsonArray fq = authQuery.getJsonArray(\"fq\");");
2196-
tl(7, "if(fq == null) {");
2197-
tl(8, "fq = new JsonArray();");
2198-
tl(8, "authQuery.put(\"fq\", fq);");
2199-
tl(7, "}");
2200-
tl(7, "if(fqs.size() > 0) {");
2201-
tl(8, "fq.add(fqs.stream().collect(Collectors.joining(\" OR \")));");
2202-
tl(8, "if(!scopes.contains(\"", classeApiPortee, "\"))");
2203-
tl(9, "scopes.add(\"", classeApiPortee, "\");");
2204-
tl(8, i18nGlobale.getString(I18n.var_requeteSite), ".setFilteredScope(true);");
2198+
tl(7, "if(!", i18nGlobale.getString(I18n.var_classe), i18nGlobale.getString(I18n.var_PublicLire), ") {");
2199+
tl(8, "JsonObject authParams = ", i18nGlobale.getString(I18n.var_requeteSite), ".get", i18nGlobale.getString(I18n.var_RequeteService), "().getParams();");
2200+
tl(8, "JsonObject authQuery = authParams.getJsonObject(\"query\");");
2201+
tl(8, "if(authQuery == null) {");
2202+
tl(9, "authQuery = new JsonObject();");
2203+
tl(9, "authParams.put(\"query\", authQuery);");
2204+
tl(8, "}");
2205+
tl(8, "JsonArray fq = authQuery.getJsonArray(\"fq\");");
2206+
tl(8, "if(fq == null) {");
2207+
tl(9, "fq = new JsonArray();");
2208+
tl(9, "authQuery.put(\"fq\", fq);");
2209+
tl(8, "}");
2210+
tl(8, "if(fqs.size() > 0) {");
2211+
tl(9, "fq.add(fqs.stream().collect(Collectors.joining(\" OR \")));");
2212+
tl(9, "if(!scopes.contains(\"", classeApiPortee, "\"))");
2213+
tl(10, "scopes.add(\"", classeApiPortee, "\");");
2214+
tl(9, i18nGlobale.getString(I18n.var_requeteSite), ".setFilteredScope(true);");
2215+
tl(8, "}");
22052216
tl(7, "}");
22062217
tl(6, "}");
22072218
tl(6, "{");
@@ -2315,6 +2326,7 @@ public void ecrireGenApiServiceImpl2(String classeLangueNom) throws Exception {
23152326
tl(2, "});");
23162327
tl(1, "}");
23172328
} else {
2329+
// Not EditPage, DisplayPage, UserPage, Download
23182330

23192331
/////////
23202332
// API //
@@ -2435,7 +2447,7 @@ public void ecrireGenApiServiceImpl2(String classeLangueNom) throws Exception {
24352447
}
24362448
if(classeVarId != null) {
24372449
tl(4, "if(", classeVarId, " != null)");
2438-
if(classeAuthRessource == null) {
2450+
if(classeAuthRessource == null || !classeRessourcesAutorisation.contains(String.format("%s-%s", classeAuthRessource, classeVarId))) {
24392451
tl(5, "form.add(\"permission\", String.format(\"%s-%s#%s\", ", classeNomSimple, ".", i18nGlobale.getString(I18n.var_CLASSE_AUTH_RESSOURCE), ", ", classeVarId, ", \"", classeApiPortee, "\"));");
24402452
} else {
24412453
tl(5, "form.add(\"permission\", String.format(\"%s#%s\", ", classeVarId, ", \"", classeApiPortee, "\"));");
@@ -2469,40 +2481,52 @@ public void ecrireGenApiServiceImpl2(String classeLangueNom) throws Exception {
24692481
tl(6, "JsonArray authorizationDecisionBody = authorizationDecisionResponse.failed() ? new JsonArray() : authorizationDecision.bodyAsJsonArray();");
24702482
tl(6, "JsonArray scopes = authorizationDecisionBody.stream().map(o -> (JsonObject)o).filter(o -> \"", classeAuthRessource, "\".equals(o.getString(\"rsname\"))).findFirst().map(decision -> ((JsonObject)decision).getJsonArray(\"scopes\")).orElse(new JsonArray());");
24712483
if(classeRessourcesAutorisation.size() > 0) {
2472-
tl(6, "if(!scopes.contains(\"", classeApiMethodeMethode, "\") && !", i18nGlobale.getString(I18n.var_classe), i18nGlobale.getString(I18n.var_PublicLire), ") {");
2473-
tl(7, "//");
2474-
tl(7, "List<String> fqs = new ArrayList<>();");
2484+
Integer tab = "GET".equals(classeApiMethodeMethode) ? 7 : 6;
2485+
tl(6, "if(!scopes.contains(\"", classeApiPortee, "\")) {");
2486+
tl(tab, "List<String> fqs = new ArrayList<>();");
24752487
for(String classeRessourceAutorisation : classeRessourcesAutorisation) {
24762488

2477-
tl(7, "authorizationDecisionBody.stream().map(o -> (JsonObject)o).filter(permission -> {");
2478-
tl(10, "Matcher mPermission = Pattern.compile(\"^(", StringUtils.substringBefore(classeRessourceAutorisation, "-"), "-([a-z0-9\\\\-]+))$\").matcher(permission.getString(\"rsname\"));");
2479-
tl(10, "return permission.getJsonArray(\"scopes\").contains(\"", classeApiPortee, "\")");
2480-
tl(12, "&& mPermission.find();");
2481-
tl(9, "}).forEach(permission -> {");
2482-
tl(10, "fqs.add(String.format(\"%s:%s\", \"", StringUtils.substringAfter(classeRessourceAutorisation, "-"), "\", permission.getString(\"rsname\")));");
2483-
tl(10, "permission.getJsonArray(\"scopes\").stream().map(s -> (String)s).forEach(scope -> {");
2484-
tl(11, "if(!scopes.contains(scope))");
2485-
tl(12, "scopes.add(scope);");
2486-
tl(10, "});");
2487-
tl(9, "});");
2489+
tl(tab, "authorizationDecisionBody.stream().map(o -> (JsonObject)o).filter(permission -> {");
2490+
tl(tab + 3, "Matcher mPermission = Pattern.compile(\"^(", StringUtils.substringBefore(classeRessourceAutorisation, "-"), "-([a-z0-9\\\\-]+))$\").matcher(permission.getString(\"rsname\"));");
2491+
tl(tab + 3, "return permission.getJsonArray(\"scopes\").contains(\"", classeApiPortee, "\")");
2492+
tl(tab + 5, "&& mPermission.find();");
2493+
tl(tab + 2, "}).forEach(permission -> {");
2494+
tl(tab + 3, "fqs.add(String.format(\"%s:%s\", \"", StringUtils.substringAfter(classeRessourceAutorisation, "-"), "\", permission.getString(\"rsname\")));");
2495+
tl(tab + 3, "permission.getJsonArray(\"scopes\").stream().map(s -> (String)s).forEach(scope -> {");
2496+
if(classePublicLire) {
2497+
if(classeAuthRessource == null || !classeRessourcesAutorisation.contains(String.format("%s-%s", classeAuthRessource, classeVarId))) {
2498+
tl(tab + 4, "if(!scopes.contains(scope) && String.format(\"%s-%s\", ", classeNomSimple, ".", i18nGlobale.getString(I18n.var_CLASSE_AUTH_RESSOURCE), ", ", classeVarId, ").equals(permission.getString(\"rsname\")))");
2499+
} else {
2500+
tl(tab + 4, "if(!scopes.contains(scope) && String.format(\"%s\", ", classeVarId, ").equals(permission.getString(\"rsname\")))");
2501+
}
2502+
} else {
2503+
tl(tab + 4, "if(!scopes.contains(scope))");
2504+
}
2505+
tl(tab + 5, "scopes.add(scope);");
2506+
tl(tab + 3, "});");
2507+
tl(tab + 2, "});");
24882508
}
2489-
tl(7, "JsonObject authParams = ", i18nGlobale.getString(I18n.var_requeteSite), ".get", i18nGlobale.getString(I18n.var_RequeteService), "().getParams();");
2490-
tl(7, "JsonObject authQuery = authParams.getJsonObject(\"query\");");
2491-
tl(7, "if(authQuery == null) {");
2492-
tl(8, "authQuery = new JsonObject();");
2493-
tl(8, "authParams.put(\"query\", authQuery);");
2494-
tl(7, "}");
2495-
tl(7, "JsonArray fq = authQuery.getJsonArray(\"fq\");");
2496-
tl(7, "if(fq == null) {");
2497-
tl(8, "fq = new JsonArray();");
2498-
tl(8, "authQuery.put(\"fq\", fq);");
2499-
tl(7, "}");
2500-
tl(7, "if(fqs.size() > 0) {");
2501-
tl(8, "fq.add(fqs.stream().collect(Collectors.joining(\" OR \")));");
2502-
tl(8, "if(!scopes.contains(\"", classeApiPortee, "\"))");
2503-
tl(9, "scopes.add(\"", classeApiPortee, "\");");
2504-
tl(8, i18nGlobale.getString(I18n.var_requeteSite), ".setFilteredScope(true);");
2505-
tl(7, "}");
2509+
if("GET".equals(classeApiMethodeMethode))
2510+
tl(tab, "if(!", i18nGlobale.getString(I18n.var_classe), i18nGlobale.getString(I18n.var_PublicLire), ") {");
2511+
tl(tab + 1, "JsonObject authParams = ", i18nGlobale.getString(I18n.var_requeteSite), ".get", i18nGlobale.getString(I18n.var_RequeteService), "().getParams();");
2512+
tl(tab + 1, "JsonObject authQuery = authParams.getJsonObject(\"query\");");
2513+
tl(tab + 1, "if(authQuery == null) {");
2514+
tl(tab + 2, "authQuery = new JsonObject();");
2515+
tl(tab + 2, "authParams.put(\"query\", authQuery);");
2516+
tl(tab + 1, "}");
2517+
tl(tab + 1, "JsonArray fq = authQuery.getJsonArray(\"fq\");");
2518+
tl(tab + 1, "if(fq == null) {");
2519+
tl(tab + 2, "fq = new JsonArray();");
2520+
tl(tab + 2, "authQuery.put(\"fq\", fq);");
2521+
tl(tab + 1, "}");
2522+
tl(tab + 1, "if(fqs.size() > 0) {");
2523+
tl(tab + 2, "fq.add(fqs.stream().collect(Collectors.joining(\" OR \")));");
2524+
tl(tab + 2, "if(!scopes.contains(\"", classeApiPortee, "\"))");
2525+
tl(tab + 3, "scopes.add(\"", classeApiPortee, "\");");
2526+
tl(tab + 2, i18nGlobale.getString(I18n.var_requeteSite), ".setFilteredScope(true);");
2527+
tl(tab + 1, "}");
2528+
if("GET".equals(classeApiMethodeMethode))
2529+
tl(tab, "}");
25062530
tl(6, "}");
25072531
}
25082532
if(StringUtils.equals(classeApiMethodeMethode, "GET")) {

0 commit comments

Comments
 (0)