0a8547f3cf0f6ec6b58342e09b2c4d9fba9f3f6b
[aaf/authz.git] / authz-fs / src / main / java / org / onap / aaf / authz / fs / FileServer.java
1 /*******************************************************************************\r
2  * ============LICENSE_START====================================================\r
3  * * org.onap.aaf\r
4  * * ===========================================================================\r
5  * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
6  * * ===========================================================================\r
7  * * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * * you may not use this file except in compliance with the License.\r
9  * * You may obtain a copy of the License at\r
10  * * \r
11  *  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * * \r
13  *  * Unless required by applicable law or agreed to in writing, software\r
14  * * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * * See the License for the specific language governing permissions and\r
17  * * limitations under the License.\r
18  * * ============LICENSE_END====================================================\r
19  * *\r
20  * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
21  * *\r
22  ******************************************************************************/\r
23 package org.onap.aaf.authz.fs;\r
24 \r
25 import static org.onap.aaf.cssa.rserv.HttpMethods.GET;\r
26 \r
27 import java.io.IOException;\r
28 import java.io.InputStream;\r
29 import java.net.URL;\r
30 import java.util.ArrayList;\r
31 import java.util.EnumSet;\r
32 import java.util.List;\r
33 import java.util.Properties;\r
34 \r
35 import org.onap.aaf.authz.env.AuthzEnv;\r
36 import org.onap.aaf.authz.env.AuthzTrans;\r
37 import org.onap.aaf.authz.env.AuthzTransOnlyFilter;\r
38 import org.onap.aaf.cssa.rserv.CachingFileAccess;\r
39 import org.onap.aaf.cssa.rserv.RServlet;\r
40 \r
41 import com.att.aft.dme2.api.DME2Manager;\r
42 import com.att.aft.dme2.api.DME2Server;\r
43 import com.att.aft.dme2.api.DME2ServerProperties;\r
44 import com.att.aft.dme2.api.DME2ServiceHolder;\r
45 import com.att.aft.dme2.api.util.DME2FilterHolder;\r
46 import com.att.aft.dme2.api.util.DME2FilterHolder.RequestDispatcherType;\r
47 import com.att.aft.dme2.api.util.DME2ServletHolder;\r
48 import org.onap.aaf.inno.env.APIException;\r
49 \r
50 \r
51 public class FileServer extends RServlet<AuthzTrans>  {\r
52         public FileServer(final AuthzEnv env) throws APIException, IOException {\r
53                 try {\r
54                         ///////////////////////  \r
55                         // File Server \r
56                         ///////////////////////\r
57                         \r
58                         CachingFileAccess<AuthzTrans> cfa = new CachingFileAccess<AuthzTrans>(env);\r
59                         route(env,GET,"/:key", cfa); \r
60                         route(env,GET,"/:key/:cmd", cfa); \r
61                         ///////////////////////\r
62         \r
63         \r
64                 } catch (Exception e) {\r
65                         e.printStackTrace();\r
66                 }\r
67         }\r
68         \r
69         public static void main(String[] args) {\r
70                 try {\r
71                         // Load Properties from authFramework.properties.  Needed for DME2 and AuthzEnv\r
72                         Properties props = new Properties();\r
73                         URL rsrc = ClassLoader.getSystemResource("FileServer.props");\r
74                         if(rsrc==null) {\r
75                                 System.err.println("Folder containing FileServer.props must be on Classpath");\r
76                                 System.exit(1);\r
77                         }\r
78                         InputStream is = rsrc.openStream();\r
79                         try {\r
80                                 props.load(is);\r
81                         } finally {\r
82                                 is.close();\r
83                         }\r
84                         \r
85                         // Load Properties into AuthzEnv\r
86                         AuthzEnv env = new AuthzEnv(props); \r
87                         env.setLog4JNames("log4j.properties","authz","fs","audit","init",null);\r
88                         \r
89                         // AFT Discovery Libraries only read System Props\r
90                         env.loadToSystemPropsStartsWith("AFT_","DME2_");\r
91                         env.init().log("DME2 using " + env.getProperty("DMEServiceName","unknown") + " URI");\r
92                         \r
93                         // Start DME2 (DME2 needs Properties form of props)\r
94                     DME2Manager dme2 = new DME2Manager("RServDME2Manager",props);\r
95                     \r
96                     DME2ServiceHolder svcHolder;\r
97                     List<DME2ServletHolder> slist = new ArrayList<DME2ServletHolder>();\r
98                     svcHolder = new DME2ServiceHolder();\r
99                     String serviceName = env.getProperty("DMEServiceName",null);\r
100                         if(serviceName!=null) {\r
101                         svcHolder.setServiceURI(serviceName);\r
102                         svcHolder.setManager(dme2);\r
103                         svcHolder.setContext("/");\r
104                         \r
105                         FileServer fs = new FileServer(env);\r
106                         DME2ServletHolder srvHolder = new DME2ServletHolder(fs);\r
107                         srvHolder.setContextPath("/*");\r
108                         slist.add(srvHolder);\r
109                         \r
110                         EnumSet<RequestDispatcherType> edlist = EnumSet.of(\r
111                                         RequestDispatcherType.REQUEST,\r
112                                         RequestDispatcherType.FORWARD,\r
113                                         RequestDispatcherType.ASYNC\r
114                                         );\r
115 \r
116                         ///////////////////////\r
117                         // Apply Filters\r
118                         ///////////////////////\r
119                         List<DME2FilterHolder> flist = new ArrayList<DME2FilterHolder>();\r
120                         \r
121                         // Need TransFilter\r
122                         flist.add(new DME2FilterHolder(new AuthzTransOnlyFilter(env),"/*",edlist));\r
123                         svcHolder.setFilters(flist);\r
124                         svcHolder.setServletHolders(slist);\r
125                         \r
126                         DME2Server dme2svr = dme2.getServer();\r
127                         DME2ServerProperties dsprops = dme2svr.getServerProperties();\r
128                         dsprops.setGracefulShutdownTimeMs(1000);\r
129 \r
130                         env.init().log("Starting AAF FileServer with Jetty/DME2 server...");\r
131                         dme2svr.start();\r
132                         try {\r
133 //                              if(env.getProperty("NO_REGISTER",null)!=null)\r
134                                 dme2.bindService(svcHolder);\r
135                                 env.init().log("DME2 is available as HTTP"+(dsprops.isSslEnable()?"/S":""),"on port:",dsprops.getPort());\r
136 \r
137                             while(true) { // Per DME2 Examples...\r
138                                 Thread.sleep(5000);\r
139                             }\r
140                         } catch(InterruptedException e) {\r
141                             env.init().log("AAF Jetty Server interrupted!");\r
142                         } catch(Exception e) { // Error binding service doesn't seem to stop DME2 or Process\r
143                             env.init().log(e,"DME2 Initialization Error");\r
144                                 dme2svr.stop();\r
145                                 System.exit(1);\r
146                         }\r
147                         } else {\r
148                                 env.init().log("Properties must contain DMEServiceName");\r
149                         }\r
150 \r
151                 } catch (Exception e) {\r
152                         e.printStackTrace(System.err);\r
153                         System.exit(1);\r
154                 }\r
155         }\r
156 }\r