DMAAP-MR - Merge MR repos
[dmaap/messagerouter/messageservice.git] / src / main / java / org / onap / dmaap / dmf / mr / service / impl / AdminServiceImpl.java
diff --git a/src/main/java/org/onap/dmaap/dmf/mr/service/impl/AdminServiceImpl.java b/src/main/java/org/onap/dmaap/dmf/mr/service/impl/AdminServiceImpl.java
new file mode 100644 (file)
index 0000000..deed9c2
--- /dev/null
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ *  ============LICENSE_START=======================================================
+ *  org.onap.dmaap
+ *  ================================================================================
+ *  Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ *  ================================================================================
+ *  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 org.onap.dmaap.dmf.mr.service.impl;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.att.nsa.configs.ConfigDbException;
+import com.att.nsa.limits.Blacklist;
+import com.att.nsa.security.NsaApiKey;
+import com.att.nsa.security.ReadWriteSecuredResource.AccessDeniedException;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.onap.dmaap.dmf.mr.backends.Consumer;
+import org.onap.dmaap.dmf.mr.backends.ConsumerFactory;
+import org.onap.dmaap.dmf.mr.beans.DMaaPContext;
+import org.onap.dmaap.dmf.mr.security.DMaaPAuthenticatorImpl;
+import org.onap.dmaap.dmf.mr.service.AdminService;
+import org.onap.dmaap.dmf.mr.utils.DMaaPResponseBuilder;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Set;
+
+
+/**
+ * @author muzainulhaque.qazi
+ *
+ */
+@Component
+public class AdminServiceImpl implements AdminService {
+
+       //private Logger log = Logger.getLogger(AdminServiceImpl.class.toString());
+       private static final EELFLogger log = EELFManager.getInstance().getLogger(AdminServiceImpl.class);
+       /**
+        * getConsumerCache returns consumer cache
+        * @param dMaaPContext context
+        * @throws IOException ex
+        * @throws AccessDeniedException 
+        */
+       @Override       
+       public void showConsumerCache(DMaaPContext dMaaPContext) throws IOException, AccessDeniedException {
+               adminAuthenticate(dMaaPContext);
+               
+               JSONObject consumers = new JSONObject();
+               JSONArray jsonConsumersList = new JSONArray();
+
+               for (Consumer consumer : getConsumerFactory(dMaaPContext).getConsumers()) {
+                       JSONObject consumerObject = new JSONObject();
+                       consumerObject.put("name", consumer.getName());
+                       consumerObject.put("created", consumer.getCreateTimeMs());
+                       consumerObject.put("accessed", consumer.getLastAccessMs());
+                       jsonConsumersList.put(consumerObject);
+               }
+
+               consumers.put("consumers", jsonConsumersList);
+               log.info("========== AdminServiceImpl: getConsumerCache: " + jsonConsumersList.toString() + "===========");
+               DMaaPResponseBuilder.respondOk(dMaaPContext, consumers);
+       }
+
+       /**
+        * 
+        * dropConsumerCache() method clears consumer cache
+        * @param dMaaPContext context
+        * @throws JSONException ex
+        * @throws IOException ex
+        * @throws AccessDeniedException 
+        * 
+        */
+       @Override
+       public void dropConsumerCache(DMaaPContext dMaaPContext) throws JSONException, IOException, AccessDeniedException {
+               adminAuthenticate(dMaaPContext);
+               getConsumerFactory(dMaaPContext).dropCache();
+               DMaaPResponseBuilder.respondOkWithHtml(dMaaPContext, "Consumer cache cleared successfully");
+               // log.info("========== AdminServiceImpl: dropConsumerCache: Consumer
+               // Cache successfully dropped.===========");
+       }
+
+       /** 
+        * getfConsumerFactory returns CosnumerFactory details
+        * @param dMaaPContext contxt
+        * @return ConsumerFactory obj
+        * 
+        */
+       private ConsumerFactory getConsumerFactory(DMaaPContext dMaaPContext) {
+               return dMaaPContext.getConfigReader().getfConsumerFactory();
+       }
+       
+       /**
+        * return ipblacklist
+        * @param dMaaPContext context
+        * @return blacklist obj
+        */
+       private static Blacklist getIpBlacklist(DMaaPContext dMaaPContext) {
+               return dMaaPContext.getConfigReader().getfIpBlackList();
+       }
+       
+       
+       /**
+        * Get list of blacklisted ips
+        */
+       @Override
+       public void getBlacklist ( DMaaPContext dMaaPContext ) throws IOException, AccessDeniedException
+       {
+               adminAuthenticate ( dMaaPContext );
+
+               DMaaPResponseBuilder.respondOk ( dMaaPContext,
+                       new JSONObject().put ( "blacklist",
+                                       setToJsonArray ( getIpBlacklist (dMaaPContext).asSet() ) ) );
+       }
+       
+       public static JSONArray setToJsonArray ( Set<?> fields )
+       {
+               return collectionToJsonArray ( fields );
+       }
+       
+       public static JSONArray collectionToJsonArray ( Collection<?> fields )
+       {
+               final JSONArray a = new JSONArray ();
+               if ( fields != null )
+               {
+                       for ( Object o : fields )
+                       {
+                               a.put ( o );
+                       }
+               }
+               return a;
+       }
+       
+       /**
+        * Add ip to blacklist
+        */
+       @Override
+       public void addToBlacklist ( DMaaPContext dMaaPContext, String ip ) throws IOException, ConfigDbException, AccessDeniedException
+       {
+               adminAuthenticate ( dMaaPContext );
+
+               getIpBlacklist (dMaaPContext).add ( ip );
+               DMaaPResponseBuilder.respondOkNoContent ( dMaaPContext );
+       }
+       
+       /**
+        * Remove ip from blacklist
+        */
+       @Override
+       public void removeFromBlacklist ( DMaaPContext dMaaPContext, String ip ) throws IOException, ConfigDbException, AccessDeniedException
+       {
+               adminAuthenticate ( dMaaPContext );
+
+               getIpBlacklist (dMaaPContext).remove ( ip );
+               DMaaPResponseBuilder.respondOkNoContent ( dMaaPContext );
+       }
+       
+       /**
+        * Authenticate if user is admin
+        * @param dMaaPContext context
+        * @throws AccessDeniedException ex
+        */
+       private static void adminAuthenticate ( DMaaPContext dMaaPContext ) throws AccessDeniedException
+       {
+               
+               final NsaApiKey user = DMaaPAuthenticatorImpl.getAuthenticatedUser(dMaaPContext);
+               if ( user == null || !user.getKey ().equals ( "admin" ) )
+               {
+                       throw new AccessDeniedException ();
+               }
+       }
+
+}