def unShare(self, **kwargs):
     """Server Side Unshare
         Remove user AccessFile to the File by its ID and update Database
         AccessManagement Table
         Security: Authenticate User Message
         Concurrency control"""
     username = kwargs['username']
     sessionKey = um.getSessionKey(username)
     if sessionKey != -1:
         try:
             data = json.loads(
                 security.decryptS_AES(kwargs['data'].decode('hex'),
                                       sessionKey.decode('hex')))
             filename = data['filename']
             user_id = DBmodule.db_getUserID(username)
             # Concurrent Access
             file_id = DBmodule.db_getFileId(user_id, filename)
             while (DBmodule.db_fileStatus(file_id) is True):
                 time.sleep(2)
             status = DBmodule.db_fileInUse(file_id)
             # Verify if the user is valid and have access to the file
             if status and um.validUser(
                     kwargs['username']) and DBmodule.db_filePermission(
                         user_id, file_id):
                 unsharename = data['unshare']
                 unshareid = DBmodule.db_getUserID(unsharename)
                 userlist = [unshareid
                             ] + DBmodule.db_getAllShareDependencies(
                                 unshareid, file_id)
                 # Remove access permission from the database
                 DBmodule.db_removeShare(user_id, file_id, unshareid)
                 # Remoce user access file from the server
                 for usr in userlist:
                     os.remove('storage/' + str(file_id) + '.file.key' +
                               str(usr))
                 statusF = DBmodule.db_fileNotInUse(file_id)
                 if statusF is True:
                     return 'Okay'
                 else:
                     raise cherrypy.HTTPError(
                         408,
                         'Request Timeout! Please Try Again\nSafeBox Team')
             else:
                 raise cherrypy.HTTPError(
                     401,
                     'Currently, you are not a valid user!\nSafeBox Team')
         except:
             raise cherrypy.HTTPError(
                 401, 'Currently, you are not a valid user!\nSafeBox Team')
     else:
         raise cherrypy.HTTPError(
             401, 'Currently, you are not a valid user!\nSafeBox Team')
 def removeFile(self):
     """Server Side Remove
         Remove ciphertext of the file and all user AccessFiles to it
         by its ID and update Database AccessManagement Table
         Security: Authenticate User Message
         Concurrency control"""
     lcHDRS = {}
     for key, val in cherrypy.request.headers.iteritems():
         lcHDRS[key.lower()] = val
     username = lcHDRS['username']
     sessionKey = um.getSessionKey(username)
     if sessionKey != -1:
         try:
             data = json.loads(
                 security.decryptS_AES(lcHDRS['data'].decode('hex'),
                                       sessionKey.decode('hex')))
             filename = data['filename']
             user_id = DBmodule.db_getUserID(username)
             file_id = DBmodule.db_getFileId(user_id, filename)
             # Concurrent Access
             while (DBmodule.db_fileStatus(file_id) is True):
                 time.sleep(2)
             status = DBmodule.db_fileInUse(file_id)
             # Verify if the user is valid and has access to the file
             if status and um.validUser(
                     username) and DBmodule.db_filePermission(
                         user_id, file_id):
                 # If the user is the owner of the file, all the users loose the file
                 if DBmodule.db_isOwner(user_id, file_id) == 1:
                     DBmodule.db_removeFile(file_id)
                     pattern = '^' + str(file_id) + '.file'
                     mypath = 'storage'
                     for root, dirs, files in os.walk(mypath):
                         for fileFound in filter(
                                 lambda x: re.match(pattern, x), files):
                             os.remove(os.path.join(root, fileFound))
                 # If the user is not the owner, only removes it's access to the file
                 else:
                     userlist = [user_id
                                 ] + DBmodule.db_getAllShareDependencies(
                                     user_id, file_id)
                     for usr in userlist:
                         DBmodule.db_removeAccess(file_id, usr)
                         os.remove('storage/' + str(file_id) + '.file.key' +
                                   str(usr))
                     statusF = DBmodule.db_fileNotInUse(file_id)
                     if statusF is True:
                         return 'Okay'
                     else:
                         raise cherrypy.HTTPError(
                             408,
                             'Request Timeout! Please Try Again\nSafeBox Team'
                         )
             else:
                 raise cherrypy.HTTPError(
                     401,
                     'Currently, you are not a valid user!\nSafeBox Team')
         except:
             raise cherrypy.HTTPError(
                 401, 'Currently, you are not a valid user!\nSafeBox Team')
     else:
         raise cherrypy.HTTPError(
             401, 'Currently, you are not a valid user!\nSafeBox Team')