Discovery Script#
Overview#
This script is used to modify the response of the OpenID well-known discovery endpoint, /.well-known/openid-configuration. The specification for this endpoint is defined in the OpenID Connect documentation.
Interface#
Methods#
The discovery interception script extends the base script type with the init, destroy and getApiVersion methods:
| Inherited Methods | Method description | 
|---|---|
| def init(self, customScript, configurationAttributes) | This method is only called once during the script initialization. It can be used for global script initialization, initiate objects etc | 
| def destroy(self, configurationAttributes) | This method is called once to destroy events. It can be used to free resource and objects created in the init()method | 
| def getApiVersion(self, configurationAttributes, customScript) | The getApiVersion method allows API changes in order to do transparent migration from an old script to a new API. Only include the customScript variable if the value for getApiVersion is greater than 10 | 
The configurationAttributes parameter is java.util.Map<String, SimpleCustomProperty>.
The discovery interception script also adds the following method(s):
| Method | def modifyResponse(self, responseAsJsonObject, context) | 
|---|---|
| Method Paramater | responseAsJsonObjectisorg.json.JSONObjectcontextisio.jans.as.server.model.common.ExecutionContext | 
Objects#
Definitions of all objects used in the script
Objects#
| Object name | Object description | 
|---|---|
| customScript | The custom script object. Reference | 
| configurationAttributes | configurationPropertiespassed in when adding custom script.Map<String, SimpleCustomProperty> configurationAttributes | 
| SimpleCustomProperty | Map of configuration properties. Reference | 
| context | Reference | 
Common Use Case#
Script Type: Python#
Add custom values to the OpenID configuration endpoint#
from io.jans.model.custom.script.type.discovery import DiscoveryType
from java.lang import String
class Discovery(DiscoveryType):
    def __init__(self, currentTimeMillis):
        self.currentTimeMillis = currentTimeMillis
    def init(self, customScript, configurationAttributes):
        print "Custom Discovery script. Initializing ..."
        print "Custom Discovery script. Initialized successfully"
        return True
    def destroy(self, configurationAttributes):
        print "Custom Discovery script. Destroying ..."
        print "Custom Discovery script. Destroyed successfully"
        return True
    def getApiVersion(self):
        return 11
    # Returns boolean, true - apply Discovery method, false - ignore it.
    # This method is called after Discovery response is ready. This method can modify Discovery response.
    # Note :
    # responseAsJsonObject - is org.json.JSONObject, you can use any method to manipulate json
    # context is reference of io.jans.as.server.model.common.ExecutionContext (in https://github.com/JanssenProject project, )
    def modifyResponse(self, responseAsJsonObject, context):
        print "Custom - Inside modifyResponse method of Discovery script ...."
        # Add a value to Discovery Response
        responseAsJsonObject.accumulate("key_from_script", "value_from_script")
        # Filter out a value from Discovery Response
        responseAsJsonObject.remove("pushed_authorization_request_endpoint")
        # Get an IP Address of the Client making the request
        responseAsJsonObject.accumulate("Client IP Address", context.getHttpRequest().getHeader("X-Forwarded-For"))
        return True
Script Type: Python#
Add custom values, remove values, and add client's IP request#
from io.jans.model.custom.script.type.discovery import DiscoveryType
from java.lang import String
class Discovery(DiscoveryType):
    def __init__(self, currentTimeMillis):
      self.currentTimeMillis = currentTimeMillis
    def init(self, customScript, configurationAttributes):
        print "Custom Discovery script. Initializing ..."
        print "Custom Discovery script. Initialized successfully"
        return True
   def destroy(self, configurationAttributes):
       print "Custom Discovery script. Destroying ..."
       print "Custom Discovery script. Destroyed successfully"
       return True
    def getApiVersion(self):
      return 11
   def modifyResponse(self, responseAsJsonObject, context):
       print "Custom - Inside modifyResponse method of Discovery script ...."
       # Add a value to Discovery Response
       responseAsJsonObject.accumulate("key_from_script", "value_from_script")
       # Filter out a value from Discovery Response
       responseAsJsonObject.remove("pushed_authorization_request_endpoint")
       # Get an IP Address of the Client making the request
       responseAsJsonObject.accumulate("Client IP Address", context.getHttpRequest().getHeader("X-Forwarded-For"))
       return True
Script Type: Java#
Add custom values, remove values, and add client's IP request#
import io.jans.model.SimpleCustomProperty;
import io.jans.model.custom.script.model.CustomScript;
import io.jans.model.custom.script.type.discovery.DiscoveryType;
import io.jans.service.custom.script.CustomScriptManager;
import io.jans.as.server.model.common.ExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.json.JSONObject;
import java.util.Map;
public class Discovery implements DiscoveryType {
    private static final Logger log = LoggerFactory.getLogger(Discovery.class);
    private static final Logger scriptLogger = LoggerFactory.getLogger(CustomScriptManager.class);
    @Override
    public boolean init(Map<String, SimpleCustomProperty> configurationAttributes) {
        log.info("Init of Discovery Java custom script");
        return true;
    }
    @Override
    public boolean init(CustomScript customScript, Map<String, SimpleCustomProperty> configurationAttributes) {
        log.info("Init of Discovery Java custom script");
        scriptLogger.info("Discovery Java script. Initializing ...");
        scriptLogger.info("Discovery Java script. Initialized successfully");
        return true;
    }
    @Override
    public boolean destroy(Map<String, SimpleCustomProperty> configurationAttributes) {
        log.info("Destroy of Discovery Java custom script");
        scriptLogger.info("Discovery Java script. Destroying ...");
        scriptLogger.info("Discovery Java script. Destroyed successfully");
        return true;
    }
    @Override
    public int getApiVersion() {
        return 11;
    }
    @Override
    public boolean modifyResponse(Object responseAsJsonObject, Object context) {
        scriptLogger.info("Custom Java - Inside modifyResponse method of Discovery script ....");
        JSONObject response = (JSONObject) responseAsJsonObject;
        ExecutionContext ctx = (ExecutionContext) context;
        // Add a value to Discovery Response
        response.accumulate("key_from_java", "value_from_script_on_java");
        // Filter out a value from Discovery Response
        response.remove("pushed_authorization_request_endpoint");
        // Get an IP Address of the Client making the request
        response.accumulate("Client IP Address", ctx.getHttpRequest().getHeader("X-Forwarded-For"));
        return true;
    }
}
  
    
      Last update:
      2023-08-16
      
        
Created: 2023-08-16
                
              Created: 2023-08-16
