mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2025-01-24 23:09:17 +01:00
95 lines
1.9 KiB
Perl
95 lines
1.9 KiB
Perl
package KasmVNC::Config;
|
|
|
|
use strict;
|
|
use warnings;
|
|
use v5.10;
|
|
use YAML::Tiny;
|
|
use Data::Dumper;
|
|
use Hash::Merge::Simple;
|
|
use KasmVNC::Utils;
|
|
|
|
our $logger;
|
|
|
|
sub merge {
|
|
my @configsToMerge = map { $_->{data} } @_;
|
|
my $mergedConfig = Hash::Merge::Simple::merge(@configsToMerge) // {};
|
|
|
|
KasmVNC::Config->new({ data => $mergedConfig });
|
|
}
|
|
|
|
sub new {
|
|
my ($class, $args) = @_;
|
|
my $self = bless {
|
|
filename => $args->{filename},
|
|
data => $args->{data}
|
|
}, $class;
|
|
|
|
$self->load() if $self->{filename};
|
|
$self;
|
|
}
|
|
|
|
sub load {
|
|
my $self = shift;
|
|
|
|
failIfConfigNotReadable($self->{filename});
|
|
|
|
$logger->debug("Loading config " . $self->{filename});
|
|
my $yamlDocuments = YAML::Tiny->read($self->{filename});
|
|
unless (defined $yamlDocuments) {
|
|
die "Couldn't load config: $self->{filename}. Probable reason: No newline at end of file\n";
|
|
}
|
|
|
|
$self->{data} = $yamlDocuments->[0];
|
|
}
|
|
|
|
sub get {
|
|
my ($self, $absoluteKey) = @_;
|
|
my $path = absoluteKeyToHashPath($absoluteKey);
|
|
my $config = $self->{data};
|
|
|
|
my $value = eval "\$config$path";
|
|
return unless defined($value);
|
|
|
|
$value;
|
|
}
|
|
|
|
sub exists {
|
|
my ($self, $absoluteKey) = @_;
|
|
my $path = absoluteKeyToHashPath($absoluteKey);
|
|
my $config = $self->{data};
|
|
|
|
eval "exists \$config$path";
|
|
}
|
|
|
|
sub delete {
|
|
my ($self, $absoluteKey) = @_;
|
|
my $path = absoluteKeyToHashPath($absoluteKey);
|
|
my $config = $self->{data};
|
|
|
|
eval "delete \$config$path";
|
|
}
|
|
|
|
sub isEmpty {
|
|
my ($self, $absoluteKey) = @_;
|
|
my $path = absoluteKeyToHashPath($absoluteKey);
|
|
my $config = $self->{data};
|
|
|
|
$self->exists($absoluteKey) && isBlank($self->get($absoluteKey));
|
|
}
|
|
|
|
sub absoluteKeyToHashPath {
|
|
my $absoluteKey = shift;
|
|
|
|
my @keyParts = split(/\./, $absoluteKey);
|
|
@keyParts = map { "->{\"$_\"}" } @keyParts;
|
|
join "", @keyParts;
|
|
}
|
|
|
|
sub failIfConfigNotReadable {
|
|
my $config = shift;
|
|
|
|
-r $config || die "Couldn't load config: $config";
|
|
}
|
|
|
|
1;
|