#!/usr/pkg/bin/perl
# Create, update or delete an upstart service

require './init-lib.pl';
&error_setup($text{'upstart_err'});
$access{'bootup'} || &error($text{'edit_ecannot'});
&ReadParse();
@upstarts = &list_upstart_services();
$cfile = "/etc/init/$in{'name'}.conf";

# Get the service
if (!$in{'new'}) {
	($u) = grep { $_->{'name'} eq $in{'name'} } @upstarts;
	$u || &error($text{'upstart_egone'});
	$u->{'legacy'} && &error($text{'upstart_elegacy'});
	}

if ($in{'start'} || $in{'stop'}) {
	# Just redirect to the start page
	&redirect("mass_upstarts.cgi?d=".&urlize($in{'name'})."&".
		  ($in{'start'} ? "start=1" : "stop=1").
		  "&return=".&urlize($in{'name'}));
	exit;
	}

if ($in{'delete'}) {
	# Delete the service
	&disable_at_boot($in{'name'});
	&stop_upstart_service($in{'name'});
	&delete_upstart_service($in{'name'});
	&webmin_log("delete", "upstart", $in{'name'});
	}
elsif ($in{'new'}) {
	# Validate inputs and check for clash
	$in{'name'} =~ /^[a-z0-9\.\_\-]+$/i ||
		&error($text{'upstart_ename'});
	($clash) = grep { $_->{'name'} eq $in{'name'} } @upstarts;
	$clash && &error($text{'upstart_eclash'});
	$in{'desc'} || &error($text{'upstart_edesc'});
	$in{'server'} =~ /\S/ || &error($text{'upstart_eserver'});
	($bin, $args) = split(/\s+/, $in{'server'});
	&has_command($bin) || &error($text{'upstart_eserver2'});
	$in{'server'} =~ /;|\&\&|\|\|/ && &error($text{'upstart_eserver3'});
	$in{'prestart'} =~ s/\r//g;

	# Create the config file
	&create_upstart_service($in{'name'}, $in{'desc'}, $in{'server'},
				$in{'prestart'}, $in{'fork'});

	# Enable at boot if selected
	if ($in{'boot'} == 0) {
		&disable_at_boot($in{'name'});
		}
	else {
		&enable_at_boot($in{'name'});
		}

	&webmin_log("create", "upstart", $in{'name'});
	}
else {
	# Just save the config file
	$in{'conf'} =~ /\S/ || &error($text{'upstart_econf'});
	$in{'conf'} =~ s/\r//g;
	&open_lock_tempfile(CONF, ">$cfile");
	&print_tempfile(CONF, $in{'conf'});
	&close_tempfile(CONF);

	# Enable or disable
	if (defined($in{'boot'})) {
		if ($in{'boot'} == 0) {
			&disable_at_boot($in{'name'});
			}
		else {
			&enable_at_boot($in{'name'});
			}
		}

	&webmin_log("modify", "upstart", $in{'name'});
	}
&redirect("");

