#Packages
import os
import subprocess
import shutil
import time
import re
#----------------------------------------------------------------------------------------------------
start_time = time.time()
#----------------------------------------------------------------------------------------------------
#Functions
def remove(path):
    #Remove the file or directory
    if os.path.isdir(path):
        try:
            shutil.rmtree(path)
        except OSError:
            print "Unable to remove folder: %s" % path
    else:
        try:
            if os.path.exists(path):
                os.remove(path)
        except OSError:
            print "Unable to remove file: %s" % path


def chrome_cleanup(dirpath,folder_to_exclude):
    for root, dirs, files in os.walk(dirpath, topdown=True):
        for file_ in files:
            full_path = os.path.join(root, file_)
            if folder_to_exclude not in full_path:
                print 'removing -> ' + full_path
                remove(full_path)
        for folder in dirs:
            full_path = os.path.join(root, folder)
            if folder_to_exclude not in full_path:
                remove(full_path)

def firefox_cleanup(dirpath,folder_to_exclude):
    for root, dirs, files in os.walk(dirpath, topdown=True):
        for file_ in files:
            full_path = os.path.join(root, file_)
            if folder_to_exclude[0] not in full_path and folder_to_exclude[1] not in full_path:
                print 'removing -> ' + full_path
                remove(full_path)
        for folder in dirs:
            full_path = os.path.join(root, folder)
            if folder_to_exclude[0] not in full_path and folder_to_exclude[1] not in full_path:
                remove(full_path)
                
def permissions(dirpath):
    mode=0o777
    if os.path.isdir(dirpath):
        try:
            for root,dirs,files in os.walk(dirpath,topdown=False):
                for dircs in [os.path.join(root,d) for d in dirs]:
                    os.chmod(dircs,mode)
                for s_file in [os.path.join(root,f) for f in files]:
                    os.chmod(s_file,mode)
        except Exception as E:
            print E

#path_creation
def path_creation(fil_users):
    fir_ls=[]
    chr_ls=[]
    ls=[]
    #firefox
    for i in fil_users:
        try:
            path="C:\Users\%s\AppData\Roaming\Mozilla\Firefox\Profiles"%i
            if os.path.exists(path):
                os.chdir(path)
                ls.append(os.popen('cd').read().rstrip())
        except:
            print("No Path")
    
    for i in ls:
        os.chdir(i)
        out=os.popen('dir').read()
        fir_ls.append(re.findall('\w+.default-release',out))
    fir_ls_n=[]
    for i in fir_ls:
        if i[0]:
            fir_ls_n.append(i[0])
        else:pass
    l=[]
    for i,j in zip(fir_ls_n,ls):
        l.append(os.path.join(j,i))
    #chrome
    for i in fil_users:
        chr_path='C:\Users\%s\AppData\Local\Google\Chrome\User Data\Default'%i
        if os.path.exists(chr_path):
            chr_ls.append(chr_path)
        else:
            pass
    return [l,chr_ls]
#-----------------------------------------------------------------------------------------------------
#codes
users=os.popen("net user").read().split()[5:-5]
filtered_users=[i for i in users if i!='Guest']
#print filtered_users

paths=path_creation(filtered_users)
#print paths[1]

# save_path_chrome=[]
# for i in paths[1]:
#     save_path_chrome.append(i+"\Login Data")
# tot_chrome=zip(paths[1],save_path_chrome)

save_path_fire=[]
for i in paths[0]:
    save_path_fire.append([i+"\logins.json",i+"\key4.db"])
tot_fire=zip(paths[0],save_path_fire)
    
#print paths[0]
#print paths[1]
#print save_path_chrome
#print tot_chrome
#print tot_fire[0][1]
try:
    #chrome
    for i in paths[1]:
        if os.path.exists(i):
            print("Starting Google Chrome...\n")
            print("Chrome Permission fixing...")
            permissions(i)
            print("Cleaning Up Chrome....\n")
            chrome_cleanup(i,'Login Data')
            print("Chrome Completed!!!\n")
    #firefox
    for i,j in tot_fire:
        if os.path.exists(i):
            print("Starting Mozilla Firefox...\n")
            print("Firefox Permission fixing...")
            permissions(i)
            print("Cleaning Up Firefox....\n")
            firefox_cleanup(i,j)
            print("Firefox Completed!!!\n")
except Exception as E:
    print E
finally:
    print "Code Executed"
    print("--- %s seconds ---" % (time.time() - start_time))