[AAF-21] Initial code import

Change-Id: I63d7d499bbd46f500b5f5a4db966166f613f327a
Signed-off-by: sg481n <sg481n@att.com>
diff --git a/authz-fs/src/main/config/FileServer.props b/authz-fs/src/main/config/FileServer.props
new file mode 100644
index 0000000..ed1506e
--- /dev/null
+++ b/authz-fs/src/main/config/FileServer.props
@@ -0,0 +1,20 @@
+##
+## AUTHZ API (authz-service) Properties
+##
+
+hostname=_HOSTNAME_
+
+## DISCOVERY (DME2) Parameters on the Command Line
+AFT_LATITUDE=_AFT_LATITUDE_
+AFT_LONGITUDE=_AFT_LONGITUDE_
+AFT_ENVIRONMENT=_AFT_ENVIRONMENT_
+DEPLOYED_VERSION=_ARTIFACT_VERSION_
+
+DMEServiceName=service=com.att.authz.authz-fs/version=_MAJOR_VER_._MINOR_VER_._PATCH_VER_/envContext=_ENV_CONTEXT_/routeOffer=_ROUTE_OFFER_
+AFT_DME2_PORT_RANGE=_AUTHZ_FS_PORT_RANGE_
+AFT_DME2_SSL_ENABLE=false
+AFT_DME2_DISABLE_PERSISTENT_CACHE=true
+
+CFA_WebPath=_ROOT_DIR_/data
+CFA_ClearCommand=FmzYPpMY918MwE1hyacoiFSt
+CFA_MaxSize=2000000
\ No newline at end of file
diff --git a/authz-fs/src/main/config/log4j.properties b/authz-fs/src/main/config/log4j.properties
new file mode 100644
index 0000000..38593d6
--- /dev/null
+++ b/authz-fs/src/main/config/log4j.properties
@@ -0,0 +1,91 @@
+#-------------------------------------------------------------------------------

+# ============LICENSE_START====================================================

+# * org.onap.aai

+# * ===========================================================================

+# * Copyright © 2017 AT&T Intellectual Property. All rights reserved.

+# * Copyright © 2017 Amdocs

+# * ===========================================================================

+# * Licensed under the Apache License, Version 2.0 (the "License");

+# * you may not use this file except in compliance with the License.

+# * You may obtain a copy of the License at

+# * 

+#  *      http://www.apache.org/licenses/LICENSE-2.0

+# * 

+#  * Unless required by applicable law or agreed to in writing, software

+# * distributed under the License is distributed on an "AS IS" BASIS,

+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+# * See the License for the specific language governing permissions and

+# * limitations under the License.

+# * ============LICENSE_END====================================================

+# *

+# * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+# *

+#-------------------------------------------------------------------------------

+###############################################################################

+# Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.

+###############################################################################

+#

+# Licensed to the Apache Software Foundation (ASF) under one

+# or more contributor license agreements.  See the NOTICE file

+# distributed with this work for additional information

+# regarding copyright ownership.  The ASF licenses this file

+# to you under the Apache License, Version 2.0 (the

+# "License"); you may not use this file except in compliance

+# with the License.  You may obtain a copy of the License at

+#

+#     http://www.apache.org/licenses/LICENSE-2.0

+#

+# Unless required by applicable law or agreed to in writing,

+# software distributed under the License is distributed on an

+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+# KIND, either express or implied.  See the License for the

+# specific language governing permissions and limitations

+# under the License.

+#

+log4j.appender.INIT=org.apache.log4j.DailyRollingFileAppender 

+log4j.appender.INIT.File=_LOG_DIR_/${LOG4J_FILENAME_init}

+log4j.appender.INIT.DatePattern='.'yyyy-MM-dd

+#log4j.appender.INIT.MaxFileSize=_MAX_LOG_FILE_SIZE_

+#log4j.appender.INIT.MaxBackupIndex=_MAX_LOG_FILE_BACKUP_COUNT_

+log4j.appender.INIT.layout=org.apache.log4j.PatternLayout 

