Complete new authentication across REST APIs
[music.git] / src / main / java / org / onap / music / rest / RestMusicLocksAPI.java
index 22112dd..b3e3b4d 100644 (file)
@@ -19,6 +19,7 @@
  * ============LICENSE_END=============================================
  * ====================================================================
  */
+
 package org.onap.music.rest;
 
 import java.util.Map;
@@ -35,12 +36,16 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.Response.Status;
+
+import org.onap.music.authentication.MusicAAFAuthentication;
+import org.onap.music.authentication.MusicAuthenticator;
+import org.onap.music.authentication.MusicAuthenticator.Operation;
 import org.onap.music.datastore.jsonobjects.JsonLeasedLock;
 import org.onap.music.eelf.logging.EELFLoggerDelegate;
 import org.onap.music.eelf.logging.format.AppMessages;
 import org.onap.music.eelf.logging.format.ErrorSeverity;
 import org.onap.music.eelf.logging.format.ErrorTypes;
-import org.onap.music.lockingservice.MusicLockState;
+import org.onap.music.lockingservice.cassandra.MusicLockState;
 import org.onap.music.main.MusicCore;
 import org.onap.music.main.MusicUtil;
 import org.onap.music.main.ResultType;
@@ -60,6 +65,8 @@ public class RestMusicLocksAPI {
     private static final String XMINORVERSION = "X-minorVersion";
     private static final String XPATCHVERSION = "X-patchVersion";
     private static final String VERSION = "v2";
+    
+    private MusicAuthenticator authenticator = new MusicAAFAuthentication();
 
     /**
      * Puts the requesting process in the q for this lock. The corresponding
@@ -81,29 +88,28 @@ public class RestMusicLocksAPI {
             @ApiParam(value="Lock Name",required=true) @PathParam("lockname") String lockName,
             @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
             @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
             @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
-                            required = true) @HeaderParam("ns") String ns,
-            @ApiParam(value = "userId",
-                            required = true) @HeaderParam("userId") String userId,
-            @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password) throws Exception{
+                            required = true) @HeaderParam("ns") String ns) throws Exception{
+        try {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockName);
-        if (resultMap.containsKey("Exception")) {
+        if (resultMap.containsKey("Error")) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+            response.status(Status.BAD_REQUEST);
+            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
-        resultMap.remove("keyspace");
-        resultMap = MusicCore.autheticateUser(ns, userId, password, keyspaceName, aid,
-                "createLockReference");
-        if (resultMap.containsKey("aid"))
-            resultMap.remove("aid");
-        if (!resultMap.isEmpty()) {
-            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.MISSINGINFO  ,ErrorSeverity.CRITICAL, ErrorTypes.AUTHENTICATIONERROR);
-            return response.status(Status.UNAUTHORIZED).entity(resultMap).build();
+        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
+        
+        if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.CREATE_LOCKREF)) {
+            return response.status(Status.UNAUTHORIZED)
+                    .entity(new JsonResponse(ResultType.FAILURE)
+                            .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                            .toMap()).build();
         }
+        
         ResultType status = ResultType.SUCCESS;
         String lockId = MusicCore.createLockReference(lockName);
         
@@ -113,6 +119,9 @@ public class RestMusicLocksAPI {
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(status).setError("Lock Id is null").toMap()).build();
         }
         return response.status(Status.OK).entity(new JsonResponse(status).setLock(lockId).toMap()).build();
+        } finally {
+            EELFLoggerDelegate.mdcRemove("keyspace");
+        }
     }
 
     /**
@@ -133,29 +142,29 @@ public class RestMusicLocksAPI {
             @ApiParam(value="Lock Reference",required=true) @PathParam("lockreference") String lockId,
             @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
             @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
             @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
-                            required = true) @HeaderParam("ns") String ns,
-            @ApiParam(value = "userId",
-                            required = true) @HeaderParam("userId") String userId,
-            @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password) throws Exception{
+                            required = true) @HeaderParam("ns") String ns) throws Exception{
+        try { 
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockId);
-        if (resultMap.containsKey("Exception")) {
+        if (resultMap.containsKey("Error")) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+            response.status(Status.BAD_REQUEST);
+            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build();
         }
+        
         String keyspaceName = (String) resultMap.get("keyspace");
-        resultMap.remove("keyspace");
-        resultMap = MusicCore.autheticateUser(ns, userId, password, keyspaceName, aid,
-                "accquireLock");
-        if (resultMap.containsKey("aid"))
-            resultMap.remove("aid");
-        if (!resultMap.isEmpty()) {
-            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
+        
+        if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.ACQUIRE_LOCK)) {
+            return response.status(Status.UNAUTHORIZED)
+                    .entity(new JsonResponse(ResultType.FAILURE)
+                            .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                            .toMap()).build();
         }
+        
         try {
             String lockName = lockId.substring(lockId.indexOf('$')+1, lockId.lastIndexOf('$'));
             ReturnType lockStatus = MusicCore.acquireLock(lockName,lockId);
@@ -169,6 +178,9 @@ public class RestMusicLocksAPI {
             logger.error(EELFLoggerDelegate.errorLogger,AppMessages.INVALIDLOCK + lockId, ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError("Unable to aquire lock").toMap()).build();
         }
+        } finally {
+            EELFLoggerDelegate.mdcRemove("keyspace");
+        }
     }
     
 
@@ -183,30 +195,28 @@ public class RestMusicLocksAPI {
             @ApiParam(value="Lock Reference",required=true) @PathParam("lockreference") String lockId,
             @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
             @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
             @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
-                            required = true) @HeaderParam("ns") String ns,
-            @ApiParam(value = "userId",
-                            required = true) @HeaderParam("userId") String userId,
-            @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password) throws Exception{
+                            required = true) @HeaderParam("ns") String ns) throws Exception{
+        try {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockId);
-        if (resultMap.containsKey("Exception")) {
+        if (resultMap.containsKey("Error")) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+            response.status(Status.BAD_REQUEST);
+            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
+        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
         resultMap.remove("keyspace");
-        resultMap = MusicCore.autheticateUser(ns, userId, password, keyspaceName, aid,
-                "accquireLockWithLease");
-
-        if (resultMap.containsKey("aid"))
-            resultMap.remove("aid");
-        if (!resultMap.isEmpty()) {
-            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.ACQUIRE_LOCK)) {
+            return response.status(Status.UNAUTHORIZED)
+                    .entity(new JsonResponse(ResultType.FAILURE)
+                            .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                            .toMap()).build();
         }
+        
         String lockName = lockId.substring(lockId.indexOf('$')+1, lockId.lastIndexOf('$'));
         ReturnType lockLeaseStatus = MusicCore.acquireLockWithLease(lockName, lockId, lockObj.getLeasePeriod());
         if ( lockLeaseStatus.getResult().equals(ResultType.SUCCESS)) {
@@ -217,6 +227,9 @@ public class RestMusicLocksAPI {
         return response.entity(new JsonResponse(lockLeaseStatus.getResult()).setLock(lockName)
                                     .setMessage(lockLeaseStatus.getMessage())
                                     .setLockLease(String.valueOf(lockObj.getLeasePeriod())).toMap()).build();
+        } finally {
+            EELFLoggerDelegate.mdcRemove("keyspace");
+        }
     } 
     
 
@@ -230,29 +243,29 @@ public class RestMusicLocksAPI {
             @ApiParam(value="Lock Name",required=true) @PathParam("lockname") String lockName,
             @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
             @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
             @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
-                            required = true) @HeaderParam("ns") String ns,
-            @ApiParam(value = "userId",
-                            required = true) @HeaderParam("userId") String userId,
-            @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password) throws Exception{
+                            required = true) @HeaderParam("ns") String ns) throws Exception{
+        try {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockName);
-        if (resultMap.containsKey("Exception")) {
+        if (resultMap.containsKey("Error")) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+            response.status(Status.BAD_REQUEST);
+            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build();
         }
+
         String keyspaceName = (String) resultMap.get("keyspace");
+        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
         resultMap.remove("keyspace");
-        resultMap = MusicCore.autheticateUser(ns, userId, password, keyspaceName, aid,
-                "currentLockHolder");
-        if (resultMap.containsKey("aid"))
-            resultMap.remove("aid");
-        if (!resultMap.isEmpty()) {
-            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.CURRENT_LOCK)) {
+            return response.status(Status.UNAUTHORIZED)
+                    .entity(new JsonResponse(ResultType.FAILURE)
+                            .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                            .toMap()).build();
         }
+        
         String who = MusicCore.whoseTurnIsIt(lockName);
         ResultType status = ResultType.SUCCESS;
         String error = "";
@@ -263,6 +276,9 @@ public class RestMusicLocksAPI {
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(status).setError(error).setLock(lockName).setLockHolder(who).toMap()).build();
         }
         return response.status(Status.OK).entity(new JsonResponse(status).setError(error).setLock(lockName).setLockHolder(who).toMap()).build();
+        } finally {
+            EELFLoggerDelegate.mdcRemove("keyspace");
+        }
     }
 
     @GET
@@ -275,45 +291,57 @@ public class RestMusicLocksAPI {
             @ApiParam(value="Lock Name",required=true) @PathParam("lockname") String lockName,
             @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
             @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
             @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
-                            required = true) @HeaderParam("ns") String ns,
-            @ApiParam(value = "userId",
-                            required = true) @HeaderParam("userId") String userId,
-            @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password) throws Exception{
+                            required = true) @HeaderParam("ns") String ns) throws Exception{
+        try {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockName);
-        if (resultMap.containsKey("Exception")) {
+        if (resultMap.containsKey("Error")) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+            response.status(Status.BAD_REQUEST);
+            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build();
         }
         String keyspaceName = (String) resultMap.get("keyspace");
+        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
         resultMap.remove("keyspace");
-        resultMap = MusicCore.autheticateUser(ns, userId, password, keyspaceName, aid,
-                "currentLockState");
-        
-        if (resultMap.containsKey("aid"))
-            resultMap.remove("aid");
-        if (!resultMap.isEmpty()) {
-            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.CURRENT_LOCK)) {
+            return response.status(Status.UNAUTHORIZED)
+                    .entity(new JsonResponse(ResultType.FAILURE)
+                            .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                            .toMap()).build();
         }
         
-        MusicLockState mls = MusicCore.getMusicLockState(lockName);
-        Map<String,Object> returnMap = null;
-        JsonResponse jsonResponse = new JsonResponse(ResultType.FAILURE).setLock(lockName);
-        if(mls == null) {
-            jsonResponse.setError("");
-            jsonResponse.setMessage("No lock object created yet..");
-            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(jsonResponse.toMap()).build();
-        } else { 
-            jsonResponse.setStatus(ResultType.SUCCESS);
-            jsonResponse.setLockStatus(mls.getLockStatus());
-            jsonResponse.setLockHolder(mls.getLockHolder());
-            return response.status(Status.OK).entity(jsonResponse.toMap()).build();
+        String who = MusicCore.whoseTurnIsIt(lockName);
+        ResultType status = ResultType.SUCCESS;
+        String error = "";
+        if ( who == null ) { 
+            status = ResultType.FAILURE; 
+            error = "There was a problem getting the lock holder";
+            logger.error(EELFLoggerDelegate.errorLogger,"There was a problem getting the lock holder", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+            return response.status(Status.BAD_REQUEST).entity(new JsonResponse(status).setError(error).setLock(lockName).setLockHolder(who).toMap()).build();
+        }
+        return response.status(Status.OK).entity(new JsonResponse(status).setError(error).setLock(lockName).setLockHolder(who).toMap()).build();
+        } finally {
+            EELFLoggerDelegate.mdcRemove("keyspace");
         } 
+        
+        //MusicLockState mls = MusicZKCore.getMusicLockState(lockName);
+//        Map<String,Object> returnMap = null;
+//        JsonResponse jsonResponse = new JsonResponse(ResultType.FAILURE).setLock(lockName);
+//        if(mls == null) {
+//            jsonResponse.setError("");
+//            jsonResponse.setMessage("No lock object created yet..");
+//            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
+//            return response.status(Status.BAD_REQUEST).entity(jsonResponse.toMap()).build();
+//        } else { 
+//            jsonResponse.setStatus(ResultType.SUCCESS);
+//            jsonResponse.setLockStatus(mls.getLockStatus());
+//            jsonResponse.setLockHolder(mls.getLockHolder());
+//            return response.status(Status.OK).entity(jsonResponse.toMap()).build();
+//        }
+
     }
 
     /**
@@ -332,29 +360,29 @@ public class RestMusicLocksAPI {
     public Response unLock(@PathParam("lockreference") String lockId,
             @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
             @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
+            @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
             @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
             @ApiParam(value = "Application namespace",
-                            required = true) @HeaderParam("ns") String ns,
-            @ApiParam(value = "userId",
-                            required = true) @HeaderParam("userId") String userId,
-            @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password) throws Exception{
+                            required = true) @HeaderParam("ns") String ns) throws Exception{
+        try {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockId);
-        if (resultMap.containsKey("Exception")) {
+        if (resultMap.containsKey("Error")) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+            response.status(Status.BAD_REQUEST);
+            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build();
         }
+
         String keyspaceName = (String) resultMap.get("keyspace");
+        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
         resultMap.remove("keyspace");
-        resultMap = MusicCore.autheticateUser(ns, userId, password, keyspaceName, aid,
-                "unLock");
-        if (resultMap.containsKey("aid"))
-            resultMap.remove("aid");
-        if (!resultMap.isEmpty()) {
-            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.INCORRECTDATA  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.DELETE_LOCK)) {
+            return response.status(Status.UNAUTHORIZED)
+                    .entity(new JsonResponse(ResultType.FAILURE)
+                            .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                            .toMap()).build();
         }
+        
         boolean voluntaryRelease = true; 
         MusicLockState mls = MusicCore.releaseLock(lockId,voluntaryRelease);
         if(mls.getErrorMessage() != null) {
@@ -375,6 +403,9 @@ public class RestMusicLocksAPI {
             response.status(Status.BAD_REQUEST);
         }
         return response.entity(returnMap).build();
+        } finally {
+            EELFLoggerDelegate.mdcRemove("keyspace");
+        }
     }
 
     /**
@@ -390,34 +421,37 @@ public class RestMusicLocksAPI {
             @ApiParam(value = "Minor Version",required = false) @HeaderParam(XMINORVERSION) String minorVersion,
             @ApiParam(value = "Patch Version",required = false) @HeaderParam(XPATCHVERSION) String patchVersion,
             @ApiParam(value = "AID", required = true) @HeaderParam("aid") String aid,
+            @ApiParam(value = "Authorization", required = true) @HeaderParam(MusicUtil.AUTHORIZATION) String authorization,
             @ApiParam(value = "Application namespace",
-                            required = true) @HeaderParam("ns") String ns,
-            @ApiParam(value = "userId",
-                            required = true) @HeaderParam("userId") String userId,
-            @ApiParam(value = "Password",
-                            required = true) @HeaderParam("password") String password) throws Exception{
+                            required = true) @HeaderParam("ns") String ns) throws Exception{
+        try {
         ResponseBuilder response = MusicUtil.buildVersionResponse(VERSION, minorVersion, patchVersion);
         Map<String, Object> resultMap = MusicCore.validateLock(lockName);
-        if (resultMap.containsKey("Exception")) {
+        if (resultMap.containsKey("Error")) {
             logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.UNKNOWNERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+            response.status(Status.BAD_REQUEST);
+            return response.entity(new JsonResponse(ResultType.FAILURE).setError(String.valueOf(resultMap.get("Error"))).toMap()).build();
         }
+
         String keyspaceName = (String) resultMap.get("keyspace");
+        EELFLoggerDelegate.mdcPut("keyspace", "( "+keyspaceName+" ) ");
         resultMap.remove("keyspace");
-        resultMap = MusicCore.autheticateUser(ns, userId, password, keyspaceName, aid,
-                "deleteLock");
-        if (resultMap.containsKey("aid"))
-            resultMap.remove("aid");
-        if (!resultMap.isEmpty()) {
-            logger.error(EELFLoggerDelegate.errorLogger,"", AppMessages.UNKNOWNERROR  ,ErrorSeverity.CRITICAL, ErrorTypes.GENERALSERVICEERROR);
-            return response.status(Status.BAD_REQUEST).entity(resultMap).build();
+        if (!authenticator.authenticateUser(ns, authorization, keyspaceName, aid, Operation.DELETE_LOCK)) {
+            return response.status(Status.UNAUTHORIZED)
+                    .entity(new JsonResponse(ResultType.FAILURE)
+                            .setError("Unauthorized: Please check username, password and make sure your app is onboarded")
+                            .toMap()).build();
         }
+        
         try{
-               MusicCore.deleteLock(lockName);
+            MusicCore.deleteLock(lockName);
         }catch (Exception e) {
             return response.status(Status.BAD_REQUEST).entity(new JsonResponse(ResultType.FAILURE).setError(e.getMessage()).toMap()).build();
-               }
+        }
         return response.status(Status.OK).entity(new JsonResponse(ResultType.SUCCESS).toMap()).build();
+        } finally {
+            EELFLoggerDelegate.mdcRemove("keyspace");
+        }
     }
 
 }