aboutsummaryrefslogtreecommitdiffstats
path: root/lib/AdminPanel/Shared/TimeZone.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/AdminPanel/Shared/TimeZone.pm')
-rw-r--r--lib/AdminPanel/Shared/TimeZone.pm799
1 files changed, 0 insertions, 799 deletions
diff --git a/lib/AdminPanel/Shared/TimeZone.pm b/lib/AdminPanel/Shared/TimeZone.pm
deleted file mode 100644
index efb49a2..0000000
--- a/lib/AdminPanel/Shared/TimeZone.pm
+++ /dev/null
@@ -1,799 +0,0 @@
-# vim: set et ts=4 sw=4:
-package ManaTools::Shared::TimeZone;
-
-#============================================================= -*-perl-*-
-
-=head1 NAME
-
-ManaTools::Shared::TimeZone - module to manage TimeZone settings
-
-=head1 SYNOPSIS
-
- my $tz = ManaTools::Shared::TimeZone->new();
-
-
-=head1 DESCRIPTION
-
-This module allows to manage time zone settings.
-
-=head1 SUPPORT
-
-You can find documentation for this module with the perldoc command:
-
-perldoc ManaTools::Shared::TimeZone
-
-
-=head1 AUTHOR
-
-Angelo Naselli <anaselli@linux.it>
-
-=head1 COPYRIGHT and LICENSE
-
-Copyright (C) 2014-2015, Angelo Naselli.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License version 2, as
-published by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-=head1 METHODS
-
-=cut
-
-
-use diagnostics;
-use strict;
-
-use Moose;
-
-use DateTime::TimeZone;
-use Net::DBus;
-
-use ManaTools::Shared::Locales;
-use ManaTools::Shared::Services;
-
-use MDK::Common::File qw(cat_ output_p substInFile);
-use MDK::Common::Func qw(find if_);
-
-
-#=============================================================
-
-=head2 new - optional parameters
-
-=head3 timezone_prefix
-
- optional parameter to set the system timezone directory,
- default value is /usr/share/zoneinfo
-
-=cut
-
-#=============================================================
-
-has 'timezone_prefix' => (
- is => 'rw',
- isa => 'Str',
- default => "/usr/share/zoneinfo",
-);
-
-
-#=============================================================
-
-=head2 new - optional parameters
-
-=head3 ntp_configuration_file
-
- optional parameter to set the ntp server configuration file,
- default value is /etc/[chrony|ntp].conf
-
-=cut
-
-#=============================================================
-
-has 'ntp_configuration_file' => (
- is => 'rw',
- isa => 'Str',
- builder => '_ntp_configuration_file_init',
-);
-
-sub _ntp_configuration_file_init {
- my $self = shift;
-
- if (-f "/etc/chrony.conf") {
- return "/etc/chrony.conf";
- }
- return "/etc/ntp.conf";
-}
-
-#=============================================================
-
-=head2 new - optional parameters
-
-=head3 ntp_conf_dir
-
- optional parameter to set ntp configuration directory,
- default value is /etc/ntp
-
-=cut
-
-#=============================================================
-
-has 'ntp_conf_dir' => (
- is => 'rw',
- isa => 'Str',
- lazy => 1,
- default => "/etc/ntp",
-);
-
-#=============================================================
-
-=head2 new - optional parameters
-
-=head3 ntp_program
-
- optional parameter to set the ntp program that runs into the
- system, default value is [chrony|ntp]
-
-=cut
-
-#=============================================================
-has 'ntp_program' => (
- is => 'rw',
- isa => 'Str',
- builder => '_ntp_program_init',
-);
-
-sub _ntp_program_init {
- my $self = shift;
-
- if (-f "/etc/chrony.conf") {
- return "chrony";
- }
- return "ntp";
-}
-
-#=============================================================
-
-=head2 new - optional parameters
-
-=head3 installer_or_livecd
-
- To inform the back-end that is working during installer or
- livecd. Useful if Time zone setting and using fix_system
- to use the real time clock (see setLocalRTC and
- writeConfiguration).
-
-=cut
-
-#=============================================================
-has 'installer_or_livecd' => (
- is => 'rw',
- isa => 'Bool',
- default => 0,
-);
-
-#=== globals ===
-
-has 'sh_services' => (
- is => 'rw',
- init_arg => undef,
- lazy => 1,
- builder => '_SharedServicesInitialize'
-);
-
-sub _SharedServicesInitialize {
- my $self = shift();
-
- $self->sh_services(ManaTools::Shared::Services->new() );
-}
-
-
-has 'dbus_timedate1_service' => (
- is => 'rw',
- init_arg => undef,
- lazy => 1,
- builder => '_dbusTimeDateInitialize'
-);
-
-sub _dbusTimeDateInitialize {
- my $self = shift();
-
- my $bus = Net::DBus->system;
- $self->dbus_timedate1_service($bus->get_service("org.freedesktop.timedate1"));
-}
-
-
-has 'dbus_timedate1_object' => (
- is => 'rw',
- init_arg => undef,
- lazy => 1,
- builder => '_dbusObjectInitialize'
-);
-
-sub _dbusObjectInitialize {
- my $self = shift();
-
- $self->dbus_timedate1_object($self->dbus_timedate1_service->get_object("/org/freedesktop/timedate1"));
-}
-
-
-has 'servername_config_suffix' => (
- is => 'ro',
- isa => 'Str',
- lazy => 1,
- builder => '_servername_config_suffix_init',
-);
-
-sub _servername_config_suffix_init {
- my $self = shift;
-
- return " iburst" if ($self->ntp_program eq "chrony");
-
- return "";
-}
-
-has 'loc' => (
- is => 'rw',
- lazy => 1,
- init_arg => undef,
- builder => '_localeInitialize'
-);
-
-sub _localeInitialize {
- my $self = shift;
-
- # TODO fix domain binding for translation
- $self->loc(ManaTools::Shared::Locales->new(domain_name => 'libDrakX') );
- # TODO if we want to give the opportunity to test locally add dir_name => 'path'
-}
-
-
-has 'ntp_servers' => (
- traits => ['Hash'],
- is => 'rw',
- isa => 'HashRef',
- lazy => 1,
- handles => {
- get_ntp_server => 'get',
- ntp_server_pairs => 'kv',
- },
- init_arg => undef,
- builder => '_buildNTPServers'
-);
-
-sub _buildNTPServers {
- my $self = shift;
-
- my %ntpServersHash;
- $ntpServersHash{"-"} = {
- $self->loc->N_("Global") => "pool.ntp.org",
- };
- $ntpServersHash{Global} = {
- $self->loc->N_("Africa") => "africa.pool.ntp.org",
- $self->loc->N_("Asia") => "asia.pool.ntp.org",
- $self->loc->N_("Europe") => "europe.pool.ntp.org",
- $self->loc->N_("North America") => "north-america.pool.ntp.org",
- $self->loc->N_("Oceania") => "oceania.pool.ntp.org",
- $self->loc->N_("South America") => "south-america.pool.ntp.org",
- };
- $ntpServersHash{Africa} = {
- $self->loc->N_("South Africa") => "za.pool.ntp.org",
- $self->loc->N_("Tanzania") => "tz.pool.ntp.org",
- };
- $ntpServersHash{Asia} = {
- $self->loc->N_("Bangladesh") => "bd.pool.ntp.org",
- $self->loc->N_("China") => "cn.pool.ntp.org",
- $self->loc->N_("Hong Kong") => "hk.pool.ntp.org",
- $self->loc->N_("India") => "in.pool.ntp.org",
- $self->loc->N_("Indonesia") => "id.pool.ntp.org",
- $self->loc->N_("Iran") => "ir.pool.ntp.org",
- $self->loc->N_("Israel") => "il.pool.ntp.org",
- $self->loc->N_("Japan") => "jp.pool.ntp.org",
- $self->loc->N_("Korea") => "kr.pool.ntp.org",
- $self->loc->N_("Malaysia") => "my.pool.ntp.org",
- $self->loc->N_("Philippines") => "ph.pool.ntp.org",
- $self->loc->N_("Singapore") => "sg.pool.ntp.org",
- $self->loc->N_("Taiwan") => "tw.pool.ntp.org",
- $self->loc->N_("Thailand") => "th.pool.ntp.org",
- $self->loc->N_("Turkey") => "tr.pool.ntp.org",
- $self->loc->N_("United Arab Emirates") => "ae.pool.ntp.org",
- };
- $ntpServersHash{Europe} = {
- $self->loc->N_("Austria") => "at.pool.ntp.org",
- $self->loc->N_("Belarus") => "by.pool.ntp.org",
- $self->loc->N_("Belgium") => "be.pool.ntp.org",
- $self->loc->N_("Bulgaria") => "bg.pool.ntp.org",
- $self->loc->N_("Czech Republic") => "cz.pool.ntp.org",
- $self->loc->N_("Denmark") => "dk.pool.ntp.org",
- $self->loc->N_("Estonia") => "ee.pool.ntp.org",
- $self->loc->N_("Finland") => "fi.pool.ntp.org",
- $self->loc->N_("France") => "fr.pool.ntp.org",
- $self->loc->N_("Germany") => "de.pool.ntp.org",
- $self->loc->N_("Greece") => "gr.pool.ntp.org",
- $self->loc->N_("Hungary") => "hu.pool.ntp.org",
- $self->loc->N_("Ireland") => "ie.pool.ntp.org",
- $self->loc->N_("Italy") => "it.pool.ntp.org",
- $self->loc->N_("Lithuania") => "lt.pool.ntp.org",
- $self->loc->N_("Luxembourg") => "lu.pool.ntp.org",
- $self->loc->N_("Netherlands") => "nl.pool.ntp.org",
- $self->loc->N_("Norway") => "no.pool.ntp.org",
- $self->loc->N_("Poland") => "pl.pool.ntp.org",
- $self->loc->N_("Portugal") => "pt.pool.ntp.org",
- $self->loc->N_("Romania") => "ro.pool.ntp.org",
- $self->loc->N_("Russian Federation") => "ru.pool.ntp.org",
- $self->loc->N_("Slovakia") => "sk.pool.ntp.org",
- $self->loc->N_("Slovenia") => "si.pool.ntp.org",
- $self->loc->N_("Spain") => "es.pool.ntp.org",
- $self->loc->N_("Sweden") => "se.pool.ntp.org",
- $self->loc->N_("Switzerland") => "ch.pool.ntp.org",
- $self->loc->N_("Ukraine") => "ua.pool.ntp.org",
- $self->loc->N_("United Kingdom") => "uk.pool.ntp.org",
- $self->loc->N_("Yugoslavia") => "yu.pool.ntp.org",
- };
- $ntpServersHash{"North America"} = {
- $self->loc->N_("Canada") => "ca.pool.ntp.org",
- $self->loc->N_("Guatemala") => "gt.pool.ntp.org",
- $self->loc->N_("Mexico") => "mx.pool.ntp.org",
- $self->loc->N_("United States") => "us.pool.ntp.org",
- };
- $ntpServersHash{Oceania} = {
- $self->loc->N_("Australia") => "au.pool.ntp.org",
- $self->loc->N_("New Zealand") => "nz.pool.ntp.org",
- };
- $ntpServersHash{"South America"} = {
- $self->loc->N_("Argentina") => "ar.pool.ntp.org",
- $self->loc->N_("Brazil") => "br.pool.ntp.org",
- $self->loc->N_("Chile") => "cl.pool.ntp.org",
- };
-
- return \%ntpServersHash;
-}
-
-
-#=============================================================
-
-=head2 get_timezone_prefix
-
-=head3 OUTPUT
-
-timezone_prefix: directory in which time zone files are
-
-=head3 DESCRIPTION
-
-Return the timezone directory (defualt: /usr/share/zoneinfo)
-
-=cut
-
-#=============================================================
-sub get_timezone_prefix {
- my $self = shift;
-
- return $self->timezone_prefix;
-}
-
-#=============================================================
-
-=head2 getTimeZones
-
-=head3 INPUT
-
- $from_system: if present and its value is not 0 checks into timezone_prefix
- directory and gets the list from there
-
-=head3 OUTPUT
-
- @l: ARRAY containing sorted time zones
-
-=head3 DESCRIPTION
-
- This method returns the available timezones
-
-=cut
-
-#=============================================================
-sub getTimeZones {
- my ($self, $from_system) = @_;
-
- if ($from_system and $from_system != 0) {
- require MDK::Common::DataStructure;
- require MDK::Common::Various;
- my $tz_prefix = $self->get_timezone_prefix();
- open(my $F, "cd $tz_prefix && find [A-Z]* -noleaf -type f |");
- my @l = MDK::Common::DataStructure::difference2([ MDK::Common::Various::chomp_(<$F>) ], [ 'ROC', 'PRC' ]);
- close $F or die "cannot list the available zoneinfos";
- return sort @l;
- }
-
- return DateTime::TimeZone->all_names;
-}
-
-#=============================================================
-
-=head2 setTimeZone
-
-=head3 INPUT
-
- $new_time_zone: New time zone to be set
-
-=head3 DESCRIPTION
-
- This method get the new time zone to set and performs
- the setting
-
-=cut
-
-#=============================================================
-sub setTimeZone {
- my ($self, $new_time_zone) = @_;
-
- die "Time zone value required" if !defined($new_time_zone);
-
- my $object = $self->dbus_timedate1_object;
- $object->SetTimezone($new_time_zone, 1);
-}
-
-#=============================================================
-
-=head2 getTimeZone
-
-=head3 OUTPUT
-
- $timezone: current time zone
-
-=head3 DESCRIPTION
-
- This method returns the current timezone setting
-
-=cut
-
-#=============================================================
-sub getTimeZone {
- my ($self) = @_;
-
- my $object = $self->dbus_timedate1_object;
-
- return $object->Get("org.freedesktop.timedate1", 'Timezone') || "";
-}
-
-
-#=============================================================
-
-=head2 setLocalRTC
-
-=head3 INPUT
-
- $enable: bool value enable/disable real time clock as
- localtime
- $fix_system: bool read or not the real time clock
-
-=head3 DESCRIPTION
-
- This method enables/disables the real time clock as
- localtime (e.g. disable means set the rtc to UTC).
- NOTE from dbus:
- Use SetLocalRTC() to control whether the RTC is in
- local time or UTC. It is strongly recommended to maintain
- the RTC in UTC. Some OSes (Windows) however maintain the
- RTC in local time which might make it necessary to enable
- this feature. However, this creates various problems as
- daylight changes might be missed. If fix_system is passed
- "true" the time from the RTC is read again and the system
- clock adjusted according to the new setting.
- If fix_system is passed "false" the system time is written
- to the RTC taking the new setting into account.
- Use fix_system=true in installers and livecds where the
- RTC is probably more reliable than the system time.
- Use fix_system=false in configuration UIs that are run during
- normal operation and where the system clock is probably more
- reliable than the RTC.
-
-=cut
-
-#=============================================================
-sub setLocalRTC {
- my ($self, $enable, $fix_system) = @_;
-
- die "Localtime enable/disable value required" if !defined($enable);
-
- $fix_system = 0 if !defined($fix_system);
- my $object = $self->dbus_timedate1_object;
- $object->SetLocalRTC($enable, $fix_system, 1) ;
-}
-
-#=============================================================
-
-=head2 getLocalRTC
-
-=head3 OUTPUT
-
- $localRTC: 1 if RTC is localtime 0 for UTC
-
-=head3 DESCRIPTION
-
- This method returns the RTC localtime setting
-
-=cut
-
-#=============================================================
-sub getLocalRTC {
- my $self = shift;
-
- my $object = $self->dbus_timedate1_object;
-
- return $object->Get("org.freedesktop.timedate1", 'LocalRTC') ? 1 : 0;
-}
-
-
-#=============================================================
-
-=head2 setTime
-
-=head3 INPUT
-
- $sec_since_epoch: Time in seconds since 1/1/1970
-
-=head3 DESCRIPTION
-
- This method set the system time and sets the RTC also
-
-=cut
-
-#=============================================================
-sub setTime {
- my ($self, $sec_since_epoch) = @_;
-
- die "second since epoch required" if !defined($sec_since_epoch);
-
- my $object = $self->dbus_timedate1_object;
- my $usec = $sec_since_epoch* 1000000;
-
- $object->SetTime($usec, 0, 1);
-}
-
-#=============================================================
-
-=head2 readConfiguration
-
-=head3 OUTPUT
-
- hash reference containing:
- UTC => HW clock is set as UTC
- ZONE => Time Zone set
-
-=head3 DESCRIPTION
-
- This method returns the time zone system settings as hash
- reference
-
-=cut
-
-#=============================================================
-sub readConfiguration {
- my $self = shift;
-
- my $prefs = {};
- $prefs->{'ZONE'} = $self->getTimeZone();
- $prefs->{'UTC'} = $self->getLocalRTC() ? 0 : 1;
-
- return $prefs;
-}
-
-
-#=============================================================
-
-=head2 writeConfiguration
-
-=head3 INPUT
-
- $info: hash containing:
- UTC => HW clock is set as UTC
- ZONE => Time Zone
-
-=head3 DESCRIPTION
-
- This method sets the passed Time Zone configuration.
- If installer_or_livecd attribute is set fix_system is
- passed to setLocalRTC
-
-=cut
-
-#=============================================================
-sub writeConfiguration {
- my ($self, $info) = @_;
-
- die "UTC field required" if !defined($info->{UTC});
- die "ZONE field required" if !defined($info->{ZONE});
-
- my $localRTC = $info->{UTC} ? 0 : 1;
- $self->setLocalRTC(
- $localRTC,
- $self->installer_or_livecd
- );
-
- $self->setTimeZone(
- $info->{ZONE}
- );
-}
-
-
-#left for back compatibility
-sub _get_ntp_server_tree {
- my ($self, $zone) = @_;
- $zone = "-" if ! $zone;
- my $ns = $self->get_ntp_server($zone);
- return if !$ns;
-
- map {
- $ns->{$_} => (
- $self->get_ntp_server($_) ?
- $zone ?
- $self->loc->N($_) . "|" . $self->loc->N("All servers") :
- $self->loc->N("All servers") :
- $self->loc->N($zone) . "|" . $self->loc->N($_)
- ),
- $self->_get_ntp_server_tree($_)
- } keys %{$ns};
-}
-
-#=============================================================
-
-=head2 ntpServers
-
-=head3 OUTPUT
-
- HASHREF containing ntp_server => zone info
-
-=head3 DESCRIPTION
-
- This method returns an hash ref containing pairs ntp-server, zone
-
-=cut
-
-#=============================================================
-sub ntpServers {
- my ($self) = @_;
- # FIXME: missing parameter:
- +{$self->_get_ntp_server_tree()};
-}
-
-
-#=============================================================
-
-=head2 ntpCurrentServer
-
-=head3 INPUT
-
-Input_Parameter: in_par_description
-
-=head3 DESCRIPTION
-
-Returns the current ntp server address read from configuration file
-
-=cut
-
-#=============================================================
-
-sub ntpCurrentServer {
- my $self = shift;
-
- MDK::Common::Func::find { $_ ne '127.127.1.0' } map { MDK::Common::Func::if_(/^\s*server\s+(\S*)/, $1) } MDK::Common::File::cat_($self->ntp_configuration_file);
-}
-
-#=============================================================
-
-=head2 isNTPRunning
-
-=head3 DESCRIPTION
-
- This method just returns if the given ntp server is running
-
-=cut
-
-#=============================================================
-sub isNTPRunning {
- my $self = shift;
-
- # TODO is that valid for any ntp program? adding ntp_service_name parameter
- my $ntpd = $self->ntp_program . 'd';
-
- return $self->sh_services->is_service_running($ntpd);
-}
-
-#=============================================================
-
-=head2 setNTPServer
-
-=head3 INPUT
-
-$server: server address to be configured
-
-=head3 DESCRIPTION
-
-This method writes into NTP configuration file new server address
-settings
-
-=cut
-
-#=============================================================
-sub setNTPServer {
- my ($self, $server) = @_;
-
- my $f = $self->ntp_configuration_file;
- -f $f or return;
- return if (!$server);
-
- # TODO is that valid for any ntp program? adding ntp_service_name parameter
- my $ntpd = $self->ntp_program . 'd';
-
- ManaTools::Shared::disable_x_screensaver();
- if ($self->isNTPRunning()) {
- $self->sh_services->stopService($ntpd);
- }
-
- my $pool_match = qr/\.pool\.ntp\.org$/;
- my @servers = $server =~ $pool_match ? (map { "$_.$server" } 0 .. 2) : $server;
-
- my $added = 0;
- my $servername_config_suffix = $self->servername_config_suffix ? $self->servername_config_suffix : " ";
- MDK::Common::File::substInFile {
- if (/^#?\s*server\s+(\S*)/ && $1 ne '127.127.1.0') {
- $_ = $added ? $_ =~ $pool_match ? undef : "#server $1\n" : join('', map { "server $_$servername_config_suffix\n" } @servers);
- $added = 1;
- }
- } $f;
- if ($self->ntp_program eq "ntp") {
- my $ntp_prefix = $self->ntp_conf_dir;
- MDK::Common::File::output_p("$ntp_prefix/step-tickers", join('', map { "$_\n" } @servers));
- }
-
- # enable but do not start the service
- $self->sh_services->set_status($ntpd, 1, 1);
- if ($ntpd eq "chronyd") {
- $self->sh_services->startService($ntpd);
- $ENV{PATH} = "/usr/bin:/usr/sbin";
- # Wait up to 30s for sync
- system('/usr/bin/chronyc', 'waitsync', '30', '0.1');
- } else {
- $ENV{PATH} = "/usr/bin:/usr/sbin";
- system('/usr/sbin/ntpdate', $server);
- $self->sh_services->startService($ntpd);
- }
-
- ManaTools::Shared::enable_x_screensaver();
-}
-
-#=============================================================
-
-=head2 disableAndStopNTP
-
-=head3 DESCRIPTION
-
- Disable and stop the ntp server
-
-=cut
-
-#=============================================================
-sub disableAndStopNTP {
- my $self = shift;
-
- # TODO is that valid for any ntp program? adding ntp_service_name parameter
- my $ntpd = $self->ntp_program . 'd';
-
- # also stop the service without dont_apply parameter
- $self->sh_services->set_status($ntpd, 0);
-}
-
-no Moose;
-__PACKAGE__->meta->make_immutable;
-
-
-1;
-
-