-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
ElytronOidcSubsystemDefinition.java
99 lines (83 loc) · 4.02 KB
/
ElytronOidcSubsystemDefinition.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
* Copyright The WildFly Authors
* SPDX-License-Identifier: Apache-2.0
*/
package org.wildfly.extension.elytron.oidc;
import static org.jboss.as.server.security.VirtualDomainUtil.OIDC_VIRTUAL_SECURITY_DOMAIN_CREATION_SERVICE;
import static org.jboss.as.server.security.VirtualDomainUtil.VIRTUAL_SECURITY_DOMAIN_CREATION_SERVICE;
import java.util.Collection;
import java.util.Collections;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PersistentResourceDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.ReloadRequiredRemoveStepHandler;
import org.jboss.as.controller.SimpleResourceDefinition;
import org.jboss.as.controller.capability.RuntimeCapability;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.server.security.VirtualSecurityDomainCreationService;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.Service;
import org.jboss.msc.service.ServiceController;
import org.jboss.msc.service.ServiceName;
import org.jboss.msc.service.ServiceTarget;
/**
* Root subsystem definition for the Elytron OpenID Connect subsystem.
*
* @author <a href="mailto:fjuma@redhat.com">Farah Juma</a>
*/
class ElytronOidcSubsystemDefinition extends PersistentResourceDefinition {
static final String CONFIG_CAPABILITY_NAME = "org.wildlfly.elytron.oidc";
static final String ELYTRON_CAPABILITY_NAME = "org.wildfly.security.elytron";
static final RuntimeCapability<Void> CONFIG_CAPABILITY =
RuntimeCapability.Builder.of(CONFIG_CAPABILITY_NAME)
.setServiceType(Void.class)
.addRequirements(ELYTRON_CAPABILITY_NAME)
.build();
protected ElytronOidcSubsystemDefinition() {
super(new SimpleResourceDefinition.Parameters(ElytronOidcExtension.SUBSYSTEM_PATH,
ElytronOidcExtension.getResourceDescriptionResolver())
.setAddHandler(new ElytronOidcSubsystemAdd())
.setRemoveHandler(ElytronOidcSubsystemRemove.INSTANCE)
.setCapabilities(CONFIG_CAPABILITY)
);
}
@Override
public Collection<AttributeDefinition> getAttributes() {
return Collections.emptySet();
}
@Override
public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
}
@Override
public void registerChildren(ManagementResourceRegistration resourceRegistration) {
resourceRegistration.registerSubModel(new RealmDefinition());
resourceRegistration.registerSubModel(new ProviderDefinition());
resourceRegistration.registerSubModel(new SecureDeploymentDefinition());
resourceRegistration.registerSubModel(new SecureServerDefinition());
}
private static class ElytronOidcSubsystemRemove extends ReloadRequiredRemoveStepHandler {
static final ElytronOidcSubsystemRemove INSTANCE = new ElytronOidcSubsystemRemove();
private ElytronOidcSubsystemRemove() {
}
@Override
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
if (context.isResourceServiceRestartAllowed()) {
context.removeService(OIDC_VIRTUAL_SECURITY_DOMAIN_CREATION_SERVICE);
} else {
context.reloadRequired();
}
}
@Override
protected void recoverServices(OperationContext context, ModelNode operation, ModelNode model)
throws OperationFailedException {
ServiceTarget target = context.getServiceTarget();
installService(VIRTUAL_SECURITY_DOMAIN_CREATION_SERVICE, new VirtualSecurityDomainCreationService(), target);
}
}
static void installService(ServiceName serviceName, Service<?> service, ServiceTarget serviceTarget) {
serviceTarget.addService(serviceName, service)
.setInitialMode(ServiceController.Mode.ACTIVE)
.install();
}
}