From 43854a9e3310ff7a92257d16c4fc0a8321eaec68 Mon Sep 17 00:00:00 2001 From: sg481n Date: Thu, 3 Aug 2017 17:27:34 -0400 Subject:  [AAF-21] Initial code import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I63d7d499bbd46f500b5f5a4db966166f613f327a Signed-off-by: sg481n --- authz-fs/.gitignore | 5 + authz-fs/pom.xml | 163 +++++++++++++++++++++ authz-fs/src/main/config/FileServer.props | 20 +++ authz-fs/src/main/config/log4j.properties | 91 ++++++++++++ authz-fs/src/main/config/lrm-authz-fs.xml | 83 +++++++++++ authz-fs/src/main/data/test.html | 43 ++++++ .../src/main/java/com/att/authz/fs/FileServer.java | 156 ++++++++++++++++++++ .../test/java/com/att/authz/fs/JU_FileServer.java | 84 +++++++++++ 8 files changed, 645 insertions(+) create mode 100644 authz-fs/.gitignore create mode 100644 authz-fs/pom.xml create mode 100644 authz-fs/src/main/config/FileServer.props create mode 100644 authz-fs/src/main/config/log4j.properties create mode 100644 authz-fs/src/main/config/lrm-authz-fs.xml create mode 100644 authz-fs/src/main/data/test.html create mode 100644 authz-fs/src/main/java/com/att/authz/fs/FileServer.java create mode 100644 authz-fs/src/test/java/com/att/authz/fs/JU_FileServer.java (limited to 'authz-fs') diff --git a/authz-fs/.gitignore b/authz-fs/.gitignore new file mode 100644 index 00000000..f99ab6a2 --- /dev/null +++ b/authz-fs/.gitignore @@ -0,0 +1,5 @@ +.metadata +.settings +.classpath +.project +target diff --git a/authz-fs/pom.xml b/authz-fs/pom.xml new file mode 100644 index 00000000..aa896d6c --- /dev/null +++ b/authz-fs/pom.xml @@ -0,0 +1,163 @@ + + + + 4.0.0 + + com.att.authz + parent + 2.0.15 + ../pom.xml + + + authz-fs + Authz File Server + Independent FileServer via HTTP (not S) for Public Files (i.e. CRLs) + https://github.com/att/AAF + + + BSD License + + + + + + Jonathan Gathman + + ATT + + + + + + true + 9 + + + + + + com.att.authz + authz-core + + + com.att.cadi + cadi-core + + + com.att.aft + dme2 + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + **/*.class + + + 2.3.1 + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + false + + + + attach-javadocs + + jar + + + + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ossrhdme + https://oss.sonatype.org/ + true + + + + + + + + + + + + + ossrhdme + https://oss.sonatype.org/content/repositories/snapshots + + + ossrhdme + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + https://github.com/att/AAF.git + ${project.scm.connection} + http://github.com/att/AAF/tree/master + + diff --git a/authz-fs/src/main/config/FileServer.props b/authz-fs/src/main/config/FileServer.props new file mode 100644 index 00000000..ed1506e5 --- /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 00000000..38593d6a --- /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 00000000..a51db07b --- /dev/null +++ b/authz-fs/src/main/config/lrm-authz-fs.xml @@ -0,0 +1,83 @@ + + + + + + com.att.authz._ARTIFACT_ID_ + + _MAJOR_VER_ + _MINOR_VER_ + _PATCH_VER_ + + _ROUTE_OFFER_ + + Java + com.att.authz.fs.FileServer + + process.workdir + _ROOT_DIR_ + + + jvm.version + 1.8 + + + jvm.args + -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 + + + jvm.classpath + _ROOT_DIR_/etc:_ROOT_DIR_/lib/*: + + + jvm.heap.min + 1024m + + + jvm.heap.max + 2048m + + + start.class + com.att.authz.fs.FileServer + + + stdout.redirect + _ROOT_DIR_/logs/SystemOut.log + + + stderr.redirect + _ROOT_DIR_/logs/SystemErr.log + + aft + AUTO + 2 + _RESOURCE_MIN_COUNT_ + _RESOURCE_MAX_COUNT_ + _RESOURCE_REGISTRATION_ + com.att.authz:_ARTIFACT_ID_ + _ARTIFACT_VERSION_ + + diff --git a/authz-fs/src/main/data/test.html b/authz-fs/src/main/data/test.html new file mode 100644 index 00000000..428a2742 --- /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. +# * +#------------------------------------------------------------------------------- + + + + AT&T Authentication/Authorization Tool + + + +
+

AT&T Auth Tool on _ENV_CONTEXT_

+

AAF Version: _ARTIFACT_VERSION_

+
+

Success for File Server Access

+ + 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 00000000..d7d2995f --- /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 { + public FileServer(final AuthzEnv env) throws APIException, IOException { + try { + /////////////////////// + // File Server + /////////////////////// + + CachingFileAccess cfa = new CachingFileAccess(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 slist = new ArrayList(); + 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 edlist = EnumSet.of( + RequestDispatcherType.REQUEST, + RequestDispatcherType.FORWARD, + RequestDispatcherType.ASYNC + ); + + /////////////////////// + // Apply Filters + /////////////////////// + List flist = new ArrayList(); + + // 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); + } + } +} diff --git a/authz-fs/src/test/java/com/att/authz/fs/JU_FileServer.java b/authz-fs/src/test/java/com/att/authz/fs/JU_FileServer.java new file mode 100644 index 00000000..3ea025a9 --- /dev/null +++ b/authz-fs/src/test/java/com/att/authz/fs/JU_FileServer.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * ============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 static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.Properties; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.modules.junit4.PowerMockRunner; + +import com.att.authz.env.AuthzEnv; +import com.att.authz.env.AuthzTrans; +import com.att.cssa.rserv.CachingFileAccess; +import com.att.inno.env.APIException; +import com.att.authz.fs.*; + +@RunWith(MockitoJUnitRunner.class) +public class JU_FileServer { + @Mock + AuthzEnv authzEnvMock; + AuthzEnv authzEnv = new AuthzEnv(); + + @Before + public void setUp() throws APIException, IOException{ + + } + + @SuppressWarnings("static-access") + @Test + public void testMain() throws Exception{ + + String[] args = null; + Properties props = new Properties(); + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("FileServer.props").getFile()); + +//PowerMockito.whenNew(Something.class).withArguments(argument).thenReturn(mockSomething); + // env.setLog4JNames("log4j.properties","authz","fs","audit","init",null); + // PowerMockito.whenNew(AuthzEnv.class).withArguments(props).thenReturn(authzEnvMock); + // PowerMockito.doNothing().when(authzEnvMock.setLog4JNames(Matchers.anyString(), Matchers.anyString(), Matchers.anyString(), Matchers.anyString(), Matchers.anyString(), Matchers.anyString())); + // PowerMockito.when(new AuthzEnv(props)).thenReturn(authzEnvMock); + //PowerMockito.doNothing().when(authzEnv).setLog4JNames(Matchers.anyString(), Matchers.anyString(), Matchers.anyString(), Matchers.anyString(), Matchers.anyString(), Matchers.anyString()); + //PowerMockito.doNothing().when(authzEnvMock).setLog4JNames(" "," "," "," "," "," "); + + FileServer.main(args); + //assertTrue(true); + + } + +} -- cgit 1.2.3-korg