+log4j.appender.INIT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSSZ} %m %n

+

+

+log4j.appender.FS=org.apache.log4j.DailyRollingFileAppender 

+log4j.appender.FS.File=logs/${LOG4J_FILENAME_authz}

+log4j.appender.FS.DatePattern='.'yyyy-MM-dd

+#log4j.appender.FS.MaxFileSize=_MAX_LOG_FILE_SIZE_

+#log4j.appender.FS.MaxBackupIndex=_MAX_LOG_FILE_BACKUP_COUNT_

+log4j.appender.FS.layout=org.apache.log4j.PatternLayout 

+log4j.appender.FS.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSSZ} %p [%c] %m %n

+

+log4j.appender.AUDIT=org.apache.log4j.DailyRollingFileAppender

+log4j.appender.AUDIT.File=_LOG_DIR_/${LOG4J_FILENAME_audit}

+log4j.appender.AUDIT.DatePattern='.'yyyy-MM-dd

+#log4j.appender.AUDIT.MaxFileSize=_MAX_LOG_FILE_SIZE_

+#log4j.appender.AUDIT.MaxBackupIndex=_MAX_LOG_FILE_BACKUP_COUNT_

+log4j.appender.AUDIT.layout=org.apache.log4j.PatternLayout 

+log4j.appender.AUDIT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSSZ} %m %n

+

+log4j.appender.TRACE=org.apache.log4j.DailyRollingFileAppender

+log4j.appender.TRACE.File=logs/${LOG4J_FILENAME_trace}

+log4j.appender.TRACE.DatePattern='.'yyyy-MM-dd

+#log4j.appender.TRACE.MaxFileSize=_MAX_LOG_FILE_SIZE_

+#log4j.appender.TRACE.MaxBackupIndex=_MAX_LOG_FILE_BACKUP_COUNT_

+log4j.appender.TRACE.layout=org.apache.log4j.PatternLayout 

+log4j.appender.TRACE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSSZ} %m %n

+

+log4j.appender.stdout=org.apache.log4j.ConsoleAppender

+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

+log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] %m %n

+

+# General Apache libraries

+log4j.rootLogger=WARN

+log4j.logger.org.apache=WARN,INIT

+log4j.logger.dme2=WARN,INIT

+log4j.logger.init=INFO,INIT

+log4j.logger.authz=_LOG4J_LEVEL_,FS

+log4j.logger.audit=INFO,AUDIT

+log4j.logger.trace=TRACE,TRACE

+

+

diff --git a/authz-fs/src/main/config/lrm-authz-fs.xml b/authz-fs/src/main/config/lrm-authz-fs.xml
new file mode 100644
index 0000000..a51db07
--- /dev/null
+++ b/authz-fs/src/main/config/lrm-authz-fs.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

+<!--

+  ============LICENSE_START====================================================

+  * org.onap.aai

+  * ===========================================================================

+  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.

+  * Copyright © 2017 Amdocs

+  * ===========================================================================

+  * Licensed under the Apache License, Version 2.0 (the "License");

+  * you may not use this file except in compliance with the License.

+  * You may obtain a copy of the License at

+  * 

+   *      http://www.apache.org/licenses/LICENSE-2.0

+  * 

+   * Unless required by applicable law or agreed to in writing, software

+  * distributed under the License is distributed on an "AS IS" BASIS,

+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+  * See the License for the specific language governing permissions and

+  * limitations under the License.

+  * ============LICENSE_END====================================================

+  *

+  * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+  *

+-->

+<ns2:ManagedResourceList xmlns:ns2="http://scld.att.com/lrm/util" xmlns="http://scld.att.com/lrm/commontypes" xmlns:ns3="http://scld.att.com/lrm/types">

+    <ns2:ManagedResource>

+        <ResourceDescriptor>

+            <ResourceName>com.att.authz._ARTIFACT_ID_</ResourceName>

+            <ResourceVersion>

+                <Major>_MAJOR_VER_</Major>

