@ -13,7 +13,7 @@ use ConfigFile;
my ( $ pagedata , $ pagename ) ;
my ( $ LANGUAGE_DIR , $ LANGUAGE, $ HTML_TEMPLATE_DIR , $ DOC_DIR ) ;
my ( $ LANGUAGE_DIR , $ DEFAULT_ LANGUAGE, $ HTML_TEMPLATE_DIR , $ DOC_DIR ) ;
my ( $ CB_SCRIPT , $ LOG_FILE , $ IS_DEV ) ;
my $ config = ConfigFile:: read_config_file ( '/etc/cryptobox/cryptobox.conf' ) ;
@ -21,12 +21,13 @@ my $config = ConfigFile::read_config_file('/etc/cryptobox/cryptobox.conf');
$ CB_SCRIPT = $ config - > { CB_SCRIPT } ;
$ LOG_FILE = $ config - > { LOG_FILE } ;
$ LANGUAGE_DIR = $ config - > { LANGUAGE_DIR } ;
# language setting may be later overriden by "weblang"
$ LANGUAGE = $ config - > { LANGUAGE } ;
$ DEFAULT_LANGUAGE = $ config - > { LANGUAGE } ;
$ HTML_TEMPLATE_DIR = $ config - > { HTML_TEMPLATE_DIR } ;
$ DOC_DIR = $ config - > { DOC_DIR } ;
$ IS_DEV = ( - e $ config - > { DEV_FEATURES_SCRIPT } ) ;
my $ query = new CGI ;
#################### subs ######################
@ -47,24 +48,52 @@ sub load_hdf
( my $ script_url = $ ENV { 'SCRIPT_NAME' } ) =~ m/^[^&]*/ ;
$ hdf - > setValue ( "ScriptName" , ( $ ENV { 'SCRIPT_NAME' } eq '/' ) ? '/cryptobox' : $ script_url ) ;
& load_language_data ( $ hdf , $ LANGUAGE ) ;
& get_available_languages ( $ hdf ) ;
return $ hdf ;
}
sub load_language_data
# import the specified language data
# every call overrides previously loaded values
# it is sufficient to call it somewhere before "render"
sub load_selected_language
{
my $ data = shift ;
my $ lang = shift ;
my $ fname = "$LANGUAGE_DIR/$lang" . '.hdf' ;
die ( "Language file ($fname) not found!" ) unless ( - e "$fname" ) ;
$ data - > readFile ( "$fname" ) ;
my $ config_language ;
# load $DEFAULT_LANGUAGE - this is necessary, if a translation is incomplete
$ data - > readFile ( "$LANGUAGE_DIR/$DEFAULT_LANGUAGE" . ".hdf" ) ;
# load configured language, if it is valid
$ config_language = `$CB_SCRIPT get_config language` ;
$ config_language = $ DEFAULT_LANGUAGE unless ( & validate_language ( "$config_language" ) ) ;
######### temporary language setting? ############
# the default language can be overriden by the language links in the
# upper right of the page
if ( $ query - > param ( 'weblang' ) ) {
my $ weblang = $ query - > param ( 'weblang' ) ;
if ( & validate_language ( $ weblang ) ) {
# load the data
$ config_language = "$weblang" ;
# add the setting to every link
$ pagedata - > setValue ( 'Data.PostData.weblang' , "$weblang" ) ;
} else {
$ pagedata - > setValue ( 'Data.Warning' , 'InvalidLanguage' ) ;
}
}
# import the configured resp. the temporarily selected language
$ data - > readFile ( "$LANGUAGE_DIR/$config_language" . ".hdf" ) ;
########## select documentation language ##########
if ( & validate_doc_language ( $ config_language ) ) {
# selected web interface language
$ pagedata - > setValue ( 'Settings.DocLang' , "$config_language" ) ;
} elsif ( & validate_doc_language ( $ DEFAULT_LANGUAGE ) ) {
# configured CryptoBox language
$ pagedata - > setValue ( 'Settings.DocLang' , "$DEFAULT_LANGUAGE" ) ;
} else {
# default hardcoded language (english)
$ pagedata - > setValue ( 'Settings.DocLang' , "en" ) ;
}
}
@ -75,7 +104,7 @@ sub get_available_languages
my ( $ file , @ files , $ hdf , $ lang_name ) ;
opendir ( DIR , $ LANGUAGE_DIR ) or die ( "Language directory ($LANGUAGE_DIR) not accessible!" ) ;
@ files = grep { /.*\.hdf$/ } readdir ( DIR ) ;
@ files = sort grep { /.*\.hdf$/ } readdir ( DIR ) ;
close ( DIR ) ;
foreach $ file ( @ files ) {
@ -146,6 +175,8 @@ sub get_admin_pw
sub render
{
& load_selected_language ( $ pagedata ) ;
$ pagedata - > setValue ( "PageName" , "$pagename" ) ;
my $ pagefile = "$HTML_TEMPLATE_DIR/main.cs" ;
print "Content-Type: text/html\n\n" ;
@ -260,40 +291,10 @@ sub validate_doc_language
################### main #########################
my $ query = new CGI ;
$ pagedata = load_hdf ( ) ;
######### temporary language setting? ############
# the default language can be overriden by the language links in the
# upper right of the page
if ( $ query - > param ( 'weblang' ) ) {
my $ weblang = $ query - > param ( 'weblang' ) ;
if ( & validate_language ( $ weblang ) ) {
# load the data
& load_language_data ( $ pagedata , "$weblang" ) ;
# add the setting to every link
$ pagedata - > setValue ( 'Data.PostData.weblang' , "$weblang" ) ;
} else {
$ pagedata - > setValue ( 'Data.Warning' , 'InvalidLanguage' ) ;
}
}
########## select documentation language ##########
if ( $ query - > param ( 'weblang' ) && & validate_doc_language ( $ query - > param ( 'weblang' ) ) ) {
# selected web interface language
$ pagedata - > setValue ( 'Settings.DocLang' , "$query->param('weblang')" ) ;
} elsif ( & validate_doc_language ( $ LANGUAGE ) ) {
# configured CryptoBox language
$ pagedata - > setValue ( 'Settings.DocLang' , "$LANGUAGE" ) ;
} else {
# default hardcoded language (english)
$ pagedata - > setValue ( 'Settings.DocLang' , "en" ) ;
}
# first: check for ssl!
if ( ! & check_ssl ( ) ) {
$ pagedata - > setValue ( 'Data.Error' , 'NoSSL' ) ;