import sys, json
from itertools import cycle, izip

#rConfigPath = "/home/xtreamcodes/iptv_xtream_codes/config"
rConfigPath = "config"

def doDecrypt():
    rDecrypt = decrypt()
    if rDecrypt:
        print "Server ID: %s%d" % (" "*10, int(rDecrypt["server_id"]))
        print "Host: %s%s" % (" "*15, rDecrypt["host"])
        print "Port: %s%d" % (" "*15, int(rDecrypt["db_port"]))
        print "Username: %s%s" % (" "*11, rDecrypt["db_user"])
        print "Password: %s%s" % (" "*11, rDecrypt["db_pass"])
        print "Database: %s%s" % (" "*11, rDecrypt["db_name"])
    else: print "Config file could not be read!"

def decrypt():
    try: return json.loads(''.join(chr(ord(c)^ord(k)) for c,k in izip(open(rConfigPath, 'rb').read().decode("base64"), cycle('5709650b0d7806074842c6de575025b1'))))
    except: return None

def encrypt(rInfo):
    try: os.remove(rConfigPath)
    except: pass
    rf = open(rConfigPath, 'wb')
    rf.write(''.join(chr(ord(c)^ord(k)) for c,k in izip('{\"host\":\"%s\",\"db_user\":\"%s\",\"db_pass\":\"%s\",\"db_name\":\"%s\",\"server_id\":\"%d\", \"db_port\":\"%d\"}' % (rInfo["host"], rInfo["db_user"], rInfo["db_pass"], rInfo["db_name"], int(rInfo["server_id"]), int(rInfo["db_port"])), cycle('5709650b0d7806074842c6de575025b1'))).encode('base64').replace('\n', ''))
    rf.close()

if __name__ == "__main__":
    try: rCommand = sys.argv[1]
    except: rCommand = None
    if rCommand and rCommand.lower() == "decrypt": doDecrypt()
    elif rCommand and rCommand.lower() == "encrypt":
        print "Current configuration"
        print " "
        doDecrypt()
        print " "
        rEnc = {"pconnect": 0}
        try:
            rEnc["server_id"] = int(raw_input("Server ID: %s" % (" "*10)))
            rEnc["host"] = raw_input("Host: %s" % (" "*15))
            rEnc["db_port"] = raw_input("Port: %s" % (" "*15))
            rEnc["db_user"] = raw_input("Username: %s" % (" "*11))
            rEnc["db_pass"] = raw_input("Password: %s" % (" "*11))
            rEnc["db_name"] = raw_input("Database: %s" % (" "*11))
            print " "
        except:
            print "Invalid entries!"
            sys.exit(1)
        try:
            encrypt(rEnc)
            print "Written to config file!"
        except: print "Couldn't write to file!"
    else: print "Usage: config.py [ENCRYPT | DECRYPT]"
