#!/usr/bin/env perl

=head1 NAME

setfilepermissions - set the file permissions for webwork

=head1 SYNOPSIS

 sudo -E setfilepermissions

=head1 DESCRIPTION

Set the file permissions for webwork

=cut

use strict;
use warnings;

BEGIN {
	use Mojo::File qw(curfile);
	use Env qw(WEBWORK_ROOT);

	$WEBWORK_ROOT = curfile->dirname->dirname;
}

use lib "$ENV{WEBWORK_ROOT}/lib";

use WeBWorK::CourseEnvironment;
my $ce = WeBWorK::CourseEnvironment->new({ webwork_dir => $ENV{WEBWORK_ROOT} });

# who is really running this script (even if sudo'ed)
# We set relevant directories so that script runner owns them
# and the web server can write to them
my $me = `logname`;
chomp($me);

my $servergroup = $ce->{server_groupID};

if (!$me) {
	die 'Aborting: No login name available.';
}

if (!$servergroup) {
	die "Aborting: server_groupID not set - so cannot do the chgrp calls. Check your conf/site.conf file.";
}

my $wwroot = $ENV{WEBWORK_ROOT};

# Course directories
system("chown -R $me " . $ce->{webwork_courses_dir});
system("chgrp -R $servergroup " . $ce->{webwork_courses_dir});
system("chmod -R g+w " . $ce->{webwork_courses_dir});
system("chmod g+s " . $ce->{webwork_courses_dir});

# Other special directories under webwork2
for my $dir ('DATA', 'htdocs_temp', 'logs', 'tmp') {
	system("chown -R $me $ce->{webworkDirs}{$dir}");
	system("chgrp -R $servergroup $ce->{webworkDirs}{$dir}");
	system("chmod -R g+w $ce->{webworkDirs}{$dir}");
	system("chmod g+s $ce->{webworkDirs}{$dir}");
}

# The server should not be able to write to the OPL (for most sites)

my $libroot = $ce->{problemLibrary}->{root};

system("chown -R $me $libroot");
system("chmod -R 755 $libroot");

# OPL-update needs to be able to write to this directories
# Let's hope the same user does it
# This will need adjusting if the admin course starts running this script
system("chown -R $me $ce->{webworkDirs}{htdocs}/DATA");
