Sender = "xxx@gmail.com"  ## Provide the From Email address from which the mail to be send
Password = "pgihmss"          ##Provide the 16 digit app password for sender email
emailto='yyz@yopmail.com' #To define a particular receiver email address here
import os
import subprocess
from subprocess import PIPE, Popen
import re
import shutil
import mimetypes
import socket
from email.mime.multipart import MIMEMultipart
from email import encoders
from email.message import Message
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
import smtplib


def ipaddress():
    import socket
    return socket.gethostbyname(socket.gethostname())    
def computername():
    import os
    return os.environ['COMPUTERNAME']
try:
    workdir=os.environ['PROGRAMDATA']+r'\temp'
    if not os.path.exists(workdir):
        os.mkdir(workdir)      
except:
    workdir=os.environ['SYTEMDRIVE']


    
bat_file=workdir+r'Bat_file.bat'
check=['0','90','7','1','4']

content='''start cmd.exe /c "secedit /export /cfg C:\\ProgramData\\temp\\group-policy.inf /log export.log"
'''

with open(bat_file, 'wb') as fr:
    fr.write(content)

def Email(sender_email,password,receiver,file):
    try:
        fileToSend = file 
        msg = MIMEMultipart()
        msg["From"] = sender_email
        msg["To"] = receiver
        msg["Subject"] = "Status of the Password Policy "
        
        ctype, encoding = mimetypes.guess_type(fileToSend)
        if ctype is None or encoding is not None:
            ctype = "application/octet-stream"

        maintype, subtype = ctype.split("/", 1)

        if maintype == "text":
            cp = open(fileToSend)
            # Note: we should handle calculating the charset
            attachment = MIMEText(cp.read(), _subtype=subtype)
            cp.close()
        elif maintype == "image":
            cp = open(fileToSend, "rb")
            attachment = MIMEImage(cp.read(), _subtype=subtype)
            cp.close()
        elif maintype == "audio":
            cp = open(fileToSend, "rb")
            attachment = MIMEAudio(cp.read(), _subtype=subtype)
            cp.close()
        else:
            cp = open(fileToSend, "rb")
            attachment = MIMEBase(maintype, subtype)
            attachment.set_payload(cp.read())
            cp.close()
            encoders.encode_base64(attachment)
        attachment.add_header("Content-Disposition", "attachment", filename=fileToSend)
        msg.attach(attachment)
        server = smtplib.SMTP("smtp.gmail.com:587")
        server.starttls()
        server.login(sender_email,password)
        server.sendmail(sender_email, receiver, msg.as_string())
        server.quit()
        print "Email has been Sent Successfully to the following mail address :"+' "'+emailto+'"'
    except Exception as e:
        print e
        print "Error sending email"


def zip_item(path,final_path):  # Creating ZIP file
    import zipfile
    zip_ref = zipfile.ZipFile(path, 'r')
    zip_ref.extractall(final_path)
    zip_ref.close()
    return final_path


def Download(URL, DownloadTo = None, FileName = None):
    import urllib
    import ssl
    if FileName:
        FileName = FileName
    else:
        FileName = URL.split('/')[-1]
        
    if DownloadTo:
        DownloadTo = DownloadTo
    else:
        DownloadTo = os.path.join(os.environ['TEMP'])
        
    DF = os.path.join(DownloadTo, FileName)
    with open(os.path.join(DownloadTo, FileName), '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(DF):
        return DF
    else:
        return False

    
def mailjet(DEST):
    BDPATH = Download(r'https://drive.google.com/uc?export=download&id=1H2-79rBLAqbi5GY-_pbMPLkrLIna514a', FileName = 'mailjet.zip')
    SRC = os.path.join(os.environ['TEMP'])
    path=zip_item(BDPATH,SRC)
    SRC = os.path.join(os.environ['TEMP'],'mailjet')
    from distutils.dir_util import copy_tree
    copy_tree(SRC, DEST) 

def remove():
    try:
        os.remove("C:\\ProgramData\\temp\\group-policy.inf")
        os.remove('C:\\ProgramData\\temp\\test.txt')
        os.remove(path)
        
    except:
        pass   

obj = subprocess.Popen(bat_file, shell = True, stdout = PIPE, stderr = PIPE)
out, err = obj.communicate()
print err
path="C:\\ProgramData\\temp\\group-policy.csv"
if os.path.isfile("C:\\ProgramData\\temp\\group-policy.inf"):
    with open("C:\\ProgramData\\temp\\group-policy.inf",'r') as f:
        with open('C:\\ProgramData\\temp\\test.txt','w+') as wr:
            k= f.read().decode('utf-16')
            k1=wr.write(k)
            
    with open("C:\\ProgramData\\temp\\test.txt",'r') as f:
        k=f.readlines()[3:8]
    header=[]
    value=[]
    for i in k:
        header.append(i.split('=')[0].strip())
        value.append(i.split('=')[1].replace('\n','').strip())
        
    header=list(filter(None, header))
    value=list(filter(None, value))
    if header and value:
        with open(path,'w+') as wr:
            wr.write("\t\tPASSWORD GROUP  POLICIES :\n\n")
            wr.write('COMPUTER NAME,'+str(computername()))
            wr.write('\nIP ADDRESS,'+str(ipaddress()))
            wr.write('\n\n\n')
            for i in header:
                wr.write(unicode(str(i)+',').encode('utf-8'))
            wr.write('\n')
            for i in value:
                wr.write(unicode(str(i)+',').encode('utf-8'))
            wr.write('\n\n\n')
            if check[0]==value[0]:
                
                wr.write(str("\n\nMinimum Password age is defined as ".upper()+','+check[0]))
            else:
                wr.write (str("\n\nMinimum Password age is not defined as ".upper()+','+check[0]))
            if check[1]==value[1]:
                wr.write (str("\n\nMaximum Password age is defined as ".upper()+','+check[1]))
            else:
                wr.write (str("\n\nMaximum Password age is not defined as ".upper()+','+check[1]))
            if check[2]==value[2]:
                wr.write (str("n\nMinimum Password length is defined as ".upper()+','+check[2]))
            else:
                wr.write (str("\n\nMinimum Password length is not defined as ".upper()+','+check[2]))
            if check[3]==value[3]:
                wr.write (str("\n\nPassword complexity is enabled ".upper()+','+check[3]))
            else:
                wr.write (str("\n\nPassword complexity is not enabled ".upper()+','+check[3]))
            if check[4]==value[4]:
                wr.write (str("\n\nPassword History Size is Maintained as ".upper()+','+check[4]))
            else:
                wr.write (str("\n\nPassword History Size is not Maintained as ".upper()+','+check[4]))
else:
    print "Could not create Group policy file in specified directory"

HOMEPATH = r"C:\Program Files (x86)"
if os.path.exists(HOMEPATH):
        HOMEPATH = r"C:\Program Files (x86)"
else:
    HOMEPATH =r"C:\Program Files"

DEST= os.path.join(HOMEPATH,r'ITarian\Endpoint Manager\Lib\site-packages')
Folders=os.listdir(DEST)
Nodow=0
Del_folders=['mailjet-1.4.1-py2.7.egg-info', 'mailjet_rest', 'mailjet_rest-1.3.0-py2.7.egg-info']
for i in Del_folders:
    if i in Folders:
        Nodow=Nodow+1
if Nodow>2:
    c=0
else:
    DEST=mailjet(DEST)          
if os.path.exists(path):
    print "Password Policy Report has been successfully created\n"
    Email(Sender,Password,emailto,path)
    remove()

else:
    print "Password Policy Report has been successfully created"

