Skip to content

Commit

Permalink
fix authentication and authorization
Browse files Browse the repository at this point in the history
  • Loading branch information
Madmat8 committed Jan 17, 2025
1 parent 407cc9a commit e25376b
Show file tree
Hide file tree
Showing 9 changed files with 1,142 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,25 @@
import hu.blackbelt.judo.generator.commons.annotations.TemplateHelper;
import hu.blackbelt.judo.meta.psm.accesspoint.AbstractActorType;
import hu.blackbelt.judo.meta.psm.derived.ReferenceAccessor;
import hu.blackbelt.judo.meta.psm.namespace.*;
import hu.blackbelt.judo.meta.psm.service.*;
import hu.blackbelt.judo.meta.psm.namespace.Model;
import hu.blackbelt.judo.meta.psm.namespace.NamedElement;
import hu.blackbelt.judo.meta.psm.service.MappedTransferObjectType;
import hu.blackbelt.judo.meta.psm.service.TransferObjectRelation;
import hu.blackbelt.judo.meta.psm.service.TransferObjectType;
import hu.blackbelt.judo.meta.psm.service.TransferOperation;
import hu.blackbelt.judo.meta.psm.support.PsmModelResourceSupport;
import hu.blackbelt.judo.meta.psm.type.*;
import hu.blackbelt.judo.meta.psm.type.EnumerationType;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import java.util.*;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import static hu.blackbelt.judo.psm.generator.jaxrs.api.ObjectTypeHelper.*;
import static hu.blackbelt.judo.psm.generator.jaxrs.api.ObjectTypeHelper.getRealm;
import static hu.blackbelt.judo.psm.generator.jaxrs.api.ObjectTypeHelper.isRangeInputType;

