--- /dev/null
+/*******************************************************************************\r
+ * ============LICENSE_START====================================================\r
+ * * org.onap.aaf\r
+ * * ===========================================================================\r
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
+ * * ===========================================================================\r
+ * * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * * you may not use this file except in compliance with the License.\r
+ * * You may obtain a copy of the License at\r
+ * * \r
+ * * http://www.apache.org/licenses/LICENSE-2.0\r
+ * * \r
+ * * Unless required by applicable law or agreed to in writing, software\r
+ * * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * * See the License for the specific language governing permissions and\r
+ * * limitations under the License.\r
+ * * ============LICENSE_END====================================================\r
+ * *\r
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
+ * *\r
+ ******************************************************************************/\r
+package org.onap.aaf.authz.fs;\r
+\r
+import static org.onap.aaf.cssa.rserv.HttpMethods.GET;\r
+\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.net.URL;\r
+import java.util.ArrayList;\r
+import java.util.EnumSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+import org.onap.aaf.authz.env.AuthzEnv;\r
+import org.onap.aaf.authz.env.AuthzTrans;\r
+import org.onap.aaf.authz.env.AuthzTransOnlyFilter;\r
+import org.onap.aaf.cssa.rserv.CachingFileAccess;\r
+import org.onap.aaf.cssa.rserv.RServlet;\r
+\r
+import com.att.aft.dme2.api.DME2Manager;\r
+import com.att.aft.dme2.api.DME2Server;\r
+import com.att.aft.dme2.api.DME2ServerProperties;\r
+import com.att.aft.dme2.api.DME2ServiceHolder;\r
+import com.att.aft.dme2.api.util.DME2FilterHolder;\r
+import com.att.aft.dme2.api.util.DME2FilterHolder.RequestDispatcherType;\r
+import com.att.aft.dme2.api.util.DME2ServletHolder;\r
+import org.onap.aaf.inno.env.APIException;\r
+\r
+\r
+public class FileServer extends RServlet<AuthzTrans> {\r
+ public FileServer(final AuthzEnv env) throws APIException, IOException {\r
+ try {\r
+ /////////////////////// \r
+ // File Server \r
+ ///////////////////////\r
+ \r
+ CachingFileAccess<AuthzTrans> cfa = new CachingFileAccess<AuthzTrans>(env);\r
+ route(env,GET,"/:key", cfa); \r
+ route(env,GET,"/:key/:cmd", cfa); \r
+ ///////////////////////\r
+ \r
+ \r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ \r
+ public static void main(String[] args) {\r
+ try {\r
+ // Load Properties from authFramework.properties. Needed for DME2 and AuthzEnv\r
+ Properties props = new Properties();\r
+ URL rsrc = ClassLoader.getSystemResource("FileServer.props");\r
+ if(rsrc==null) {\r
+ System.err.println("Folder containing FileServer.props must be on Classpath");\r
+ System.exit(1);\r
+ }\r
+ InputStream is = rsrc.openStream();\r
+ try {\r
+ props.load(is);\r
+ } finally {\r
+ is.close();\r
+ }\r
+ \r
+ // Load Properties into AuthzEnv\r
+ AuthzEnv env = new AuthzEnv(props); \r
+ env.setLog4JNames("log4j.properties","authz","fs","audit","init",null);\r
+ \r
+ // AFT Discovery Libraries only read System Props\r
+ env.loadToSystemPropsStartsWith("AFT_","DME2_");\r
+ env.init().log("DME2 using " + env.getProperty("DMEServiceName","unknown") + " URI");\r
+ \r
+ // Start DME2 (DME2 needs Properties form of props)\r
+ DME2Manager dme2 = new DME2Manager("RServDME2Manager",props);\r
+ \r
+ DME2ServiceHolder svcHolder;\r
+ List<DME2ServletHolder> slist = new ArrayList<DME2ServletHolder>();\r
+ svcHolder = new DME2ServiceHolder();\r
+ String serviceName = env.getProperty("DMEServiceName",null);\r
+ if(serviceName!=null) {\r
+ svcHolder.setServiceURI(serviceName);\r
+ svcHolder.setManager(dme2);\r
+ svcHolder.setContext("/");\r
+ \r
+ FileServer fs = new FileServer(env);\r
+ DME2ServletHolder srvHolder = new DME2ServletHolder(fs);\r
+ srvHolder.setContextPath("/*");\r
+ slist.add(srvHolder);\r
+ \r
+ EnumSet<RequestDispatcherType> edlist = EnumSet.of(\r
+ RequestDispatcherType.REQUEST,\r
+ RequestDispatcherType.FORWARD,\r
+ RequestDispatcherType.ASYNC\r
+ );\r
+\r
+ ///////////////////////\r
+ // Apply Filters\r
+ ///////////////////////\r
+ List<DME2FilterHolder> flist = new ArrayList<DME2FilterHolder>();\r
+ \r
+ // Need TransFilter\r
+ flist.add(new DME2FilterHolder(new AuthzTransOnlyFilter(env),"/*",edlist));\r
+ svcHolder.setFilters(flist);\r
+ svcHolder.setServletHolders(slist);\r
+ \r
+ DME2Server dme2svr = dme2.getServer();\r
+ DME2ServerProperties dsprops = dme2svr.getServerProperties();\r
+ dsprops.setGracefulShutdownTimeMs(1000);\r
+\r
+ env.init().log("Starting AAF FileServer with Jetty/DME2 server...");\r
+ dme2svr.start();\r
+ try {\r
+// if(env.getProperty("NO_REGISTER",null)!=null)\r
+ dme2.bindService(svcHolder);\r
+ env.init().log("DME2 is available as HTTP"+(dsprops.isSslEnable()?"/S":""),"on port:",dsprops.getPort());\r
+\r
+ while(true) { // Per DME2 Examples...\r
+ Thread.sleep(5000);\r
+ }\r
+ } catch(InterruptedException e) {\r
+ env.init().log("AAF Jetty Server interrupted!");\r
+ } catch(Exception e) { // Error binding service doesn't seem to stop DME2 or Process\r
+ env.init().log(e,"DME2 Initialization Error");\r
+ dme2svr.stop();\r
+ System.exit(1);\r
+ }\r
+ } else {\r
+ env.init().log("Properties must contain DMEServiceName");\r
+ }\r
+\r
+ } catch (Exception e) {\r
+ e.printStackTrace(System.err);\r
+ System.exit(1);\r
+ }\r
+ }\r
+}\r