+                <Minor>_MINOR_VER_</Minor>

+                <Patch>_PATCH_VER_</Patch>                

+            </ResourceVersion>

+            <RouteOffer>_ROUTE_OFFER_</RouteOffer>

+        </ResourceDescriptor>

+        <ResourceType>Java</ResourceType>

+        <ResourcePath>com.att.authz.fs.FileServer</ResourcePath>

+        <ResourceProps>

+            <Tag>process.workdir</Tag>

+            <Value>_ROOT_DIR_</Value>

+        </ResourceProps>    	       

+        <ResourceProps>

+            <Tag>jvm.version</Tag>

+            <Value>1.8</Value>

+        </ResourceProps>

+        <ResourceProps>

+            <Tag>jvm.args</Tag>

+            <Value>-DAFT_LATITUDE=_AFT_LATITUDE_ -DAFT_LONGITUDE=_AFT_LONGITUDE_ -DAFT_ENVIRONMENT=_AFT_ENVIRONMENT_ -Dplatform=_SCLD_PLATFORM_ -Dcom.sun.jndi.ldap.connect.pool.maxsize=20  -Dcom.sun.jndi.ldap.connect.pool.prefsize=10 -Dcom.sun.jndi.ldap.connect.pool.timeout=3000 </Value>

+        </ResourceProps>

+        <ResourceProps>

+            <Tag>jvm.classpath</Tag>

+            <Value>_ROOT_DIR_/etc:_ROOT_DIR_/lib/*:</Value>

+        </ResourceProps>

+        <ResourceProps>

+            <Tag>jvm.heap.min</Tag>

+            <Value>1024m</Value>

+        </ResourceProps>

+        <ResourceProps>

+            <Tag>jvm.heap.max</Tag>

+            <Value>2048m</Value>

+        </ResourceProps>

+        <ResourceProps>

+            <Tag>start.class</Tag>

+            <Value>com.att.authz.fs.FileServer</Value>

+        </ResourceProps>

+        <ResourceProps>

+            <Tag>stdout.redirect</Tag>

+            <Value>_ROOT_DIR_/logs/SystemOut.log</Value>

+        </ResourceProps>

+        <ResourceProps>

+            <Tag>stderr.redirect</Tag>

+            <Value>_ROOT_DIR_/logs/SystemErr.log</Value>

+        </ResourceProps>

+        <ResourceOSID>aft</ResourceOSID>

+        <ResourceStartType>AUTO</ResourceStartType>

+        <ResourceStartPriority>2</ResourceStartPriority>

+		<ResourceMinCount>_RESOURCE_MIN_COUNT_</ResourceMinCount>

+		<ResourceMaxCount>_RESOURCE_MAX_COUNT_</ResourceMaxCount>        

+		<ResourceRegistration>_RESOURCE_REGISTRATION_</ResourceRegistration>

+        <ResourceSWMComponent>com.att.authz:_ARTIFACT_ID_</ResourceSWMComponent>

+        <ResourceSWMComponentVersion>_ARTIFACT_VERSION_</ResourceSWMComponentVersion>

+    </ns2:ManagedResource>

+</ns2:ManagedResourceList>

diff --git a/authz-fs/src/main/data/test.html b/authz-fs/src/main/data/test.html
new file mode 100644
index 0000000..428a274
--- /dev/null
+++ b/authz-fs/src/main/data/test.html
@@ -0,0 +1,43 @@
+#-------------------------------------------------------------------------------

+# ============LICENSE_START====================================================

+# * org.onap.aai

+# * ===========================================================================

+# * Copyright © 2017 AT&T Intellectual Property. All rights reserved.

+# * Copyright © 2017 Amdocs

+# * ===========================================================================

+# * Licensed under the Apache License, Version 2.0 (the "License");

+# * you may not use this file except in compliance with the License.

+# * You may obtain a copy of the License at

+# * 

+#  *      http://www.apache.org/licenses/LICENSE-2.0

+# * 

+#  * Unless required by applicable law or agreed to in writing, software

+# * distributed under the License is distributed on an "AS IS" BASIS,

+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+# * See the License for the specific language governing permissions and

+# * limitations under the License.

+# * ============LICENSE_END====================================================

+# *

+# * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+# *

+#-------------------------------------------------------------------------------

+<html>

+  <head>                                 <!-- begin head -->

+    <meta charset="utf-8">

+    <title>AT&amp;T Authentication/Authorization Tool</title>

+    <!-- 

+    <link rel="stylesheet" href="_AUTHZ_GUI_URL_/theme/aaf5.css">

+    <script type="text/javascript" src="_AUTHZ_GUI_URL_/theme/comm.js"></script>

+    <script type="text/javascript" src="_AUTHZ_GUI_URL_/theme/console.js"></script>

+    <script type="text/javascript" src="_AUTHZ_GUI_URL_/theme/common.js"></script>

+    <link rel="stylesheet" href="_AUTHZ_GUI_URL_/theme/aaf5Desktop.css">

+     -->

+  </head>                                <!-- end head -->

+  <body>                                 <!-- begin body -->

+    <header>                             <!-- begin header -->

+            <h1>AT&amp;T Auth Tool on _ENV_CONTEXT_</h1>

+      <p id="version">AAF Version: _ARTIFACT_VERSION_</p>

+    </header>

+  <h1>Success for File Server Access</h1>

+  </body>

+</html>

diff --git a/authz-fs/src/main/java/com/att/authz/fs/FileServer.java b/authz-fs/src/main/java/com/att/authz/fs/FileServer.java
new file mode 100644
index 0000000..d7d2995
--- /dev/null
+++ b/authz-fs/src/main/java/com/att/authz/fs/FileServer.java
@@ -0,0 +1,156 @@
+/*******************************************************************************

+ * ============LICENSE_START====================================================

+ * * org.onap.aai

+ * * ===========================================================================

+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.

+ * * Copyright © 2017 Amdocs

+ * * ===========================================================================

+ * * Licensed under the Apache License, Version 2.0 (the "License");

+ * * you may not use this file except in compliance with the License.

+ * * You may obtain a copy of the License at

+ * * 

+ *  *      http://www.apache.org/licenses/LICENSE-2.0

+ * * 

+ *  * Unless required by applicable law or agreed to in writing, software

+ * * distributed under the License is distributed on an "AS IS" BASIS,

+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * * See the License for the specific language governing permissions and

+ * * limitations under the License.

+ * * ============LICENSE_END====================================================

+ * *

+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+ * *

+ ******************************************************************************/

