Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
   * as indicated by the @author tags. All rights reserved.
   *
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not
   * use this file except in compliance with the License. You may obtain a copy of
   * the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  * License for the specific language governing permissions and limitations under
  * the License.
  */
 
 package org.keycloak.subsystem.as7;
 
 import  org.jboss.dmr.ModelNode;
 import  org.jboss.dmr.Property;
 
 import java.util.Map;
 
 import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADDRESS;

This service keeps track of the entire Keycloak management model so as to provide adapter configuration to each deployment at deploy time.

Author(s):
Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
 
 public final class KeycloakAdapterConfigService {
     protected Logger log = Logger.getLogger(KeycloakAdapterConfigService.class);
     private static final String CREDENTIALS_JSON_NAME = "credentials";
 
     private static final KeycloakAdapterConfigService INSTANCE = new KeycloakAdapterConfigService();
 
     public static KeycloakAdapterConfigService getInstance() {
         return ;
     }
 
     private final Map<String, ModelNode> realms = new HashMap<String, ModelNode>();
 
     // keycloak-secured deployments
     private final Map<String, ModelNode> secureDeployments = new HashMap<String, ModelNode>();
 
 
     private KeycloakAdapterConfigService() {
     }
 
     public void addRealm(ModelNode operation, ModelNode model) {
         this..put(realmNameFromOp(operation), model.clone());
     }
 
     public void updateRealm(ModelNode operationString attrName, ModelNode resolvedValue) {
         ModelNode realm = this..get(realmNameFromOp(operation));
         realm.get(attrName).set(resolvedValue);
     }
 
     public void removeRealm(ModelNode operation) {
         this..remove(realmNameFromOp(operation));
     }
 
     public void addSecureDeployment(ModelNode operation, ModelNode model) {
         ModelNode deployment = model.clone();
         this..put(deploymentNameFromOp(operation), deployment);
     }
 
     public void updateSecureDeployment(ModelNode operationString attrName, ModelNode resolvedValue) {
         ModelNode deployment = this..get(deploymentNameFromOp(operation));
         deployment.get(attrName).set(resolvedValue);
     }
 
     public void removeSecureDeployment(ModelNode operation) {
         this..remove(deploymentNameFromOp(operation));
     }
 
     public void addCredential(ModelNode operation, ModelNode model) {
         ModelNode credentials = credentialsFromOp(operation);
         if (!credentials.isDefined()) {
             credentials = new ModelNode();
         }
 
         String credentialName = credentialNameFromOp(operation);
         credentials.get(credentialName).set(model.get("value").asString());
 
         ModelNode deployment = this..get(deploymentNameFromOp(operation));
         deployment.get().set(credentials);
     }
 
     public void removeCredential(ModelNode operation) {
         ModelNode credentials = credentialsFromOp(operation);
         if (!credentials.isDefined()) {
             throw new RuntimeException("Can not remove credential.  No credential defined for deployment in op " + operation.toString());
         }
 
        String credentialName = credentialNameFromOp(operation);
        credentials.remove(credentialName);
    }
    public void updateCredential(ModelNode operationString attrName, ModelNode resolvedValue) {
        ModelNode credentials = credentialsFromOp(operation);
        if (!credentials.isDefined()) {
            throw new RuntimeException("Can not update credential.  No credential defined for deployment in op " + operation.toString());
        }
        String credentialName = credentialNameFromOp(operation);
        credentials.get(credentialName).set(resolvedValue);
    }
    private ModelNode credentialsFromOp(ModelNode operation) {
        ModelNode deployment = this..get(deploymentNameFromOp(operation));
        return deployment.get();
    }
    private String realmNameFromOp(ModelNode operation) {
        return valueFromOpAddress(.operation);
    }
    private String deploymentNameFromOp(ModelNode operation) {
        return valueFromOpAddress(.operation);
    }
    private String credentialNameFromOp(ModelNode operation) {
        return valueFromOpAddress(.operation);
    }
    private String valueFromOpAddress(String addrElement, ModelNode operation) {
        String deploymentName = getValueOfAddrElement(operation.get(ADDRESS), addrElement);
        if (deploymentName == nullthrow new RuntimeException("Can't find '" + addrElement + "' in address " + operation.toString());
        return deploymentName;
    }
    private String getValueOfAddrElement(ModelNode addressString elementName) {
        for (ModelNode element : address.asList()) {
            if (element.has(elementName)) return element.get(elementName).asString();
        }
        return null;
    }
    public String getRealmName(String deploymentName) {
        ModelNode deployment = this..get(deploymentName);
        return deployment.get(.).asString();
    }
    public String getJSON(String deploymentName) {
        ModelNode deployment = this..get(deploymentName);
        String realmName = deployment.get(.).asString();
        ModelNode realm = this..get(realmName);
        ModelNode json = new ModelNode();
        json.get(.).set(realmName);
        // Realm values set first.  Some can be overridden by deployment values.
        if (realm != nullsetJSONValues(jsonrealm);
        setJSONValues(jsondeployment);
        return json.toJSONString(true);
    }
    private void setJSONValues(ModelNode json, ModelNode values) {
        for (Property prop : values.asPropertyList()) {
            String name = prop.getName();
            ModelNode value = prop.getValue();
            if (value.isDefined()) {
                json.get(name).set(value);
            }
        }
    }
    public boolean isSecureDeployment(String deploymentName) {
        //log.info("********* CHECK KEYCLOAK DEPLOYMENT: deployments.size()" + deployments.size());
        return this..containsKey(deploymentName);
    }
New to GrepCode? Check out our FAQ X