/lib/AwesomeGrid/User.pm
package AwesomeGrid::User;
use strict;

use AwesomeGrid;
use AwesomeGrid::Config;

# Class methods

sub exists {
	my $user = shift;
	return -f "$AwesomeGrid::confdir/users/$user";
}

sub delete {
	my $user = shift;
	unlink "$AwesomeGrid::confdir/users/$user";
}

# Constructors

sub new {
	my $class = shift;
	my $user = shift;
	my $obj = {};
	$obj->{username} = $user;
	# Pick a random UID >= 10000 and < 65535
	$obj->{uid} = int(rand(55534)) + 10000;
	$obj->{home} = AwesomeGrid::Config::hostname();
	warn "invalid hostname" unless $obj->{home};
	chomp $obj->{home};
	return bless($obj, $class);
}

sub load {
	my $class = shift;
	my $user = shift;

	return $class->loadfrom("$AwesomeGrid::confdir/users/$user");
}

sub loadfrom {
	my $class = shift;
	my $file = shift;
	local $_;

	open USER, $file || return undef;
	$_ = <USER>;
	unless (/^AWESOMEGRID USER (\d+\.\d+)$/) {
		print STDERR "Invalid AwesomeGrid User format\n";
		return undef;
	}
	if ($1 > $AwesomeGrid::version) {
		print STDERR "Cowardly refusing to parse future AwesomeGrid format.\n";
		return undef;
	}

	my $obj = {};
	while (<USER>) {
		if (/([A-Za-z0-9_-]+):\s+(.*)$/) {
			$obj->{$1} = $2;
		}
	}
	close USER;

	return bless($obj, $class);
}

# Object methods (isn't all this confusion WONDERFUL?)

sub save {
	my $class = shift;
	open USER, ">$AwesomeGrid::confdir/users/$class->{username}";
	print USER "AWESOMEGRID USER $AwesomeGrid::version\n";
	for (keys %$class) {
		print USER "$_: $class->{$_}\n";
	}
	close USER;
}

1;