+package com.att.authz.fs;

+

+import static com.att.cssa.rserv.HttpMethods.GET;

+

+import java.io.IOException;

+import java.io.InputStream;

+import java.net.URL;

+import java.util.ArrayList;

+import java.util.EnumSet;

+import java.util.List;

+import java.util.Properties;

+

+import com.att.aft.dme2.api.DME2Manager;

+import com.att.aft.dme2.api.DME2Server;

+import com.att.aft.dme2.api.DME2ServerProperties;

+import com.att.aft.dme2.api.DME2ServiceHolder;

+import com.att.aft.dme2.api.util.DME2FilterHolder;

+import com.att.aft.dme2.api.util.DME2FilterHolder.RequestDispatcherType;

+import com.att.aft.dme2.api.util.DME2ServletHolder;

+import com.att.authz.env.AuthzEnv;

+import com.att.authz.env.AuthzTrans;

+import com.att.authz.env.AuthzTransOnlyFilter;

+import com.att.cssa.rserv.CachingFileAccess;

+import com.att.cssa.rserv.RServlet;

+import com.att.inno.env.APIException;

+

+

+public class FileServer extends RServlet<AuthzTrans>  {

+	public FileServer(final AuthzEnv env) throws APIException, IOException {

+		try {

+			///////////////////////  

+			// File Server 

+			///////////////////////

+			

+			CachingFileAccess<AuthzTrans> cfa = new CachingFileAccess<AuthzTrans>(env);

+			route(env,GET,"/:key", cfa); 

+			route(env,GET,"/:key/:cmd", cfa); 

+			///////////////////////

+	

+	

+		} catch (Exception e) {

+			e.printStackTrace();

+		}

+	}

+	

+	public static void main(String[] args) {

+		try {

+			// Load Properties from authFramework.properties.  Needed for DME2 and AuthzEnv

+			Properties props = new Properties();

+			URL rsrc = ClassLoader.getSystemResource("FileServer.props");

+			if(rsrc==null) {

+				System.err.println("Folder containing FileServer.props must be on Classpath");

+				System.exit(1);

+			}

+			InputStream is = rsrc.openStream();

+			try {

+				props.load(is);

+			} finally {

+				is.close();

+			}

+			

+			// Load Properties into AuthzEnv

+			AuthzEnv env = new AuthzEnv(props); 

+			env.setLog4JNames("log4j.properties","authz","fs","audit","init",null);

+			

+			// AFT Discovery Libraries only read System Props

+			env.loadToSystemPropsStartsWith("AFT_","DME2_");

+			env.init().log("DME2 using " + env.getProperty("DMEServiceName","unknown") + " URI");

+			

+			// Start DME2 (DME2 needs Properties form of props)

+		    DME2Manager dme2 = new DME2Manager("RServDME2Manager",props);

+		    

+		    DME2ServiceHolder svcHolder;

+		    List<DME2ServletHolder> slist = new ArrayList<DME2ServletHolder>();

+		    svcHolder = new DME2ServiceHolder();

+		    String serviceName = env.getProperty("DMEServiceName",null);

+			if(serviceName!=null) {

+		    	svcHolder.setServiceURI(serviceName);

+		        svcHolder.setManager(dme2);

+		        svcHolder.setContext("/");

+		        

+		        FileServer fs = new FileServer(env);

+		        DME2ServletHolder srvHolder = new DME2ServletHolder(fs);

+		        srvHolder.setContextPath("/*");

+		        slist.add(srvHolder);

+		        

+		        EnumSet<RequestDispatcherType> edlist = EnumSet.of(

+		        		RequestDispatcherType.REQUEST,

+		        		RequestDispatcherType.FORWARD,

+		        		RequestDispatcherType.ASYNC

+		        		);

+

+		        ///////////////////////

+		        // Apply Filters

+		        ///////////////////////

+		        List<DME2FilterHolder> flist = new ArrayList<DME2FilterHolder>();

+		        

+		    	// Need TransFilter

+		    	flist.add(new DME2FilterHolder(new AuthzTransOnlyFilter(env),"/*",edlist));

+		        svcHolder.setFilters(flist);

+		        svcHolder.setServletHolders(slist);

+		        

+		        DME2Server dme2svr = dme2.getServer();

+		        DME2ServerProperties dsprops = dme2svr.getServerProperties();

+		        dsprops.setGracefulShutdownTimeMs(1000);

+

+		        env.init().log("Starting AAF FileServer with Jetty/DME2 server...");

+		        dme2svr.start();

+		        try {

+//		        	if(env.getProperty("NO_REGISTER",null)!=null)

+		        	dme2.bindService(svcHolder);

+		        	env.init().log("DME2 is available as HTTP"+(dsprops.isSslEnable()?"/S":""),"on port:",dsprops.getPort());

+

+		            while(true) { // Per DME2 Examples...

+		            	Thread.sleep(5000);

+		            }

+		        } catch(InterruptedException e) {

+		            env.init().log("AAF Jetty Server interrupted!");

+		        } catch(Exception e) { // Error binding service doesn't seem to stop DME2 or Process

+		            env.init().log(e,"DME2 Initialization Error");

+		        	dme2svr.stop();

+		        	System.exit(1);

+		        }

+			} else {

+				env.init().log("Properties must contain DMEServiceName");

+			}

+

+		} catch (Exception e) {

+			e.printStackTrace(System.err);

+			System.exit(1);

+		}

+	}

+}