Initial OpenECOMP SDC commit

Change-Id: I0924d5a6ae9cdc161ae17c68d3689a30d10f407b
Signed-off-by: Michael Lando <ml636r@att.com>
diff --git a/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/Login.java b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/Login.java
new file mode 100644
index 0000000..b345824
--- /dev/null
+++ b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/Login.java
@@ -0,0 +1,131 @@
+package org.openecomp.sdc.webseal.simulator;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Collection;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.openecomp.sdc.webseal.simulator.conf.Conf;
+
+public class Login extends HttpServlet {
+
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public void init(final ServletConfig config) throws ServletException {
+		super.init(config);
+	}
+
+	@Override
+	protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
+			throws ServletException, IOException {
+
+		if (null != request.getParameter("userId")) {
+			doPost(request, response);
+			return;
+		}
+		System.out.println("about to build login page");
+		response.setContentType("text/html");
+		PrintWriter writer = response.getWriter();
+		String message = (String) request.getAttribute("message");
+		if (message == null) {
+			message = "";
+		}
+
+		Collection<User> allUsers = Conf.getInstance().getUsers().values();
+		writer.println("<html>");
+		
+		writer.println("<head>");
+		writer.println("<style>");
+		writer.println("body {padding: 40px; font-family: Arial; font-size: 14px;}");
+		writer.println("h1 {background-color: #DDDDDD; padding: 4px 10px;}");
+		writer.println("h2 {margin-top: 20px;}");
+		writer.println(".label {width: 100px; float:left;}");
+		writer.println(".break {display: block; margin-bottom: 10px;}");
+		writer.println("li {margin-bottom: 10px;}");
+		writer.println("</style>");
+		writer.println("</head>");
+		
+		writer.println("<body>");
+		
+		writer.println("<h1>Webseal simulator</h1>");
+		writer.println("<h2>Login:</h2>");
+		
+		writer.println("<form action=\"\" method=\"post\">");
+		writer.println("  <div class='label'>User id:</div>");
+		writer.println("  <input type='text' name='userId'>");
+		writer.println("  <div class='break'></div>");
+		
+		writer.println("  <div class='label'>Password:</div>");
+		writer.println("  <input type='password' name='password'>");
+		writer.println("  <div class='break'></div>");
+		
+		writer.println("  <input type='submit' value='Login'>");
+		writer.println("  <label name='message'></label>");
+		writer.println("</form>");
+		
+		writer.println("<hr/>");
+		writer.println("<h2>Quick links:</h2>");
+		writer.println("<ul>");
+		allUsers.forEach(u -> writer.println("<li>" + u.getUserRef() + " (" + u.getUserId() + ")" + "</li>"));
+		writer.println("</ul>");	
+
+		writer.println("</body>");
+		writer.println("</html>");
+
+	}
+
+	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+
+		String userId = request.getParameter("userId");
+		String password = request.getParameter("password");
+		request.setAttribute("message", "OK");
+
+		System.out.println("Login -> doPOst userId=" + userId);
+		User user = getUser(userId, password);
+		if (user == null) {
+			request.setAttribute("message", "ERROR: attuid or password incorect");
+			doGet(request, response);
+		} else {
+			System.out.println("Login -> doPOst redirext to /sdc1 (to proxy)");
+			Cookie cookieUser = new Cookie("HTTP_IV_USER", user.getUserId());
+			Cookie cookieAttuid = new Cookie("USER_ID", user.getUserId());
+			Cookie cookieFirstName = new Cookie("HTTP_CSP_FIRSTNAME", user.getFirstName());
+			Cookie cookieEmail = new Cookie("HTTP_CSP_EMAIL", user.getEmail());
+			Cookie cookieLastName = new Cookie("HTTP_CSP_LASTNAME", user.getLastName());
+			Cookie cookieRemoteAddress = new Cookie("HTTP_IV_REMOTE_ADDRESS", "0.0.0.0");
+			Cookie cookieWsType = new Cookie("HTTP_CSP_WSTYPE", "Intranet");
+			response.addCookie(cookieUser);
+			response.addCookie(cookieAttuid);
+			response.addCookie(cookieFirstName);
+			response.addCookie(cookieEmail);
+			response.addCookie(cookieLastName);
+			response.addCookie(cookieRemoteAddress);
+			response.addCookie(cookieWsType);
+			response.sendRedirect("/sdc1");
+		}
+
+	}
+
+	private User getUser(String userId, String password) {
+		User user = Conf.getInstance().getUsers().get(userId);
+		if (user == null) {
+			return null;
+		}
+		if (!password.equals(user.getPassword())) {
+			return null;
+		}
+		return user;
+	}
+
+	@Override
+	public String getServletInfo() {
+		return "Http Proxy Servlet";
+	}
+}
diff --git a/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/MethodEnum.java b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/MethodEnum.java
new file mode 100644
index 0000000..6b9b01d
--- /dev/null
+++ b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/MethodEnum.java
@@ -0,0 +1,10 @@
+package org.openecomp.sdc.webseal.simulator;
+
+public enum MethodEnum {
+	
+	GET,
+	POST,
+	PUT,
+	DELETE
+
+}
diff --git a/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/MutableHttpServletRequest.java b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/MutableHttpServletRequest.java
new file mode 100644
index 0000000..74c8a15
--- /dev/null
+++ b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/MutableHttpServletRequest.java
@@ -0,0 +1,55 @@
+package org.openecomp.sdc.webseal.simulator;
+
+
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+public final class MutableHttpServletRequest extends HttpServletRequestWrapper {
+	// holds custom header and value mapping
+	private final Map<String, String> customHeaders;
+
+	public MutableHttpServletRequest(HttpServletRequest request){
+		super(request);
+		this.customHeaders = new HashMap<String, String>();
+	}
+	
+	public void putHeader(String name, String value){
+		this.customHeaders.put(name, value);
+	}
+
+	public String getHeader(String name) {
+		// check the custom headers first
+		String headerValue = customHeaders.get(name);
+		
+		if (headerValue != null){
+			return headerValue;
+		}
+		// else return from into the original wrapped object
+		return ((HttpServletRequest) getRequest()).getHeader(name);
+	}
+
+	public Enumeration<String> getHeaderNames() {
+		// create a set of the custom header names
+		Set<String> set = new HashSet<String>(customHeaders.keySet());
+		
+		// now add the headers from the wrapped request object
+		@SuppressWarnings("unchecked")
+		Enumeration<String> e = ((HttpServletRequest) getRequest()).getHeaderNames();
+		while (e.hasMoreElements()) {
+			// add the names of the request headers into the list
+			String n = e.nextElement();
+			set.add(n);
+		}
+
+		// create an enumeration from the set and return
+		return Collections.enumeration(set);
+	}
+}
+
diff --git a/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/SdcProxy.java b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/SdcProxy.java
new file mode 100644
index 0000000..674f39f
--- /dev/null
+++ b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/SdcProxy.java
@@ -0,0 +1,318 @@
+package org.openecomp.sdc.webseal.simulator;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.GZIPInputStream;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.HttpMethodBase;
+import org.apache.commons.httpclient.methods.DeleteMethod;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.PutMethod;
+import org.openecomp.sdc.webseal.simulator.conf.Conf;
+
+public class SdcProxy extends HttpServlet {
+
+	private static final long serialVersionUID = 1L;
+	private URL url;
+	private HttpClient proxy;
+	private Conf conf;
+	
+	private final String SDC1 = "/sdc1";
+	private final String ONBOARDING = "/onboarding/";
+	private final String SCRIPTS = "/scripts";
+	private final String STYLES = "/styles";
+	private final String LANGUAGES = "/languages";
+	
+
+	public void init(ServletConfig config) throws ServletException {
+		super.init(config);
+		conf = Conf.getInstance();
+		try {
+			String feHost = conf.getFeHost();
+			this.url = new URL(feHost);
+		} catch (MalformedURLException me) {
+			throw new ServletException("Proxy URL is invalid", me);
+		}
+		this.proxy = new HttpClient();
+		this.proxy.getHostConfiguration().setHost(this.url.getHost());
+	}
+
+	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+		proxy(request, response, MethodEnum.GET);
+	}
+
+	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+
+		String userId = request.getParameter("userId");
+		String password = request.getParameter("password");
+
+		// Already sign-in
+		if (userId == null){
+			userId = request.getHeader("USER_ID");
+		}
+
+		System.out.println("SdcProxy -> doPost userId=" + userId);
+		request.setAttribute("message", "OK");
+		if (password != null && getUser(userId, password) == null) {
+			MutableHttpServletRequest mutableRequest = new MutableHttpServletRequest(request);
+			RequestDispatcher view = request.getRequestDispatcher("login");
+			request.setAttribute("message", "ERROR: userid or password incorect");
+			view.forward(mutableRequest, response);
+		} else {
+			System.out.println("SdcProxy -> doPost going to doGet");
+			request.setAttribute("HTTP_IV_USER", userId);
+			proxy(request, response, MethodEnum.POST);
+		}
+	}
+
+	public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+		proxy(request, response, MethodEnum.PUT);
+	}
+
+	public void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+		proxy(request, response, MethodEnum.DELETE);
+	}
+
+	private synchronized void proxy(HttpServletRequest request, HttpServletResponse response, MethodEnum methodEnum) throws IOException, UnsupportedEncodingException, HttpException {
+		Map<String, String[]> requestParameters = request.getParameterMap();
+		System.out.print(request.getRequestURI() + " -> ");
+
+		String userIdHeader = getUseridFromRequest(request);
+		//System.out.print(" (userIdHeader=" + userIdHeader + ") ");
+		User user = getUser(userIdHeader);
+
+		// new request - forward to login page
+		if (userIdHeader == null) {
+			System.out.print("Going to login");
+			response.sendRedirect("/login");
+			return;
+		}
+
+		String uri = getUri(request, requestParameters);
+		HttpMethodBase proxyMethod = getMethod(request, methodEnum, uri);
+		System.out.println(uri);
+		addHeaders(user, proxyMethod);
+		addHeaders(request, proxyMethod);
+		this.proxy.executeMethod(proxyMethod);
+		response.setStatus(proxyMethod.getStatusCode());
+		
+		if (request.getRequestURI().indexOf(".svg") > -1) {
+			response.setContentType("image/svg+xml");
+		}
+		
+		InputStream responseBodyStream = proxyMethod.getResponseBodyAsStream();
+		Header contentEncodingHeader = proxyMethod.getResponseHeader("Content-Encoding");
+		if (contentEncodingHeader != null && contentEncodingHeader.getValue().equalsIgnoreCase("gzip")) {
+			responseBodyStream = new GZIPInputStream(responseBodyStream);
+		}
+		write(responseBodyStream, response.getOutputStream());
+	}
+
+	private void addHeaders(HttpServletRequest request, HttpMethodBase proxyMethod) {
+		Enumeration<String> headerNames = request.getHeaderNames();
+		while (headerNames.hasMoreElements()) {
+			String headerName = headerNames.nextElement();
+			Enumeration<String> headers = request.getHeaders(headerName);
+			while (headers.hasMoreElements()) {
+				String headerValue = headers.nextElement();
+				proxyMethod.addRequestHeader(headerName, headerValue);
+			}
+		}
+	}
+
+	private User getUser(String userId, String password) {
+		User user = getUser(userId);
+		if (user.getPassword().equals(password)) {
+			return user;
+		}
+		return null;
+	}
+
+	private User getUser(String userId) {
+		return conf.getUsers().get(userId);
+
+	}
+	
+	private List<String> getContextPaths(){
+		 List<String> contextPaths = new ArrayList<>();
+		 contextPaths.add(SDC1);
+		 contextPaths.add(ONBOARDING);
+		 contextPaths.add(STYLES);
+		 contextPaths.add(SCRIPTS);
+		 contextPaths.add(LANGUAGES);
+		 return contextPaths;
+	}
+
+	private String getUri(HttpServletRequest request, Map<String, String[]> requestParameters) throws UnsupportedEncodingException {
+		String suffix = request.getRequestURI();
+		if (getContextPaths().stream().anyMatch(request.getRequestURI()::contains))	{
+			suffix = alignUrlProxy(suffix);
+		}
+		StringBuilder query = alignUrlParameters(requestParameters);
+		String uri = String.format("%s%s", new Object[] {this.url.toString() + suffix, query.toString() });
+		return uri;
+	}
+
+	private HttpMethodBase getMethod(HttpServletRequest request, MethodEnum methodEnum, String uri) throws IOException {
+		HttpMethodBase proxyMethod = null;
+		switch (methodEnum) {
+		case GET:
+			proxyMethod = new GetMethod(uri);
+			break;
+		case POST:
+			proxyMethod = new PostMethod(uri);
+			((PostMethod) proxyMethod).setRequestEntity(new InputStreamRequestEntity(request.getInputStream()));
+			break;
+		case PUT:
+			proxyMethod = new PutMethod(uri);
+			((PutMethod) proxyMethod).setRequestBody(getBody(request));
+			break;
+		case DELETE:
+			proxyMethod = new DeleteMethod(uri);
+			break;
+		}
+		return proxyMethod;
+	}
+
+	private String getUseridFromRequest(HttpServletRequest request) {
+
+		String userIdHeader = request.getHeader("USER_ID");
+		if (userIdHeader != null){
+			return userIdHeader;
+		}
+		Object o = request.getAttribute("HTTP_IV_USER");
+		if (o != null) {
+			return o.toString();
+		}
+		Cookie[] cookies = request.getCookies();
+
+		if (cookies != null){
+			for (int i=0; i<cookies.length; ++i){
+				if (cookies[i].getName().equals("USER_ID")){
+					userIdHeader = cookies[i].getValue(); 
+				}
+			}
+		}
+		return userIdHeader;
+	}
+	
+	private void addHeaders(User user, HttpMethodBase proxyMethod) {
+		proxyMethod.addRequestHeader("HTTP_IV_USER", user.getUserId());
+		proxyMethod.addRequestHeader("USER_ID", user.getUserId());
+		proxyMethod.addRequestHeader("HTTP_CSP_FIRSTNAME", user.getFirstName());
+		proxyMethod.addRequestHeader("HTTP_CSP_EMAIL", user.getEmail());
+		proxyMethod.addRequestHeader("HTTP_CSP_LASTNAME", user.getLastName());
+		proxyMethod.addRequestHeader("HTTP_IV_REMOTE_ADDRESS", "0.0.0.0");
+		proxyMethod.addRequestHeader("HTTP_CSP_WSTYPE", "Intranet");
+		proxyMethod.addRequestHeader("HTTP_CSP_EMAIL", "me@mail.com");
+	}
+
+	private String alignUrlProxy(String requestURI) {
+		
+		int i = requestURI.indexOf(ONBOARDING);
+		if (-1 != i){
+			return requestURI.substring(i);
+		}
+		
+		i = requestURI.indexOf(SDC1+SDC1);
+		if (-1 != i){
+			return requestURI.substring(SDC1.length());
+		}
+		
+		i = requestURI.indexOf(SDC1);
+		if (-1 != i){
+			return requestURI;
+		}
+		
+		return SDC1+requestURI;
+	}
+
+	private StringBuilder alignUrlParameters(Map<String, String[]> requestParameters) throws UnsupportedEncodingException {
+		StringBuilder query = new StringBuilder();
+		for (String name : requestParameters.keySet()) {
+			for (String value : (String[]) requestParameters.get(name)) {
+				if (query.length() == 0) {
+					query.append("?");
+				} else {
+					query.append("&");
+				}
+				name = URLEncoder.encode(name, "UTF-8");
+				value = URLEncoder.encode(value, "UTF-8");
+
+				query.append(String.format("&%s=%s", new Object[] { name, value }));
+			}
+		}
+		return query;
+	}
+
+	private void write(InputStream inputStream, OutputStream outputStream) throws IOException {
+		int b;
+		while (inputStream != null && (b = inputStream.read()) != -1) {
+			outputStream.write(b);
+		}
+		outputStream.flush();
+	}
+
+	public String getServletInfo() {
+		return "Http Proxy Servlet";
+	}
+	
+	
+	public String getBody(HttpServletRequest request) throws IOException {
+
+		String body = null;
+		StringBuilder stringBuilder = new StringBuilder();
+		BufferedReader bufferedReader = null;
+
+		try {
+			InputStream inputStream = request.getInputStream();
+			if (inputStream != null) {
+				bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+				char[] charBuffer = new char[128];
+				int bytesRead = -1;
+				while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
+					stringBuilder.append(charBuffer, 0, bytesRead);
+				}
+			} else {
+				stringBuilder.append("");
+			}
+		} catch (IOException ex) {
+			throw ex;
+		} finally {
+			if (bufferedReader != null) {
+				try {
+					bufferedReader.close();
+				} catch (IOException ex) {
+					throw ex;
+				}
+			}
+		}
+
+		body = stringBuilder.toString();
+		return body;
+	}
+}
diff --git a/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/User.java b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/User.java
new file mode 100644
index 0000000..7ec1d93
--- /dev/null
+++ b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/User.java
@@ -0,0 +1,64 @@
+package org.openecomp.sdc.webseal.simulator;
+
+public class User {
+
+	private String firstName;
+	private String lastName;
+	private String email;
+	private String userId;
+	
+	private String password;
+	
+	public User(){		
+	}
+	
+	public User(String userId){
+		setUserId(userId);
+	}
+	
+	public User(String firstName,String lastName,String email,String userId,String password){
+		setUserId(userId);
+		setFirstName(firstName);
+		setLastName(lastName);
+		setEmail(email);
+		setPassword(password);
+	}
+	
+	public String getFirstName() {
+		return firstName;
+	}
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+	public String getLastName() {
+		return lastName;
+	}
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+	public String getEmail() {
+		return email;
+	}
+	public void setEmail(String email) {
+		this.email = email;
+	}
+	public String getUserId() {
+		return userId;
+	}
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+	
+	public String getUserRef() {
+		return "<a href='?userId="+getUserId()+"&password="+getPassword()+"'>"+getFirstName()+" "+getLastName()+"</a>";
+	}
+
+	
+}
diff --git a/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/conf/Conf.java b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/conf/Conf.java
new file mode 100644
index 0000000..cde77c6
--- /dev/null
+++ b/webseal-simulator/src/main/java/org/openecomp/sdc/webseal/simulator/conf/Conf.java
@@ -0,0 +1,67 @@
+package org.openecomp.sdc.webseal.simulator.conf;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.openecomp.sdc.webseal.simulator.User;
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+
+public class Conf {
+
+	private static Conf conf= null;		
+	private String feHost;
+	Map<String,User> users = new HashMap<String,User>();
+	
+	private Conf(){	
+		initConf();
+	}
+	
+	private void initConf() {
+		try{
+			String confPath = System.getProperty("config.resource");			
+			if (confPath == null){
+				System.out.println("config.resource is empty - goint to get it from config.home");
+				confPath = System.getProperty("config.home") + "/webseal.conf";
+			}
+			System.out.println("confPath=" + confPath );
+			Config confFile = ConfigFactory.parseFileAnySyntax(new File(confPath));
+			Config resolve = confFile.resolve();		
+			setFeHost(resolve.getString("webseal.fe"));
+			List<? extends Config> list = resolve.getConfigList("webseal.users");			
+			for (Config conf : list  ){
+				String userId = conf.getString("userId");
+				String password = conf.getString("password");
+				String firstName = conf.getString("firstName");
+				String lastName = conf.getString("lastName");
+				String email = conf.getString("email");
+				users.put(userId,new User(firstName,lastName,email,userId,password));				
+			}
+					
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+	}
+
+	public static Conf getInstance(){
+		if (conf == null){
+			conf = new Conf();
+		}
+		return conf;
+	}
+
+	public String getFeHost() {
+		return feHost;
+	}
+
+	public void setFeHost(String feHost) {
+		this.feHost = feHost;
+	}
+	
+	public Map<String,User> getUsers() {
+		return users;
+	}	
+	
+}
diff --git a/webseal-simulator/src/main/resources/webseal.conf b/webseal-simulator/src/main/resources/webseal.conf
new file mode 100644
index 0000000..4f64552
--- /dev/null
+++ b/webseal-simulator/src/main/resources/webseal.conf
@@ -0,0 +1,64 @@
+{
+	webseal {
+		fe="http://localhost:8181"
+		users = [
+			{
+				userId="cs0008"
+				password="123123a"
+				firstName="Carlos"
+				lastName="Santana"
+				email="csantana@att.com"			
+			},
+			{
+				userId="af0006"
+				password="123123a"
+				firstName="Aretha"
+				lastName="Franklin"
+				email="afranklin@att.com"			
+			},
+			{
+				userId="jh0003"
+				password="123123a"
+				firstName="Jimmy"
+				lastName="Hendrix"
+				email="admin@sdc.com"
+			},
+			{
+				userId="kb0004"
+				password="123123a"
+				firstName="Kate"
+				lastName="Bush"
+				email="tester@sdc.com"
+			},
+			{
+				userId="op0001"
+				password="123123a"
+				firstName="Steve"
+				lastName="Regev"
+				email="ops@sdc.com"
+			},
+			{
+				userId="gv0001"
+				password="123123a"
+				firstName="David"
+				lastName="Shadmi"
+				email="governor@sdc.com"
+			},
+			{
+				userId="pm0001"
+				password="123123a"
+				firstName="Teddy"
+				lastName="Isashar"
+				email="pm1@sdc.com"
+			},
+			{
+				userId="ps0001"
+				password="123123a"
+				firstName="Eden"
+				lastName="Rozin"
+				email="ps1@sdc.com"
+			}
+		]
+	}
+	
+}
\ No newline at end of file
diff --git a/webseal-simulator/src/main/webapp/WEB-INF/jetty-web.xml b/webseal-simulator/src/main/webapp/WEB-INF/jetty-web.xml
new file mode 100644
index 0000000..2e287bc
--- /dev/null
+++ b/webseal-simulator/src/main/webapp/WEB-INF/jetty-web.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"  encoding="UTF-8"?>
+<!DOCTYPE Configure PUBLIC 
+    "-//Mort Bay Consulting//DTD Configure//EN" 
+    "http://www.eclipse.org/jetty/configure_9_0.dtd">
+ 
+<Configure class="org.eclipse.jetty.webapp.WebAppContext">
+     <Set name="contextPath">/</Set>
+</Configure>
diff --git a/webseal-simulator/src/main/webapp/WEB-INF/web.xml b/webseal-simulator/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..787335e
--- /dev/null
+++ b/webseal-simulator/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,32 @@
+<!DOCTYPE web-app PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+ "http://java.sun.com/dtd/web-app_2_3.dtd" >
+
+<web-app>
+
+	<display-name>Archetype Created Web Application</display-name>
+
+	<servlet>
+		<servlet-name>Proxy</servlet-name>
+		<servlet-class>org.openecomp.sdc.webseal.simulator.SdcProxy</servlet-class>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>Proxy</servlet-name>
+		<url-pattern>/*</url-pattern>
+	</servlet-mapping>
+
+	<servlet>
+		<servlet-name>Login</servlet-name>
+		<servlet-class>org.openecomp.sdc.webseal.simulator.Login</servlet-class>
+	</servlet>
+	<servlet-mapping>
+		<servlet-name>Login</servlet-name>
+		<url-pattern>/login</url-pattern>
+	</servlet-mapping>
+	
+	<welcome-file-list>
+		<welcome-file>login</welcome-file>
+	</welcome-file-list>
+
+</web-app>
+
diff --git a/webseal-simulator/src/main/webapp/login.html b/webseal-simulator/src/main/webapp/login.html
new file mode 100644
index 0000000..1760fcf
--- /dev/null
+++ b/webseal-simulator/src/main/webapp/login.html
@@ -0,0 +1,18 @@
+<html>
+<body>
+Login
+
+
+<form action="access" method="post">
+  ATTUID:<br>
+  <input type="text" name="attuid" >
+  <br>
+  PASSWORD:<br>
+  <input type="password" name="password" >
+  <br><br>
+  <input type="submit" value="Submit">
+  
+  <label name="message"/>
+</form>
+</body>
+</html>
\ No newline at end of file