/** * Gets the specified parameter from the JsonValue. * * @param paramName The parameter name. * @return A {@code Set} of the parameter values. */ private Set<String> getParameter(String paramName) { final JsonValue param = get(paramName); if (param != null) { return (Set<String>) param.getObject(); } return null; }
private ResourceResponse getResourceResponse( Context context, String clientId, Iterable<JsonValue> tokens) throws NotFoundException, InvalidClientException, ServerException, InternalServerErrorException { String realm = getAttributeValue(tokens.iterator().next(), REALM.getOAuthField()); OAuth2ProviderSettings oAuth2ProviderSettings = oAuth2ProviderSettingsFactory.get(context); ClientRegistration clientRegistration = clientRegistrationStore.get(clientId, realm, context); Map<String, String> scopeDescriptions = clientRegistration.getScopeDescriptions(getLocale(context)); Map<String, String> scopes = new HashMap<>(); for (JsonValue token : tokens) { for (String scope : token.get(SCOPE.getOAuthField()).asSet(String.class)) { if (scopeDescriptions.containsKey(scope)) { scopes.put(scope, scopeDescriptions.get(scope)); } else { scopes.put(scope, scope); } } } String displayName = clientRegistration.getDisplayName(getLocale(context)); String expiryDateTime = calculateExpiryDateTime(tokens, oAuth2ProviderSettings); JsonValue content = json( object( field("_id", clientId), field("name", displayName), field("scopes", scopes), field("expiryDateTime", expiryDateTime))); return Responses.newResourceResponse( clientId, String.valueOf(content.getObject().hashCode()), content); }
@Override public byte[] convertFrom(JsonValue jsonValue) { try { return mapper.writeValueAsBytes(jsonValue.getObject()); } catch (IOException e) { throw new IllegalArgumentException("Could not convert input to JSON", e); } }
/** * TODO Implement this method * * <p>{@inheritDoc} */ public Promise<QueryResponse, ResourceException> handleQuery( final Context context, final QueryRequest request, final QueryResourceHandler handler) { EventEntry measure = Publisher.start( Name.get( "openidm/internal/script/" + this.getScriptEntry().getName().getName() + "/query"), null, null); try { final ScriptEntry _scriptEntry = getScriptEntry(); if (!_scriptEntry.isActive()) { throw new ServiceUnavailableException("Inactive script: " + _scriptEntry.getName()); } final Script script = _scriptEntry.getScript(context); script.setBindings(script.createBindings()); customizer.handleQuery(context, request, script.getBindings()); final Function<Void> queryCallback = new Function<Void>() { @Override public Void call(Parameter scope, Function<?> callback, Object... arguments) throws ResourceException, NoSuchMethodException { if (arguments.length == 3 && null != arguments[2]) { if (arguments[2] instanceof Map) {} if (arguments[2] instanceof JsonValue) { } else { throw new NoSuchMethodException( FunctionFactory.getNoSuchMethodMessage("callback", arguments)); } } else if (arguments.length >= 2 && null != arguments[1]) { if (arguments[1] instanceof Map) {} if (arguments[1] instanceof JsonValue) { } else { throw new NoSuchMethodException( FunctionFactory.getNoSuchMethodMessage("callback", arguments)); } } else if (arguments.length >= 1 && null != arguments[0]) { if (arguments[0] instanceof Map) {} if (arguments[0] instanceof JsonValue) { } else { throw new NoSuchMethodException( FunctionFactory.getNoSuchMethodMessage("callback", arguments)); } } else { throw new NoSuchMethodException( FunctionFactory.getNoSuchMethodMessage("callback", arguments)); } return null; } }; script.putSafe("callback", queryCallback); Object rawResult = script.eval(); JsonValue result = null; if (rawResult instanceof JsonValue) { result = (JsonValue) rawResult; } else { result = new JsonValue(rawResult); } QueryResponse queryResponse = newQueryResponse(); // Script can either // - return null and instead use callback hook to call // handleResource, handleResult, handleError // careful! script MUST call handleResult or handleError itself // or // - return a result list of resources // or // - return a full query result structure if (!result.isNull()) { if (result.isList()) { // Script may return just the result elements as a list handleQueryResultList(result, handler); } else { // Or script may return a full query response structure, // with meta-data and results field if (result.isDefined(QueryResponse.FIELD_RESULT)) { handleQueryResultList(result.get(QueryResponse.FIELD_RESULT), handler); queryResponse = newQueryResponse( result.get(QueryResponse.FIELD_PAGED_RESULTS_COOKIE).asString(), result .get(QueryResponse.FIELD_TOTAL_PAGED_RESULTS_POLICY) .asEnum(CountPolicy.class), result.get(QueryResponse.FIELD_TOTAL_PAGED_RESULTS).asInteger()); } else { logger.debug("Script returned unexpected query result structure: ", result.getObject()); return new InternalServerErrorException( "Script returned unexpected query result structure of type " + result.getObject().getClass()) .asPromise(); } } } return queryResponse.asPromise(); } catch (ScriptException e) { return convertScriptException(e).asPromise(); } catch (ResourceException e) { return e.asPromise(); } catch (Exception e) { return new InternalServerErrorException(e.getMessage(), e).asPromise(); } finally { measure.end(); } }