Ravi Nori has uploaded a new change for review.

Change subject: core : Add engine sso
......................................................................

core : Add engine sso

A simple sso login page that takes user name,
password and domain and authenticates the user

Change-Id: I4894fc12653027271b6abd4dd5313b10593703fa
Bug-Url: https://bugzilla.redhat.com/1092744
Signed-off-by: Ravi Nori <[email protected]>
---
A backend/manager/modules/enginesso/pom.xml
A 
backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/EngineSSORedirectServlet.java
A 
backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/EngineSSOServlet.java
A backend/manager/modules/enginesso/src/main/webapp/WEB-INF/login-error.jsp
A backend/manager/modules/enginesso/src/main/webapp/WEB-INF/login.jsp
A backend/manager/modules/enginesso/src/main/webapp/WEB-INF/ovirt.jsp
A backend/manager/modules/enginesso/src/main/webapp/WEB-INF/web.xml
M backend/manager/modules/pom.xml
M ear/pom.xml
9 files changed, 639 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/19/36119/1

diff --git a/backend/manager/modules/enginesso/pom.xml 
b/backend/manager/modules/enginesso/pom.xml
new file mode 100644
index 0000000..6cc989a
--- /dev/null
+++ b/backend/manager/modules/enginesso/pom.xml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <parent>
+        <artifactId>manager-modules</artifactId>
+        <groupId>org.ovirt.engine.core</groupId>
+        <version>3.6.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>enginesso</artifactId>
+    <packaging>war</packaging>
+    <name>ovirt-engine sso</name>
+    <description>oVirt engine sso</description>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.jboss.logging</groupId>
+            <artifactId>jboss-logging</artifactId>
+            <version>3.1.3.GA</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${engine.groupId}</groupId>
+            <artifactId>common</artifactId>
+            <version>${engine.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${engine.groupId}</groupId>
+            <artifactId>aaa</artifactId>
+            <version>${engine.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${engine.groupId}</groupId>
+            <artifactId>bll</artifactId>
+            <version>${engine.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${engine.groupId}</groupId>
+            <artifactId>extensions-manager</artifactId>
+            <version>${engine.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${engine.groupId}</groupId>
+            <artifactId>utils</artifactId>
+            <version>${engine.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.ovirt.engine.api</groupId>
+            <artifactId>ovirt-engine-extensions-api</artifactId>
+            
<version>${org.ovirt.engine.api.ovirt-engine-extensions-api.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.jboss.spec.javax.servlet</groupId>
+            <artifactId>jboss-servlet-api_3.0_spec</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <version>${mockito.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${engine.groupId}</groupId>
+            <artifactId>utils</artifactId>
+            <version>${engine.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${engine.groupId}</groupId>
+            <artifactId>utils</artifactId>
+            <version>${engine.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>${engine.groupId}</groupId>
+            <artifactId>branding</artifactId>
+            <version>${engine.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.ovirt.engine.core</groupId>
+            <artifactId>utils</artifactId>
+            <version>3.6.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.ovirt.engine.core</groupId>
+            <artifactId>utils</artifactId>
+            <version>3.6.0-SNAPSHOT</version>
+        </dependency>
+
+    </dependencies>
+
+
+</project>
diff --git 
a/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/EngineSSORedirectServlet.java
 
b/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/EngineSSORedirectServlet.java
new file mode 100644
index 0000000..5f852d8
--- /dev/null
+++ 
b/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/EngineSSORedirectServlet.java
@@ -0,0 +1,44 @@
+package org.ovirt.engine.core.sso.servlets;
+
+import org.ovirt.engine.core.common.businessentities.EngineSession;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+
+public class EngineSSORedirectServlet extends HttpServlet {
+
+    private static final long serialVersionUID = -2662355980947122988L;
+
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse 
response)
+            throws ServletException, IOException {
+        HttpSession session = request.getSession(false);
+        if (session == null || session.getAttribute("engineSession") == null) {
+            forwardRequest(request, response, "/WEB-INF/login.jsp");
+        } else {
+            EngineSession engineSession = (EngineSession) 
session.getAttribute("engineSession");
+            String module = request.getParameter("module");
+            StringBuilder redirectUrl = new StringBuilder("/ovirt-engine/");
+            redirectUrl.append(module);
+            redirectUrl.append("/login?");
+            redirectUrl.append("engineSessionId=");
+            redirectUrl.append(engineSession.getEngineSessionId());
+            response.sendRedirect(redirectUrl.toString());
+        }
+
+    }
+
+    private void forwardRequest(HttpServletRequest request, 
HttpServletResponse response, String uri)
+            throws ServletException, IOException {
+        RequestDispatcher dispatcher = request.getRequestDispatcher(uri);
+        response.setContentType("text/html;charset=UTF-8");
+        if (dispatcher != null) {
+            dispatcher.include(request, response);
+        }
+    }
+}
diff --git 
a/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/EngineSSOServlet.java
 
b/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/EngineSSOServlet.java
new file mode 100644
index 0000000..7b05359
--- /dev/null
+++ 
b/backend/manager/modules/enginesso/src/main/java/org/ovirt/engine/core/sso/servlets/EngineSSOServlet.java
@@ -0,0 +1,177 @@
+package org.ovirt.engine.core.sso.servlets;
+
+import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.api.extensions.Base;
+import org.ovirt.engine.api.extensions.ExtMap;
+import org.ovirt.engine.api.extensions.aaa.Acct;
+import org.ovirt.engine.api.extensions.aaa.Authn;
+import org.ovirt.engine.core.aaa.AcctUtils;
+import org.ovirt.engine.core.aaa.AuthType;
+import org.ovirt.engine.core.aaa.AuthenticationProfile;
+import org.ovirt.engine.core.aaa.AuthenticationProfileRepository;
+import org.ovirt.engine.core.aaa.filters.FiltersHelper;
+
+import javax.naming.InitialContext;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.ovirt.engine.core.common.action.LoginUserParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.VdcLoginReturnValueBase;
+import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
+import org.ovirt.engine.core.common.businessentities.EngineSession;
+import org.ovirt.engine.core.common.constants.SessionConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class EngineSSOServlet extends HttpServlet {
+
+    private static final long serialVersionUID = -88168919566901736L;
+    private static final String USERNAME = "username";
+    private static final String PASSWORD = "password";
+    private static final String DOMAIN = "domain";
+    private static final Logger log = 
LoggerFactory.getLogger(EngineSSOServlet.class);
+
+    @Override
+    protected void service(HttpServletRequest request, HttpServletResponse 
response)
+            throws ServletException, IOException {
+
+        if (!containsUserCredentials(request.getParameterMap())) {
+            forwardRequest(request, response, "/WEB-INF/login.jsp");
+        } else {
+            String username = request.getParameter(USERNAME);
+            String password = request.getParameter(PASSWORD);
+            String domain = request.getParameter(DOMAIN);
+            Map<String, Object> authResult = new HashMap<>();
+            if (handleCredentials(authResult, username, password, domain)) {
+                EngineSession engineSession = doLogin(authResult, password);
+                log.info("user = " + engineSession.getUserName());
+                HttpSession session = request.getSession(true);
+                session.setAttribute("engineSession", engineSession);
+                forwardRequest(request, response, "/WEB-INF/ovirt.jsp");
+            } else {
+                forwardRequest(request, response, "/WEB-INF/login-error.jsp");
+            }
+        }
+
+    }
+
+    private void forwardRequest(HttpServletRequest request, 
HttpServletResponse response, String uri)
+            throws ServletException, IOException {
+        RequestDispatcher dispatcher = request.getRequestDispatcher(uri);
+        response.setContentType("text/html;charset=UTF-8");
+        if (dispatcher != null) {
+            dispatcher.include(request, response);
+        }
+    }
+
+    private boolean handleCredentials(Map<String, Object> authResult, String 
username, String password, String domain) {
+        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(domain)) {
+            return false;
+        }
+        UserProfile userProfile = translateUser(username, domain);
+        boolean authenticated = false;
+        if (userProfile == null || userProfile.profile == null) {
+            log.error("Error in obtaining profile {}", userProfile.profile);
+        } else {
+            ExtMap outputMap = userProfile.profile.getAuthn().invoke(new 
ExtMap().mput(
+                            Base.InvokeKeys.COMMAND,
+                            Authn.InvokeCommands.AUTHENTICATE_CREDENTIALS
+                    ).mput(
+                            Authn.InvokeKeys.USER,
+                            userProfile.userName
+                    ).mput(
+                            Authn.InvokeKeys.CREDENTIALS,
+                            password
+                    )
+            );
+            if (outputMap.<Integer>get(Base.InvokeKeys.RESULT) == 
Base.InvokeResult.SUCCESS &&
+                    outputMap.<Integer>get(Authn.InvokeKeys.RESULT) == 
Authn.AuthResult.SUCCESS) {
+                authResult.put(FiltersHelper.Constants.REQUEST_AUTH_RECORD_KEY,
+                        outputMap.<ExtMap>get(Authn.InvokeKeys.AUTH_RECORD));
+                authResult.put(FiltersHelper.Constants.REQUEST_AUTH_TYPE_KEY, 
AuthType.CREDENTIALS);
+                authResult.put(FiltersHelper.Constants.REQUEST_PROFILE_KEY, 
userProfile.profile.getName());
+                authenticated = true;
+            } else {
+                if (outputMap.<Integer>get(Base.InvokeKeys.RESULT) != 
Base.InvokeResult.SUCCESS
+                        || outputMap.<Integer>get(Authn.InvokeKeys.RESULT) != 
Authn.AuthResult.SUCCESS) {
+                    AcctUtils.reportRecords(
+                            Acct.ReportReason.PRINCIPAL_LOGIN_FAILED,
+                            userProfile.userName,
+                            null,
+                            null,
+                            "Basic authentication failed for User %1$s.",
+                            userProfile.userName
+                    );
+                }
+                log.error("Failure in authentication to profile {}. Invocation 
Result code is {}. Authn result code is {}",
+                        userProfile.profile,
+                        outputMap.<Integer>get(Base.InvokeKeys.RESULT),
+                        outputMap.<Integer>get(Authn.InvokeKeys.RESULT)
+                );
+            }
+        }
+        return authenticated;
+    }
+
+    public EngineSession doLogin(Map<String, Object> authResult, String 
password) throws IOException,
+            ServletException {
+        EngineSession engineSession = null;
+        String profileName = (String) 
authResult.get(FiltersHelper.Constants.REQUEST_PROFILE_KEY);
+        ExtMap authRecord = (ExtMap) 
authResult.get(FiltersHelper.Constants.REQUEST_AUTH_RECORD_KEY);
+        if (authRecord != null) {
+            try {
+                InitialContext context = new InitialContext();
+                VdcLoginReturnValueBase returnValue = 
(VdcLoginReturnValueBase) FiltersHelper.getBackend(context).login(
+                        new LoginUserParameters(
+                                profileName,
+                                authRecord,
+                                password,
+                                VdcActionType.LoginUser,
+                                AuthType.CREDENTIALS
+                        )
+                );
+                if (returnValue.getSucceeded()) {
+                    authResult.put(
+                            
SessionConstants.HTTP_SESSION_ENGINE_SESSION_ID_KEY,
+                            returnValue.getSessionId()
+                    );
+                    log.info("returnValue.getSessionId() = " + 
returnValue.getSessionId());
+                    DbUser user = (DbUser) returnValue.getActionReturnValue();
+                    engineSession = new EngineSession(user, 
returnValue.getSessionId());
+                }
+            } catch (Exception ex) {
+                log.error("Error in login to engine ", ex);
+            }
+        }
+        return engineSession;
+    }
+
+    private UserProfile translateUser(String username, String domain) {
+        AuthenticationProfile profile = 
AuthenticationProfileRepository.getInstance().getProfile(domain);
+        UserProfile result = profile != null ? new UserProfile(username, 
profile) : null;
+        return result;
+    }
+
+    private boolean containsUserCredentials(Map<String, String[]> parameters) {
+        return parameters.containsKey(USERNAME) && 
parameters.containsKey(PASSWORD) && parameters.containsKey(DOMAIN);
+    }
+
+    private static class UserProfile {
+
+        private String userName;
+        private AuthenticationProfile profile;
+
+        public UserProfile(String user, AuthenticationProfile profile) {
+            this.userName = user;
+            this.profile = profile;
+        }
+    }
+}
diff --git 
a/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/login-error.jsp 
b/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/login-error.jsp
new file mode 100644
index 0000000..e319079
--- /dev/null
+++ b/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/login-error.jsp
@@ -0,0 +1,61 @@
+<%@ page pageEncoding="UTF-8" session="false" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"; %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"; %>
+<%@ taglib prefix="obrand" uri="obrand" %>
+<fmt:setLocale value="${locale}" />
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+    <obrand:favicon />
+    <title>Login Page</title>
+    <obrand:stylesheets />
+</head>
+<body>
+<div class="obrand_loginPageBackground">
+        <a href="<obrand:messages key="obrand.common.vendor_url"/>" 
class="obrand_loginPageLogoImageLink">
+             <span class="obrand_loginPageLogoImage"></span>
+        </a>
+        <div class="login-pf">
+            <div class="container">
+                <div class="row">
+
+                    <div class="col-sm-12">
+                        <div id="brand">
+                            <div class="obrand_loginFormLogoImage"></div>
+                        </div>
+                    </div>
+                    <div class="col-sm-12">
+                        <div style="width:250px;">
+                        <form id="login_form" name="login_form" method="post"
+                                action="" 
enctype="application/x-www-form-urlencoded">
+                            <center>
+                                <p style="color: red">Login failed, please try 
again.</p>
+                            </center>
+                            <div style="margin-left: 15px;width:250px;">
+                                <p>
+                                    <label for="username" style="width:70px;"> 
Username</label><input id="username"
+                                          type="text" name="username" 
size="20" style="color:black;"/>
+                                </p>
+                                <p>
+                                    <label for="password" style="width:70px;"> 
Password</label><input id="password"
+                                          type="password" name="password" 
value="" size="20" style="color:black;"/>
+                                </p>
+                                <p>
+                                    <label for="domain" style="width:70px;"> 
Domain</label><input id="domain"
+                                          type="text" name="domain" value="" 
size="20" style="color:black;"/>
+                                </p>
+                                <center>
+                                    <input id="submit" type="submit" 
name="submit" value="Login"
+                                          class="buttonmed" />
+                                </center>
+                            </div>
+                        </form>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</body>
+</html>
diff --git 
a/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/login.jsp 
b/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/login.jsp
new file mode 100644
index 0000000..7a5db6c
--- /dev/null
+++ b/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/login.jsp
@@ -0,0 +1,62 @@
+<%@ page pageEncoding="UTF-8" session="false" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"; %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"; %>
+<%@ taglib prefix="obrand" uri="obrand" %>
+<fmt:setLocale value="${locale}" />
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+    <obrand:favicon />
+    <title>Login Page</title>
+    <obrand:stylesheets />
+</head>
+<body>
+<div class="obrand_loginPageBackground">
+        <a href="<obrand:messages key="obrand.common.vendor_url"/>" 
class="obrand_loginPageLogoImageLink">
+             <span class="obrand_loginPageLogoImage"></span>
+        </a>
+        <div class="login-pf">
+            <div class="container">
+                <div class="row">
+
+                    <div class="col-sm-12">
+                        <div id="brand">
+                            <div class="obrand_loginFormLogoImage"></div>
+                        </div>
+                    </div>
+
+                    <div class="col-sm-12">
+                        <div style="width:250px;">
+                        <form id="login_form" name="login_form" method="post"
+                                action="" 
enctype="application/x-www-form-urlencoded">
+                            <center>
+                                <p>Please login to proceed.</p>
+                            </center>
+                            <div style="margin-left: 15px;width:250px;">
+                                <p>
+                                    <label for="username" style="width:70px;"> 
Username</label><input id="username"
+                                          type="text" name="username" 
size="20" style="color:black;"/>
+                                </p>
+                                <p>
+                                    <label for="password" style="width:70px;"> 
Password</label><input id="password"
+                                          type="password" name="password" 
value="" size="20" style="color:black;"/>
+                                </p>
+                                <p>
+                                    <label for="domain" style="width:70px;"> 
Domain</label><input id="domain"
+                                          type="text" name="domain" value="" 
size="20" style="color:black;"/>
+                                </p>
+                                <center>
+                                    <input id="submit" type="submit" 
name="submit" value="Login"
+                                          class="buttonmed" />
+                                </center>
+                            </div>
+                           </form>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</body>
+</html>
diff --git 
a/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/ovirt.jsp 
b/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/ovirt.jsp
new file mode 100644
index 0000000..70571f4
--- /dev/null
+++ b/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/ovirt.jsp
@@ -0,0 +1,44 @@
+<%@ page pageEncoding="UTF-8" session="false" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"; %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"; %>
+<%@ taglib prefix="obrand" uri="obrand" %>
+<fmt:setLocale value="${locale}" />
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+    <obrand:favicon />
+    <title>oVirt Engine</title>
+    <obrand:stylesheets />
+</head>
+<body>
+<div class="obrand_loginPageBackground">
+        <a href="<obrand:messages key="obrand.common.vendor_url"/>" 
class="obrand_loginPageLogoImageLink">
+             <span class="obrand_loginPageLogoImage"></span>
+        </a>
+        <div class="login-pf">
+            <div class="container">
+                <div class="row">
+
+                    <div class="col-sm-12">
+                        <div id="brand">
+                            <div class="obrand_loginFormLogoImage"></div>
+                        </div>
+                    </div>
+
+                    <div class="col-sm-12 welcome-title-wrapper">
+                        <span class="welcome-title">Welcome to Open 
Virtualization Manager</span>
+                    </div>
+
+                    <div class="col-sm-12">
+                        <a id="userportal" 
href="/ovirt-engine/sso/sso-redirect?module=userportal">User Portal</a><br>
+                        <a id="webadmin" 
href="/ovirt-engine/sso/sso-redirect?module=webadmin">Administration Portal</a>
+                    </div>
+
+                </div>
+            </div>
+        </div>
+    </div>
+</body>
+</html>
+
diff --git a/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/web.xml 
b/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..1c51698
--- /dev/null
+++ b/backend/manager/modules/enginesso/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0"?>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
+         version="2.5">
+
+    <!-- Application with context parameters -->
+    <context-param>
+        <param-name>obrandThemePath</param-name>
+        <param-value>/theme</param-value>
+    </context-param>
+    <context-param>
+        <param-name>obrandResourcePath</param-name>
+        <param-value>/theme-resource</param-value>
+    </context-param>
+    <context-param>
+        <param-name>obrandApplicationName</param-name>
+        <param-value>welcome</param-value>
+    </context-param>
+
+    <!-- Branding Servlet -->
+    <servlet>
+        <servlet-name>BrandingServlet</servlet-name>
+        
<servlet-class>org.ovirt.engine.core.branding.BrandingServlet</servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>BrandingServlet</servlet-name>
+        <url-pattern>/theme/*</url-pattern>
+    </servlet-mapping>
+
+    <!-- Branding Cascading Resource Servlet -->
+    <servlet>
+        <servlet-name>BrandingCascadingResourceServlet</servlet-name>
+        
<servlet-class>org.ovirt.engine.core.branding.BrandingCascadingResourceServlet</servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>BrandingCascadingResourceServlet</servlet-name>
+        <url-pattern>/theme-resource/*</url-pattern>
+    </servlet-mapping>
+
+
+
+    <!-- Filters -->
+    <!-- Locale Filter, determines the user locale -->
+    <filter>
+        <filter-name>LocaleFilter</filter-name>
+        
<filter-class>org.ovirt.engine.core.utils.servlet.LocaleFilter</filter-class>
+    </filter>
+    <!-- Branding Filter, passes branding information to jsps -->
+    <filter>
+        <filter-name>BrandingFilter</filter-name>
+        
<filter-class>org.ovirt.engine.core.branding.BrandingFilter</filter-class>
+    </filter>
+
+    <!-- Header filter to automatically add some headers to each response -->
+    <filter>
+        <filter-name>HeaderFilter</filter-name>
+        
<filter-class>org.ovirt.engine.core.utils.servlet.HeaderFilter</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>HeaderFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+    <filter-mapping>
+        <filter-name>LocaleFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+        <dispatcher>REQUEST</dispatcher>
+        <dispatcher>ERROR</dispatcher>
+    </filter-mapping>
+
+    <filter-mapping>
+        <filter-name>BrandingFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+        <dispatcher>FORWARD</dispatcher>
+        <dispatcher>REQUEST</dispatcher>
+        <dispatcher>ERROR</dispatcher>
+    </filter-mapping>
+
+    <servlet>
+        <servlet-name>EngineSSOServlet</servlet-name>
+        
<servlet-class>org.ovirt.engine.core.sso.servlets.EngineSSOServlet</servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>EngineSSOServlet</servlet-name>
+        <url-pattern>/index.html</url-pattern>
+    </servlet-mapping>
+
+    <servlet>
+        <servlet-name>EngineSSORedirectServlet</servlet-name>
+        
<servlet-class>org.ovirt.engine.core.sso.servlets.EngineSSORedirectServlet</servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>EngineSSORedirectServlet</servlet-name>
+        <url-pattern>/sso-redirect</url-pattern>
+    </servlet-mapping>
+
+    <welcome-file-list>
+        <welcome-file>index.html</welcome-file>
+    </welcome-file-list>
+
+</web-app>
diff --git a/backend/manager/modules/pom.xml b/backend/manager/modules/pom.xml
index 73d590c..0b1b882 100644
--- a/backend/manager/modules/pom.xml
+++ b/backend/manager/modules/pom.xml
@@ -15,6 +15,7 @@
   <description>parent POM for all oVirt modules</description>
 
   <modules>
+    <module>enginesso</module>
     <module>extensions-api-root</module>
     <module>uutils</module>
     <module>extensions-manager</module>
diff --git a/ear/pom.xml b/ear/pom.xml
index 8bdb747..f5f9a43 100644
--- a/ear/pom.xml
+++ b/ear/pom.xml
@@ -65,6 +65,13 @@
 
     <dependency>
       <groupId>org.ovirt.engine.core</groupId>
+      <artifactId>enginesso</artifactId>
+      <version>${engine.version}</version>
+      <type>war</type>
+    </dependency>
+
+    <dependency>
+      <groupId>org.ovirt.engine.core</groupId>
       <artifactId>welcome</artifactId>
       <version>${engine.version}</version>
       <type>war</type>
@@ -219,6 +226,13 @@
 
             <webModule>
               <groupId>org.ovirt.engine.core</groupId>
+              <artifactId>enginesso</artifactId>
+              <bundleFileName>enginesso.war</bundleFileName>
+              <contextRoot>/ovirt-engine/sso</contextRoot>
+            </webModule>
+
+            <webModule>
+              <groupId>org.ovirt.engine.core</groupId>
               <artifactId>welcome</artifactId>
               <bundleFileName>welcome.war</bundleFileName>
               <contextRoot>/ovirt-engine</contextRoot>


-- 
To view, visit http://gerrit.ovirt.org/36119
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4894fc12653027271b6abd4dd5313b10593703fa
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to