kayako_ticket_number="AOI-221-286602"

import urllib2
import os
import shutil
import zipfile
import time
import ctypes
from subprocess import PIPE, Popen

def copy(source_path, destination_path):
    if os.path.isfile(source_path):
        with open(source_path, 'rb') as reader:
            data=reader.read()
        destination_file=os.path.join(destination_path, source_path.split(os.sep)[-1])
        with open(destination_file, 'wb') as writer:
            writer.write(data)
        return destination_file
    else:
        destination_folder=os.path.join(destination_path, source_path.split(os.sep)[-1])
        shutil.copytree(source_path, destination_folder)
        return destination_folder

class disable_file_system_redirection:
    _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
    _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
    def __enter__(self):
        self.old_value = ctypes.c_long()
        self.success = self._disable(ctypes.byref(self.old_value))
    def __exit__(self, type, value, traceback):
        if self.success:
            self._revert(self.old_value)		

import subprocess
import ssl
with disable_file_system_redirection():
    import urllib

def download(url, file_path):
    try:
        with open(file_path, 'wb') as f:
            try:
                context = ssl._create_unverified_context()
                f.write(urllib.urlopen(url,context=context).read())
            except:
                f.write(urllib.urlopen(url).read())
        if os.path.isfile(file_path):
            return file_path
		
    except:
        return 'Please Check URL or Download Path!'

def zip_item(path, zip_file_path):  # Creating ZIP file 
    zip_object=zipfile.ZipFile(zip_file_path, 'w')
    from subprocess import Popen, PIPE, call

    
    if os.path.isfile(path):
        try:
            os.chmod(path,0644)
        except:
            pass
        zip_object.write(path, path.split(os.sep)[-1])
        zip_object.close()
        return zip_file_path
    else:
        length_directory_path=len(path)
        for root, directories, files in os.walk(path):
            for file_name in files:
                try:
                    os.chmod(file_name,0644)
                except:
                    pass
                file_path=os.path.join(root, file_name) 
                zip_object.write(file_path, file_path[length_directory_path:])
        zip_object.close()
        return zip_file_path

def sftp_transfer(winscp_program_path, script_path, file_to_send):
    script_code=r"""
open sftp://c2support:c2!s@Me@c1report.comodo.com/ -hostkey=*
cd c1report/reports
put "%s"
close
exit
"""%file_to_send
    with open(script_path, "w") as writer:
        writer.write(script_code)
    os.chdir(os.path.join(os.getenv('programdata'),'temp_logs'))
    transfer_object=Popen('%s /script="%s"'%("WinSCP_C1_SFTP.exe", script_path), shell=True, stdout=PIPE, stderr=PIPE)
    transfer_object.communicate()
    os.chdir(os.path.join(os.getenv('programdata')))
    return transfer_object.returncode   

def ecmd(command, output=False):
    class disable_file_system_redirection:
        _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
        _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
        def __enter__(self):
            self.old_value = ctypes.c_long()
            self.success = self._disable(ctypes.byref(self.old_value))
        def __exit__(self, type, value, traceback):
            if self.success:
                self._revert(self.old_value)

    with disable_file_system_redirection():
        objt = Popen(command, shell = True, stdout = PIPE, stderr = PIPE)
    out, err = objt.communicate()
    ret=objt.returncode
    if not output:
        return ret
    else:
        return '%s\n%s'%(out, err)

computer_name=os.getenv('computername')
temp_folder='temp_logs'
work_directory=os.path.join(os.getenv('programdata'), temp_folder)
if os.path.exists(work_directory):
	try:
		shutil.rmtree(work_directory)
	except:
		print "You are intiating the script for the second time, Please try again after 15 Minutes"
		import sys
		sys.exit(0)
## Collects CCC Logs
time_tag=time.strftime('%Y_%m_%d_%H_%M_%S')
c1_file_name='%s_CCCLogData_%s_%s.zip'%(kayako_ticket_number, computer_name, time_tag)
c1_log_zip_file=os.path.join(os.getenv('programdata'), c1_file_name)

if 'PROGRAMW6432' in os.environ.keys():
    main_directory=r"C:\Program Files (x86)\ITarian\Endpoint Manager"
    log_files=[r"C:\Program Files (x86)\ITarian\Endpoint Manager\cdm.db",
               r"C:\Program Files (x86)\ITarian\Endpoint Manager\cdm.db.bck"]
    log_folders=[r"C:\Program Files (x86)\ITarian\Endpoint Manager\rmmlogs"]
else:
    main_directory=r"C:\Program Files\ITarian\Endpoint Manager"
    log_files=[r"C:\Program Files\ITarian\Endpoint Manager\cdm.db",
               r"C:\Program Files\ITarian\Endpoint Manager\cdm.db.bck"]
    log_folders=[r"C:\Program Files\ITarian\Endpoint Manager\rmmlogs"]
data_logs_folder="C:\\ProgramData\\ITarian\\Endpoint Manager\\logs"

for root, folders, files in os.walk(main_directory):
    for file_name in files:
        if file_name.lower().endswith('.dmp'):
            path=os.path.join(root, file_name)
            log_files.append(path)
print "Collecting CCC Logs"
print "***********"
print "copying cdm.db"
print "Copied cdm.db"
print "copying cdm.db.bck"
print "Copied cdm.db.bck"
print "copying rmm.dll"
print "Copied rmm.dll"
print "copying rmmlogs"
print "Copied rmmlogs"
print "******"

ccc_log_directory=os.path.join(os.getenv('programdata'), 'ccc_logs')
if not os.path.exists(ccc_log_directory):
    try:
	    os.mkdir(ccc_log_directory)
    except:
	    pass
log_files.extend(log_folders)
for i in log_files:
    copy(i, ccc_log_directory)
if os.listdir(ccc_log_directory):
    print 'Collecting CCCLOGs %s Done'%('.'*15)
else:
    print 'Failed to Collect CCCLOGs'

## Transfers File
zip_item(ccc_log_directory, c1_log_zip_file)

winscp_file_path=os.path.join(work_directory, 'WinSCP_C1_SFTP.exe')


winscp_url=r"https://cdn-patchportal-one.comodo.com/portal/packages/spm/DYMO%20Label%20Software/x86/WinSCP.exe"

os.mkdir(work_directory)
winscp_program_path=download(winscp_url, winscp_file_path)
winscp_script_file=os.path.join(work_directory, 'script_winscp.txt')
if sftp_transfer(winscp_program_path, winscp_script_file, c1_log_zip_file)==0:
	print 'Transfering CCCLOGs %s Done'%('.'*15)
else:
	print 'Failed to Transfer CCCLOGs'
ki=os.environ['TEMP']
os.chdir(ki)
try:
    shutil.rmtree(work_directory)
except:
    pass
try:
    os.remove(file2)
except:
    pass

try:
    shutil.rmtree(ccc_log_directory)
except:
    pass
