907a0c4925a87c9a9360da5226be2a5c79953e77omebold/*
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
907a0c4925a87c9a9360da5226be2a5c79953e77omebold *
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * Copyright © 2012 ForgeRock Inc. All rights reserved.
907a0c4925a87c9a9360da5226be2a5c79953e77omebold *
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * The contents of this file are subject to the terms
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * of the Common Development and Distribution License
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * (the License). You may not use this file except in
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * compliance with the License.
907a0c4925a87c9a9360da5226be2a5c79953e77omebold *
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * You can obtain a copy of the License at
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * http://forgerock.org/license/CDDLv1.0.html
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * See the License for the specific language governing
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * permission and limitations under the License.
907a0c4925a87c9a9360da5226be2a5c79953e77omebold *
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * When distributing Covered Code, include this CDDL
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * Header Notice in each file and include the License file
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * at http://forgerock.org/license/CDDLv1.0.html
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * If applicable, add the following below the CDDL Header,
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * with the fields enclosed by brackets [] replaced by
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * your own identifying information:
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * "Portions Copyrighted [year] [name of copyright owner]"
907a0c4925a87c9a9360da5226be2a5c79953e77omebold */
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldpackage org.forgerock.openidm.workflow.remote;
907a0c4925a87c9a9360da5226be2a5c79953e77omebold
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport java.util.logging.Level;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.activiti.engine.ProcessEngine;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.activiti.engine.ProcessEngines;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.forgerock.json.resource.restlet.JsonResourceRestlet;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.forgerock.openidm.workflow.activiti.impl.ActivitiResource;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.Application;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.Request;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.Response;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.Restlet;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.data.ChallengeScheme;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.data.Form;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.data.Parameter;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.security.ChallengeAuthenticator;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.security.SecretVerifier;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.restlet.security.Verifier;
907a0c4925a87c9a9360da5226be2a5c79953e77omebold// SLF4J
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.slf4j.Logger;
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldimport org.slf4j.LoggerFactory;
907a0c4925a87c9a9360da5226be2a5c79953e77omebold
907a0c4925a87c9a9360da5226be2a5c79953e77omebold/**
569fae09924cd9aeea04f3f98f55360190773354omebold * Remote client for OpenIDM-Activiti integration
907a0c4925a87c9a9360da5226be2a5c79953e77omebold */
907a0c4925a87c9a9360da5226be2a5c79953e77omeboldpublic class ActivitiIntegrationApplication extends Application {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold
907a0c4925a87c9a9360da5226be2a5c79953e77omebold private final static Logger LOGGER = LoggerFactory.getLogger(ActivitiIntegrationApplication.class);
569fae09924cd9aeea04f3f98f55360190773354omebold
907a0c4925a87c9a9360da5226be2a5c79953e77omebold private ProcessEngine engine;
907a0c4925a87c9a9360da5226be2a5c79953e77omebold private ChallengeAuthenticator authenticator;
907a0c4925a87c9a9360da5226be2a5c79953e77omebold
907a0c4925a87c9a9360da5226be2a5c79953e77omebold /**
907a0c4925a87c9a9360da5226be2a5c79953e77omebold * Creates a root Restlet that will receive all incoming calls.
907a0c4925a87c9a9360da5226be2a5c79953e77omebold */
907a0c4925a87c9a9360da5226be2a5c79953e77omebold @Override
907a0c4925a87c9a9360da5226be2a5c79953e77omebold public synchronized Restlet createInboundRoot() {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold try {
569fae09924cd9aeea04f3f98f55360190773354omebold engine = ProcessEngines.getDefaultProcessEngine();
907a0c4925a87c9a9360da5226be2a5c79953e77omebold } catch (Exception ex) {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold java.util.logging.Logger.getLogger(ActivitiIntegrationApplication.class.getName()).log(Level.SEVERE, null, ex);
907a0c4925a87c9a9360da5226be2a5c79953e77omebold }
907a0c4925a87c9a9360da5226be2a5c79953e77omebold Verifier verifier = new SecretVerifier() {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold
907a0c4925a87c9a9360da5226be2a5c79953e77omebold @Override
907a0c4925a87c9a9360da5226be2a5c79953e77omebold public boolean verify(String username, char[] password) {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold boolean verified = engine.getIdentityService().checkPassword(username, new String(password));
907a0c4925a87c9a9360da5226be2a5c79953e77omebold return verified;
907a0c4925a87c9a9360da5226be2a5c79953e77omebold }
907a0c4925a87c9a9360da5226be2a5c79953e77omebold };
907a0c4925a87c9a9360da5226be2a5c79953e77omebold
907a0c4925a87c9a9360da5226be2a5c79953e77omebold authenticator = new ChallengeAuthenticator(null, true, ChallengeScheme.HTTP_BASIC,
907a0c4925a87c9a9360da5226be2a5c79953e77omebold "Activiti Realm") {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold
907a0c4925a87c9a9360da5226be2a5c79953e77omebold @Override
907a0c4925a87c9a9360da5226be2a5c79953e77omebold protected boolean authenticate(Request request, Response response) {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold if (request.getChallengeResponse() == null) {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold return false;
907a0c4925a87c9a9360da5226be2a5c79953e77omebold } else {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold boolean authenticated = super.authenticate(request, response);
907a0c4925a87c9a9360da5226be2a5c79953e77omebold if (authenticated) {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold Parameter user = ((Form) request.getAttributes().get("org.restlet.http.headers")).getFirst("X-OpenIDM-Username", true);
907a0c4925a87c9a9360da5226be2a5c79953e77omebold if (user != null) {
907a0c4925a87c9a9360da5226be2a5c79953e77omebold engine.getIdentityService().setAuthenticatedUserId(user.getValue());
907a0c4925a87c9a9360da5226be2a5c79953e77omebold }
907a0c4925a87c9a9360da5226be2a5c79953e77omebold }
907a0c4925a87c9a9360da5226be2a5c79953e77omebold return authenticated;
907a0c4925a87c9a9360da5226be2a5c79953e77omebold }
907a0c4925a87c9a9360da5226be2a5c79953e77omebold }
907a0c4925a87c9a9360da5226be2a5c79953e77omebold };
907a0c4925a87c9a9360da5226be2a5c79953e77omebold authenticator.setVerifier(verifier);
907a0c4925a87c9a9360da5226be2a5c79953e77omebold
907a0c4925a87c9a9360da5226be2a5c79953e77omebold JsonResourceRestlet root = new JsonResourceRestlet(new ActivitiResource(engine));
907a0c4925a87c9a9360da5226be2a5c79953e77omebold authenticator.setNext(root);
907a0c4925a87c9a9360da5226be2a5c79953e77omebold return authenticator;
907a0c4925a87c9a9360da5226be2a5c79953e77omebold }
907a0c4925a87c9a9360da5226be2a5c79953e77omebold}