#!/usr/bin/python                                                                                                                                            

# Copyright 2014 Cloud Linux Zug GmbH
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENSE.TXT
                                                                                                                                                             
import os                                                                                                                                                    
import pprint 
import sys
import getopt
import shutil
import stat
import glob
import grp
import pwd
import yum
import time
import math

sys.path.append(os.path.abspath("/usr/share/lve/modlscapi/user"))
import lve_diagnostic
from lve_diagnostic import *
import exec_command
from exec_command import *
from pwd import getpwnam  
from grp import getgrnam  
from distutils import version
from distutils.version import StrictVersion

SOURCE="/usr/share/lve/modlscapi/user"

def get_cl_num():
    result = exec_command("rpm -q --qf \"%{version}\n\" `rpm -q --whatprovides /etc/redhat-release`")
    return result[0]

def getItem(txt1, txt2, op):
	try:
    		i1 = int(txt1)
	except ValueError:
    		i1 = -1
	try:
    		i2 = int(txt2)
	except ValueError:
    		i2 = -1
	if i1 == -1 or i2 == -1:
		if op == 0:
			return txt1>txt2
		else:
			return txt1<txt2
	else:
		if op == 0:
			return i1>i2
		else:
			return i1<i2

	
#Compare version of types xx.xx.xxx... and yyy.yy.yy.y..
#if xxx and yyy is numbers, than comapre as numbers
#else - comapre as strings
def verCompare (base, test):
	base = base.split(".")
	test = test.split(".")
	if(len(base)>len(test)):
		ln = len(test)
	else:
		ln = len(base)
	for i in range(ln):
		if getItem(base[i],test[i],0):
			return 1
		if getItem(base[i],test[i],1):
			return -1
	if len(base)==len(test):	
		return 0
	elif len(base)>len(test):
		return 1
	else:
		return 0

def usage():
	print ''                                                                                                                                             
        print 'Use following syntax to manage MODLSAPI istall utility:'                                                                                                       
        print sys.argv[0]+" [OPTIONS]"                                                                                                                       
        print 'Options:'                                                                                                                                     
        print "--setup - setup mod_lsapi configurations for apache"
        print "--uninstall - uninstall mod_lsapi from apache"
        print "--enable-domain - enable mod_lsapi for individual domain"
        print "--disable-domain - disable mod_lsapi for individual domain"
        print "--enable-global - sets up mod_lsapi as a default way to serve PHP, making it enabled for all domains. Once that mode is enabled, you cannot disable mod_lsapi for individual domain"
        print "--disable-global - disable mod_lsapi  as a default way to serve PHP, disabling mod_lsapi for all domains, including those selected previously using --enable-domain"
        print "--build-native-lsphp - build native lsphp for cPanel"

        
class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'

    def disable(self):
        self.HEADER = ''
        self.OKBLUE = ''
        self.OKGREEN = ''
        self.WARNING = ''
        self.FAIL = ''
        self.ENDC = ''

def install_modlsapi():
	if cp.name == "Plesk" and verCompare (cp.version, "10") >= 0:
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/rpm_install")
	elif cp.name == "cPanel":
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/switch_lsapi --setup")
	elif cp.name == "InterWorx":
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/rpm_install")
	elif cp.name == "ISPManager":	
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/rpm_install")
	elif cp.name == "DirectAdmin":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	else:
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/rpm_install")

def uninstall_modlsapi():
	if cp.name == "Plesk" and verCompare (cp.version, "10") >= 0:
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "cPanel":
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/switch_lsapi --uninstall")
	elif cp.name == "InterWorx":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "ISPManager":	
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "DirectAdmin":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	else:
		print bcolors.FAIL + "!!!Unknown panel!!!!"+ bcolors.ENDC

def enable_domain_modlsapi(a):
	if cp.name == "Plesk" and verCompare (cp.version, "10") >= 0:
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "cPanel":
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/switch_lsapi --enable-domain " + a)
	elif cp.name == "InterWorx":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "ISPManager":	
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "DirectAdmin":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	else:
		print bcolors.FAIL + "!!!Unknown panel!!!!"+ bcolors.ENDC

def disable_domain_modlsapi(a):
	if cp.name == "Plesk" and verCompare (cp.version, "10") >= 0:
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "cPanel":
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/switch_lsapi --disable-domain " + a)
	elif cp.name == "InterWorx":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "ISPManager":	
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "DirectAdmin":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	else:
		print bcolors.FAIL + "!!!Unknown panel!!!!"+ bcolors.ENDC
		

def enable_global_modlsapi():
	if cp.name == "Plesk" and verCompare (cp.version, "10") >= 0:
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "cPanel":
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/switch_lsapi --enable-global")
	elif cp.name == "InterWorx":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "ISPManager":	
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "DirectAdmin":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	else:
		print bcolors.FAIL + "!!!Unknown panel!!!!"+ bcolors.ENDC

def disable_global_modlsapi():
	if cp.name == "Plesk" and verCompare (cp.version, "10") >= 0:
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "cPanel":
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/switch_lsapi --disable-global")
	elif cp.name == "InterWorx":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "ISPManager":	
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "DirectAdmin":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	else:
		print bcolors.FAIL + "!!!Unknown panel!!!!"+ bcolors.ENDC	

def lsphp_modlsapi():
	if cp.name == "Plesk" and verCompare (cp.version, "10") >= 0:
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "cPanel":
		print bcolors.OKGREEN + "Instruction: " + bcolors.OKBLUE + "http://docs.cloudlinux.com/index.html?apache_mod_lsapi.html" + bcolors.ENDC
		exec_command_out(SOURCE+"/switch_lsapi --build-native-lsphp")
	elif cp.name == "InterWorx":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "ISPManager":	
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	elif cp.name == "DirectAdmin":
		print bcolors.WARNING + "!!!Not supported yet!!!"+ bcolors.ENDC
	else:
		print bcolors.FAIL + "!!!Unknown panel!!!!"+ bcolors.ENDC


cp = get_cp()
try:
	opts, args = getopt.getopt(sys.argv[1:], "h", ["help", "setup", "enable-domain=", "disable-domain=", "enable-global", "disable-global", "uninstall", "build-native-lsphp"])
except getopt.GetoptError, err:
	# print help information and exit:
	print str(err) # will print something like "option -a not recognized"
	usage()
	sys.exit(2)
	                                                          
for o, a in opts:
	if o in ("-h", "--help"):
		usage()
		sys.exit()
	elif o in ("--setup",):
                install_modlsapi()
	elif o in ("--enable-domain",):
		enable_domain_modlsapi(a)
        elif o in ("--disable-domain",):
		disable_domain_modlsapi(a)
        elif o in ("--enable-global",):
		enable_global_modlsapi()
        elif o in ("--disable-global",):
		disable_global_modlsapi()
        elif o in ("--uninstall",):
		uninstall_modlsapi()
	elif o in ("--build-native-lsphp",):
		lsphp_modlsapi()
	else:
		usage()
		sys.exit(2)