@TemplateHelper
public class ModelHelper extends StaticMethodValueResolver {
Expand Down Expand Up @@ -81,8 +89,7 @@ public static boolean isMapped(TransferObjectType transferObjectType) {
return (transferObjectType instanceof MappedTransferObjectType);
}

public static Set<TransferObjectType> getAllExposedTransferObjectTypesFromAccessPoint(
final TransferObjectType accessPoint) {
public static Set<TransferObjectType> getAllExposedTransferObjectTypesFromAccessPoint(final TransferObjectType accessPoint) {

final Set<TransferObjectType> foundTransferObjectTypes = new HashSet<>();
if (!accessPoint.getOperations().isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ public static String getRealm(AbstractActorType actorType) {
return actorType.getRealm();
}

public static String getRealmLowerCase(AbstractActorType actorType) {
return getRealm(actorType).toLowerCase();
}


private static CacheLoader<TransferObjectType, EntityType> getEntityCacheLoader = new CacheLoader<>() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,21 @@
*/


import com.github.jknack.handlebars.internal.lang3.StringUtils;
import hu.blackbelt.judo.generator.commons.StaticMethodValueResolver;
import hu.blackbelt.judo.generator.commons.annotations.TemplateHelper;

import hu.blackbelt.judo.meta.psm.data.AssociationEnd;
import hu.blackbelt.judo.meta.psm.data.EntityType;
import hu.blackbelt.judo.meta.psm.data.Relation;
import hu.blackbelt.judo.meta.psm.accesspoint.AbstractActorType;
import hu.blackbelt.judo.meta.psm.namespace.Model;
import hu.blackbelt.judo.meta.psm.namespace.NamedElement;
import hu.blackbelt.judo.meta.psm.namespace.Namespace;
import hu.blackbelt.judo.meta.psm.service.*;

import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.List;

import static hu.blackbelt.judo.psm.generator.jaxrs.api.JavaApiHelper.*;
import static hu.blackbelt.judo.psm.generator.jaxrs.api.JavaApiHelper.className;
import static hu.blackbelt.judo.psm.generator.jaxrs.api.JavaApiHelper.namedElementApiParentPath;
import static hu.blackbelt.judo.psm.generator.jaxrs.api.JavaNamespaceHelper.*;
import static hu.blackbelt.judo.psm.generator.jaxrs.api.ModelHelper.getAllExposedTransferObjectTypesFromAccessPoint;
import static hu.blackbelt.judo.psm.generator.jaxrs.api.ModelHelper.modelWrapper;
import static hu.blackbelt.judo.psm.generator.jaxrs.api.ObjectTypeHelper.*;

@TemplateHelper
Expand Down Expand Up @@ -242,4 +240,22 @@ public static String getOperationTagName(TransferOperation transferOperation) {
return logicalFullName(transferObjectType);
}

public static List<AbstractActorType> getActorsOfOperation(Model model, TransferOperation transferOperation) {
return modelWrapper(model)
.getStreamOfPsmAccesspointAbstractActorType()
.filter(actor -> actor.getRealm() != null)
.filter(actor -> getAllExposedTransferObjectTypesFromAccessPoint(actor)
.stream()
.flatMap(to -> to.getOperations().stream())
.anyMatch(operation -> operation.equals(transferOperation)))
.toList();
}

public static List<String> getRealmsOfOperationLowerCase(Model model, TransferOperation transferOperation) {
return getActorsOfOperation(model, transferOperation)
.stream()
.map(actor -> actor.getRealm().toLowerCase())
.toList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,33 @@

package {{ namedElementApiPackageName self }};

@io.swagger.v3.oas.annotations.OpenAPIDefinition(
info = @io.swagger.v3.oas.annotations.info.Info(
title = "{{ model.name }} API",
version = "1.0.0"
),
servers = {
{{# each (allAccessPointActor model) as |actor| }}
@io.swagger.v3.oas.annotations.servers.Server(
description = "{{ actor.name }}",
url = "https://tatami-tests.judo.technology/api/{{ namedElementRestPath actor }}/{{ className actor }}"
),
{{/ each }}
}
)
{{# if (isActorType self) }}
{{# if (getRealm self) }}
@io.swagger.v3.oas.annotations.security.SecuritySchemes(
value = {
@io.swagger.v3.oas.annotations.security.SecurityScheme(
type = io.swagger.v3.oas.annotations.enums.SecuritySchemeType.OPENIDCONNECT,
name = "{{ getRealmLowerCase self }}",
openIdConnectUrl = "https://auth.tatami-tests.judo.technology/auth/realms/{{ getRealm self }}/.well-known/openid-configuration"
),
}
)
{{/ if }}
{{/ if }}
public interface {{ self.applicationClassName }} {

public java.util.Map<java.lang.String, java.lang.Object> getProperties();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,12 @@
@javax.ws.rs.Path("/{{ toJAXRSPath operation model }}")
@hu.blackbelt.judo.dispatcher.api.JudoOperation("{{ operation.operationAsmFqName }}")
{{# if generateOpenApiAnnotations }}
@io.swagger.v3.oas.annotations.Operation(operationId = "{{ operation.operationAsmFqName }}", tags = {"{{ operation.getOperationTagName }}"})
@io.swagger.v3.oas.annotations.Operation(operationId = "{{ operation.operationAsmFqName }}",
tags = {"{{ operation.getOperationTagName }}"}, security = {
{{# each (getRealmsOfOperationLowerCase model operation) as |realm| }}
@io.swagger.v3.oas.annotations.security.SecurityRequirement(name = "{{ realm }}"),
{{/ each }}
})
{{# if operation.output }}
{{# if operation.output.isMany }}
@io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "Successful operation",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,6 @@
package {{ namedElementImplPackageName self }};

@javax.ws.rs.ApplicationPath("{{ namedElementRestPath self }}/{{ className self }}")
@io.swagger.v3.oas.annotations.OpenAPIDefinition(
info = @io.swagger.v3.oas.annotations.info.Info(
title = "{{ model.name }} API",
version = "1.0.0"
),
servers = {
{{# each (allAccessPointActor model) as |actor| }}
@io.swagger.v3.oas.annotations.servers.Server(
description = "{{ actor.name }}",
url = "https://tatami-tests.judo.technology/api/{{ namedElementRestPath actor }}/{{ className actor }}"
),
{{/ each }}
}
{{# if (isActorType self) }}
{{# if (getRealm self) }},
security = {
{{# each (allAccessPointActorWithRealm model) as |actor| }}
@io.swagger.v3.oas.annotations.security.SecurityRequirement(name = "{{ actor.name }}", scopes = {"openid", "email", "profile"}),
{{/ each }}
}
{{/ if }}
{{/ if }}
)
{{# if (isActorType self) }}
{{# if (getRealm self) }}
@io.swagger.v3.oas.annotations.security.SecuritySchemes(
value = {
{{# each (allAccessPointActorWithRealm model) as |actor| }}
@io.swagger.v3.oas.annotations.security.SecurityScheme(
type = io.swagger.v3.oas.annotations.enums.SecuritySchemeType.OPENIDCONNECT,
name = "{{ actor.name }}",
openIdConnectUrl = "https://auth.tatami-tests.judo.technology/auth/realms/{{ getRealm actor }}/.well-known/openid-configuration"
),
{{/ each }}
}
)
{{/ if }}
{{/ if }}
public class {{ applicationImplClassName self }} extends javax.ws.rs.core.Application implements {{ applicationFqName self }} {

private final java.util.Map<java.lang.String, java.lang.Object> properties = new java.util.TreeMap();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
package {{ namedElementImplRestPackageName self }};

public class {{ implClassName self }} implements {{ namedElementApiRestFqName self }} {
{{> rest/api/rest.service.constants.fragment.hbs }};


java.util.Optional<hu.blackbelt.judo.dispatcher.api.Dispatcher> __dispatcher = java.util.Optional.empty();

Expand Down
15 changes: 15 additions & 0 deletions judo-psm-generator-jaxrs-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,20 @@
</configuration>
</execution>

<execution>
<id>execute-psm-test-model-from-artifact-ApplicationSelectionTest</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<psm>
${basedir}/src/test/resources/model/ApplicationSelectionTest-psm.model
</psm>
<destination>${basedir}/target/generated-sources/psm/jaxrs/ApplicationSelectionTest</destination>
</configuration>
</execution>

<execution>
<id>execute-psm-test-model-from-artifact-CRUDActionsTest</id>
<phase>generate-sources</phase>
Expand Down Expand Up @@ -321,6 +335,7 @@
<source>${basedir}/target/generated-sources/psm/jaxrs/DebateTest</source>
<source>${basedir}/target/generated-sources/psm/jaxrs/OperationParametersTest</source>
<source>${basedir}/target/generated-sources/psm/jaxrs/RelationTest</source>
<source>${basedir}/target/generated-sources/psm/jaxrs/ApplicationSelectionTest</source>
</sources>
</configuration>
</execution>
Expand Down
Loading

0 comments on commit e25376b

Please sign in to comment.