Server Toggle

Do you run your own server? If so, this script makes toggling various servers (Apache, MySQL, Sendmail, or WebMin) on and off a little easier.

OS version: OS X

property admin_password : ""
property mysql_password : ""
property mysql_user : ""
property mysql_host : ""
property last_choice : ""

--load the properties
repeat while admin_password = ""
	set admin_password to my cl_ask_password("Enter the Root Password:")
end repeat

repeat while mysql_password = ""
	set mysql_password to my cl_ask_password("Enter the MySQL Password:")
end repeat

repeat while mysql_user = ""
	set mysql_user to my cl_ask_password("Enter the MySQL User:")
end repeat

repeat while mysql_host = ""
	set mysql_host to my cl_ask_password("Enter the MySQL Host:")
end repeat

set the_actions to {"Apache: Start", "Apache: Stop", "Apache: Graceful Restart", "", "MySQL: Start", "MySQL: Stop", "", "Sendmail: Restart", "", "Webmin: Start", "Webmin: Stop"}
set the_scripts to {"apachectl start", "apachectl stop", "apachectl graceful", "", "/usr/local/bin/mysqld --user=mysql &", "/usr/local/bin/mysqladmin -u " & mysql_user & " -h " & mysql_host & " -p" & mysql_password & " shutdown", "", "/System/Library/StartupItems/Sendmail/Sendmail restart", "", "/etc/webmin/start", "/etc/webmin/stop"}

if last_choice = "" then set last_choice to item 1 of the_actions
repeat
	set the_choice to (choose from list the_actions with prompt "What would you like to do?" default items {last_choice}) as string
	if the_choice = "false" then
		return
	else if the_choice ? "" then
		set last_choice to the_choice
		exit repeat
	end if
end repeat
set the_script to my match_paired_lists(the_choice, the_actions, the_scripts, "")

try
	set the_response to ""
	ignoring application responses
		set the_response to do shell script the_script password admin_password with administrator privileges
	end ignoring
	if the_response = "" then set the_response to the_choice & "ed."
	display dialog the_response buttons {"OK"} default button 1 with icon 1 giving up after 10
on error the_error
	display dialog the_error buttons {"OK"} default button 1 with icon 0 giving up after 10
end try

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

on match_paired_lists(match_value, list_a, list_b, no_match_val)
	repeat with i from 1 to count of list_a
		if (item i of list_a) = match_value then return (item i of list_b)
	end repeat
	return no_match_val
end match_paired_lists

on cl_ask_password(the_prompt)
	if the_prompt = "" then set the_propmt to "Administrator Password:"
	return text returned of (display dialog the_prompt default answer "" buttons {"Cancel", "OK"} default button 2 with icon 1)
end cl_ask_password