client_id = itsm.getParameter('client_id')
client_secret = itsm.getParameter('client_secret')
refresh_token = itsm.getParameter('refresh_token')


import os
import subprocess
import ctypes
import re
import sys
import time
import smtplib
import zipfile
import shutil

from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

temp=os.environ['PROGRAMDATA']+r'\c1_temp'
temp1=os.environ['PROGRAMDATA']+r'\c2_temp'

if not os.path.exists(temp):
    os.mkdir(temp)

if not os.path.exists(temp1):
    os.mkdir(temp1)

path=r'C:\ProgramData\c1_temp'
dest_path=r'C:\ProgramData\c2_temp'

    
URL= r'http://www.uderzo.it/main_products/space_sniffer/files/spacesniffer_1_3_0_2.zip'
FileName=r'spacesniffer_1_3_0_2.zip'
fb=r'c:\export.csv'
a=r'C:\ProgramData'
print "Deploying "  +FileName+  " begins"

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)

def ecmd(command):   
    from subprocess import Popen, PIPE
    import ctypes
    
    with disable_file_system_redirection():
        obj = Popen(command, shell = True, stdout = PIPE, stderr = PIPE)
    out, err = obj.communicate()
    ret=obj.returncode
    if ret==0:
        if out:
            return out.strip()
        else:
            return ret
    else:
        if err:
            return err.strip()
        else:
            return ret

def Download(path, URL, FileName):
    import urllib2
    import os
    fn = FileName
    fp = os.path.join(path, fn)
    req = urllib2.Request(URL, headers={'User-Agent' : "Magic Browser"})
    con = urllib2.urlopen(req)
    with open(fp, 'wb') as f:
        while True:
            chunk=con.read(100*1000*1000)
            if chunk:
                f.write(chunk)
            else:
                break
    return fp
print "Download Completed"
Download(path, URL, FileName)

def filezip(fp,dest_path):
    fn = FileName
    fp = os.path.join(path, fn)
    with disable_file_system_redirection():
        with zipfile.ZipFile(fp,"r") as zip_ref:
            zip_ref.extractall(dest_path)
            print 'file unzipped to ' +dest_path 
filezip(path,dest_path)

def Execute(dest_path):
    os.chdir(dest_path)
    with disable_file_system_redirection():
        a=os.popen('SpaceSniffer.exe SpaceSniffer.exe scan c:\ export "Grouped by folder" c:\export.csv autoclose /S').read()
    print 'scanning completed'
    print 'file exported'
    os.chdir(dest_path)
Execute(dest_path)
print 'success'

def file():
    import csv
    with open('c:\export.csv', 'rb') as inf:
        reader = csv.reader(inf)
        with open('c:\export.txt', 'wb') as out:
            writer = csv.writer(out, delimiter='\t')
            writer.writerows(reader)
file()

def zip_file(file,file_path_name):
    with zipfile.ZipFile(file_path_name, 'w') as zip_object:
        zip_object.write(file)
    
DeviceName = os.environ['COMPUTERNAME']
zip_file_name = '%s.zip'%(DeviceName)
zipPath = 'c:\\%s'%(zip_file_name)
zip_file('c:\export.txt',zipPath)

def GDupload(refresh_token, client_id, client_secret,fileName,filepath):
    GDuploadPS = """
    $params = @{
        Uri = 'https://accounts.google.com/o/oauth2/token'
        Body = @(
            "refresh_token=%s", # Replace $RefreshToken with your refresh token
            "client_id=%s",         # Replace $ClientID with your client ID
            "client_secret=%s", # Replace $ClientSecret with your client secret
            "grant_type=refresh_token"
        ) -join '&'
        Method = 'Post'
        ContentType = 'application/x-www-form-urlencoded'
    }
    $accessToken = (Invoke-RestMethod @params).access_token

    $SourceFile = '%s'

    # If uploading to a Team Drive, set this to 'true'
    $supportsTeamDrives = 'false'

    $uploadMetadata = @{
        originalFilename=$sourceItem.Name
        name=$sourceItem.Name
        description="disk report zipfile"
    }

    $uploadHeaders = @{
        Authorization="Bearer $accessToken"
        "Content-Type" = "application/json"
    }

    # Perform the upload
    $response = Invoke-RestMethod -Uri "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&supportsTeamDrives=$supportsTeamDrives" -Method Post -Headers $uploadHeaders -InFile $SourceFile
    $urifile = "https://www.googleapis.com/drive/v3/files/$($response.id)"
    $renameResponse = Invoke-RestMethod -Uri $urifile -Method Patch -Headers $uploadHeaders -Body '{ "name":"%s" }'
    """%(refresh_token,client_id,client_secret,filepath,fileName)
    
    ps_name='powershell_file.ps1'
    ps_path=os.path.join(os.environ['TEMP'], ps_name)
    with open(ps_path, 'wb') as wr:
        wr.write(GDuploadPS)
        
    ecmd('powershell "Set-ExecutionPolicy RemoteSigned"')
    print ecmd('powershell "%s"'%ps_path)
    
    os.remove(ps_path)

GDupload(refresh_token,client_id,client_secret,zip_file_name,zipPath)
dele=r'C:\export.csv'
dele1=r'C:\export.txt'

try:
    fn = FileName
    fp = os.path.join(path, fn)
    abcdpath=r'C:\ProgramData'
    if os.path.exists(abcdpath):
        os.chdir(os.environ['programdata'])
        shutil.rmtree(temp1)
        shutil.rmtree(temp)
        print 'File removed from your system'
        os.path.exists(os.environ['systemdrive'])
        t1=os.environ['systemdrive']
        path1=t1+'\export.txt'
        os.remove(path1)
        t2=os.environ['systemdrive']
        path2=t2+'\export.csv'
        os.remove(path2)
        os.remove(zipPath)
    else:
        print 'file not removed from your system'
except Exception as err :
    print err
