mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-17 06:23:00 +02:00
ddns.cgi: Make dealing with auth tokens more user-friendly.
If a provider supports authentication with a token, now the username and password fileds will be swapped by some Java Script code in favour of an input field for the token. Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
committed by
Michael Tremer
parent
f6557ced12
commit
0562cdb360
@@ -59,14 +59,18 @@ $settings{'HOSTNAME'} = '';
|
||||
$settings{'DOMAIN'} = '';
|
||||
$settings{'LOGIN'} = '';
|
||||
$settings{'PASSWORD'} = '';
|
||||
$settings{'TOKEN'} = '';
|
||||
$settings{'ENABLED'} = '';
|
||||
$settings{'PROXY'} = '';
|
||||
$settings{'SERVICE'} = '';
|
||||
|
||||
$settings{'ACTION'} = '';
|
||||
|
||||
# Get supported ddns providers.
|
||||
my @providers = &GetProviders();
|
||||
# Get all supported ddns providers.
|
||||
my @providers = &GetProviders("all");
|
||||
|
||||
# Get provider which support a token based authentication mechanism.
|
||||
my @token_provider = &GetProviders("token-providers");
|
||||
|
||||
# Hook to regenerate the configuration files, if cgi got called from command line.
|
||||
if ($ENV{"REMOTE_ADDR"} eq "") {
|
||||
@@ -178,6 +182,11 @@ if (($settings{'ACTION'} eq $Lang::tr{'add'}) || ($settings{'ACTION'} eq $Lang::
|
||||
$errormessage = $Lang::tr{'password not set'};
|
||||
}
|
||||
|
||||
# Check if a token has been given for provider which support tokens.
|
||||
if (($settings{'SERVICE'} ~~ @token_provider) && ($settings{'TOKEN'} eq '')) {
|
||||
$errormessage = $Lang::tr{'token not set'};
|
||||
}
|
||||
|
||||
# Go furter if there was no error.
|
||||
if (!$errormessage) {
|
||||
# Splitt hostname field into 2 parts for storrage.
|
||||
@@ -189,6 +198,16 @@ if (($settings{'ACTION'} eq $Lang::tr{'add'}) || ($settings{'ACTION'} eq $Lang::
|
||||
$settings{'ENABLED'} = 'off';
|
||||
}
|
||||
|
||||
# Handle token provider.
|
||||
if($settings{'SERVICE'} ~~ @token_provider) {
|
||||
# Clear username and password if they contain values.
|
||||
undef($settings{'LOGIN'});
|
||||
undef($settings{'PASSWORD'});
|
||||
|
||||
# Assign the token as a password for saving.
|
||||
$settings{'PASSWORD'} = $settings{'TOKEN'};
|
||||
}
|
||||
|
||||
# Handle adding new accounts.
|
||||
if ($settings{'ACTION'} eq $Lang::tr{'add'}) {
|
||||
# Open /var/ipfire/ddns/config for writing.
|
||||
@@ -234,7 +253,8 @@ if (($settings{'ACTION'} eq $Lang::tr{'add'}) || ($settings{'ACTION'} eq $Lang::
|
||||
# Write out notice to logfile.
|
||||
&General::log($Lang::tr{'ddns hostname modified'});
|
||||
}
|
||||
undef $settings{'ID'};
|
||||
# Clear settings hash.
|
||||
%settings = '';
|
||||
|
||||
# Update ddns config file.
|
||||
&GenerateDDNSConfigFile();
|
||||
@@ -307,6 +327,7 @@ if ($settings{'ACTION'} eq $Lang::tr{'edit'}) {
|
||||
$settings{'WILDCARDS'} = $temp[4];
|
||||
$settings{'LOGIN'} = $temp[5];
|
||||
$settings{'PASSWORD'} = $temp[6];
|
||||
$settings{'TOKEN'} = $temp[6];
|
||||
$settings{'ENABLED'} = $temp[7];
|
||||
}
|
||||
|
||||
@@ -334,6 +355,58 @@ if (!$settings{'ACTION'}) {
|
||||
}
|
||||
|
||||
&Header::openpage($Lang::tr{'dynamic dns'}, 1, '');
|
||||
|
||||
### Java Script ###
|
||||
print"<script>\n";
|
||||
|
||||
# Generate Java Script Array which contains the provider that support token.
|
||||
my $line = "";
|
||||
$line = join("', '", @token_provider);
|
||||
|
||||
print "\t// Array which contains the providers that support token.\n";
|
||||
print "\ttoken_provider = ['$line']\;\n\n";
|
||||
|
||||
print <<END
|
||||
// Java Script function to swap the text input fields for
|
||||
// username and password or token.
|
||||
var update_auth = function() {
|
||||
if(inArray(\$('#SERVICE').val(), token_provider)) {
|
||||
\$('.username').hide();
|
||||
\$('.password').hide();
|
||||
\$('.token').show();
|
||||
} else {
|
||||
\$('.username').show();
|
||||
\$('.password').show();
|
||||
\$('.token').hide();
|
||||
}
|
||||
};
|
||||
|
||||
// Java Script function to check if a given value is part of
|
||||
// an array.
|
||||
function inArray(value,array) {
|
||||
var count=array.length;
|
||||
|
||||
for(var i=0;i<count;i++) {
|
||||
if(array[i]===value){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// JQuery function to call corresponding function when
|
||||
// the service provider is changed or the page is loaded for showing/hiding
|
||||
// the username/password or token area.
|
||||
\$(document).ready(function() {
|
||||
\$('#SERVICE').change(update_auth);
|
||||
update_auth();
|
||||
});
|
||||
|
||||
</script>
|
||||
END
|
||||
;
|
||||
|
||||
&Header::openbigbox('100%', 'left', '', $errormessage);
|
||||
|
||||
# Read file for general ddns settings.
|
||||
@@ -414,7 +487,7 @@ print <<END
|
||||
END
|
||||
;
|
||||
# Generate dropdown menu for service selection.
|
||||
print"<select size='1' name='SERVICE'>\n";
|
||||
print"<select size='1' name='SERVICE' id='SERVICE'>\n";
|
||||
|
||||
my $selected;
|
||||
|
||||
@@ -440,11 +513,15 @@ print <<END
|
||||
<tr>
|
||||
<td class='base'>$Lang::tr{'enabled'}</td>
|
||||
<td><input type='checkbox' name='ENABLED' $checked{'ENABLED'}{'on'} /></td>
|
||||
<td class='base'>$Lang::tr{'username'}</td>
|
||||
<td><input type='text' name='LOGIN' value='$settings{'LOGIN'}' /></td>
|
||||
|
||||
<td class='username'>$Lang::tr{'username'}</td>
|
||||
<td class='username'><input type='text' name='LOGIN' value='$settings{'LOGIN'}' /></td>
|
||||
|
||||
<td class='token' style='display:none'>$Lang::tr{'token'}</td>
|
||||
<td class='token' style='display:none'><input type='text' name='TOKEN' value='$settings{'TOKEN'}' /></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<tr class='password'>
|
||||
<td class='base'></td>
|
||||
<td></td>
|
||||
<td class='base'>$Lang::tr{'password'}</td>
|
||||
@@ -665,8 +742,8 @@ sub GenerateDDNSConfigFile {
|
||||
|
||||
my $use_token = 0;
|
||||
|
||||
# Check if token based auth is configured.
|
||||
if ($username eq "token") {
|
||||
# Handle token based auth for various providers.
|
||||
if ($provider ~~ @token_provider) {
|
||||
$use_token = 1;
|
||||
}
|
||||
|
||||
@@ -707,9 +784,20 @@ sub GenerateDDNSConfigFile {
|
||||
}
|
||||
|
||||
# Function which generates an array (@providers) which contains the supported providers.
|
||||
sub GetProviders {
|
||||
# Get supported providers.
|
||||
open(PROVIDERS, "/usr/bin/ddns list-providers |");
|
||||
sub GetProviders ($) {
|
||||
my ($type) = @_;
|
||||
|
||||
# Set default type to get all providers
|
||||
$type = $type ? $type : "all";
|
||||
|
||||
# Check if the requested type is "token-providers".
|
||||
if ($type eq "token-providers") {
|
||||
# Call ddns util to only get providers which supports token based auth.
|
||||
open(PROVIDERS, "/usr/bin/ddns list-token-providers |");
|
||||
} else {
|
||||
# Get all supported providers.
|
||||
open(PROVIDERS, "/usr/bin/ddns list-providers |");
|
||||
}
|
||||
|
||||
# Create new array to store the providers.
|
||||
my @providers = ();
|
||||
|
||||
@@ -2374,6 +2374,8 @@
|
||||
'to warn email bad' => 'An E-Mail-Adresse ist nicht gültig',
|
||||
'toggle' => 'Pause/Resume',
|
||||
'toggle enable disable' => 'Aktivieren oder Deaktivieren',
|
||||
'token' => 'Token:',
|
||||
'token not set' => 'Kein Token angegeben.',
|
||||
'tone' => 'Ton',
|
||||
'tone dial' => 'Tonwahl:',
|
||||
'too long 80 char max' => ' ist zu lang, es sind maximal 80 Zeichen erlaubt',
|
||||
|
||||
@@ -2412,6 +2412,8 @@
|
||||
'to warn email bad' => 'To e-mail address is not valid',
|
||||
'toggle' => 'pause/resume',
|
||||
'toggle enable disable' => 'Enable or disable',
|
||||
'token' => 'Token:',
|
||||
'token not set' => 'No Token has been given.',
|
||||
'tone' => 'Tone',
|
||||
'tone dial' => 'Tone dial:',
|
||||
'too long 80 char max' => ' is too long, maximum allowed is 80 characters',
|
||||
|
||||
Reference in New Issue
Block a user