aboutsummaryrefslogtreecommitdiff
path: root/sb_config.pm
blob: ee816b009e6e4de474d2799d726baa06fdb9080c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env perl

package sb_config;

use strict;
use warnings;
use Config::Tiny;

sub parse_config
{
	my @scalar_configs = ('nick', 'username', 'ircname', 'server', 'port', 'usessl', 'password', 'must_id', 'quit_msg', 'user', 'group');
	my @list_configs = ('channels', 'ignore', 'admins');
	my $file = $_[0];
	my %built_config;
	my $config = Config::Tiny->read($file);

	# FIXME catch undefined/missing config options
	foreach my $option (@scalar_configs) {
		$built_config{$option} = $config->{_}->{$option};
	}

	foreach my $option (@list_configs) {
		my $vals = $config->{_}->{$option};
		$vals =~ s/^\s+|\s+$//g;
		@built_config{$option} = [split /\s*,\s*/, $vals];
	}

	# special case: triggers hash
	my %triggers;
	foreach (split ',', $config->{_}->{triggers}) {
		my ($match, $response) = split /=>/;
		# strip outer quotes
		$match =~ s/^[^']*'|'[^']*$//g;
		$response =~ s/^[^']*'|'[^']*$//g;
		$triggers{$match} = $response;
	}

	$built_config{uid} = getpwnam($built_config{user})
		or die "Cannot get uid of $built_config{user}: $!\n";
	$built_config{gid} = getgrnam($built_config{group})
		or die "Cannot get gid of $built_config{group}: $!\n";


	$built_config{triggers} = \%triggers;

	return %built_config;
}
1;