Improve input validation in UsersPage.

CAL-190 #close
This commit is contained in:
Teo Mrnjavac 2015-02-17 20:20:20 +01:00
parent ca5132f13e
commit 8ad507e379
2 changed files with 47 additions and 26 deletions

View File

@ -1,6 +1,6 @@
/* === This file is part of Calamares - <http://github.com/calamares> === /* === This file is part of Calamares - <http://github.com/calamares> ===
* *
* Copyright 2014, Teo Mrnjavac <teo@kde.org> * Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* *
* Portions from the Manjaro Installation Framework * Portions from the Manjaro Installation Framework
* by Roland Singer <roland@manjaro.org> * by Roland Singer <roland@manjaro.org>
@ -177,7 +177,7 @@ UsersPage::fillSuggestions()
if ( !cleanParts.value( i ).isEmpty() ) if ( !cleanParts.value( i ).isEmpty() )
usernameSuggestion.append( cleanParts.value( i ).at( 0 ) ); usernameSuggestion.append( cleanParts.value( i ).at( 0 ) );
} }
if ( m_usernameRx.indexIn( usernameSuggestion ) != -1 ) if ( USERNAME_RX.indexIn( usernameSuggestion ) != -1 )
{ {
ui->textBoxUsername->setText( usernameSuggestion ); ui->textBoxUsername->setText( usernameSuggestion );
validateUsernameText( usernameSuggestion ); validateUsernameText( usernameSuggestion );
@ -191,7 +191,7 @@ UsersPage::fillSuggestions()
if ( !cleanParts.isEmpty() && !cleanParts.first().isEmpty() ) if ( !cleanParts.isEmpty() && !cleanParts.first().isEmpty() )
{ {
QString hostnameSuggestion = QString( "%1-pc" ).arg( cleanParts.first() ); QString hostnameSuggestion = QString( "%1-pc" ).arg( cleanParts.first() );
if ( m_hostnameRx.indexIn( hostnameSuggestion ) != -1 ) if ( HOSTNAME_RX.indexIn( hostnameSuggestion ) != -1 )
{ {
ui->textBoxHostname->setText( hostnameSuggestion ); ui->textBoxHostname->setText( hostnameSuggestion );
validateHostnameText( hostnameSuggestion ); validateHostnameText( hostnameSuggestion );
@ -214,7 +214,7 @@ void
UsersPage::validateUsernameText( const QString& textRef ) UsersPage::validateUsernameText( const QString& textRef )
{ {
QString text( textRef ); QString text( textRef );
QRegExp rx( m_usernameRx ); QRegExp rx( USERNAME_RX );
QRegExpValidator val( rx ); QRegExpValidator val( rx );
int pos = -1; int pos = -1;
@ -224,20 +224,23 @@ UsersPage::validateUsernameText( const QString& textRef )
ui->labelUsername->clear(); ui->labelUsername->clear();
m_readyUsername = false; m_readyUsername = false;
} }
else if ( text.length() > USERNAME_MAX_LENGTH )
{
ui->labelUsername->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No,
CalamaresUtils::Original,
ui->labelUsername->size() ) );
ui->labelUsernameError->setText(
tr( "Your username is too long." ) );
m_readyUsername = false;
}
else if ( val.validate( text, pos ) == QValidator::Invalid ) else if ( val.validate( text, pos ) == QValidator::Invalid )
{ {
ui->labelUsername->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No, ui->labelUsername->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No,
CalamaresUtils::Original, CalamaresUtils::Original,
ui->labelUsername->size() ) ); ui->labelUsername->size() ) );
--pos;
if ( pos >= 0 && pos < text.size() )
ui->labelUsernameError->setText( ui->labelUsernameError->setText(
tr( "Your username contains an invalid character '%1'" ) tr( "Your username contains invalid characters. Only lowercase letters and numbers are allowed." ) );
.arg( text.at( pos ) ) );
else
ui->labelUsernameError->setText(
tr( "Your username contains invalid characters!" ) );
m_readyUsername = false; m_readyUsername = false;
} }
@ -265,7 +268,7 @@ void
UsersPage::validateHostnameText( const QString& textRef ) UsersPage::validateHostnameText( const QString& textRef )
{ {
QString text = textRef; QString text = textRef;
QRegExp rx( m_hostnameRx ); QRegExp rx( HOSTNAME_RX );
QRegExpValidator val( rx ); QRegExpValidator val( rx );
int pos = -1; int pos = -1;
@ -275,20 +278,35 @@ UsersPage::validateHostnameText( const QString& textRef )
ui->labelHostname->clear(); ui->labelHostname->clear();
m_readyHostname= false; m_readyHostname= false;
} }
else if ( text.length() < HOSTNAME_MIN_LENGTH )
{
ui->labelHostname->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No,
CalamaresUtils::Original,
ui->labelHostname->size() ) );
ui->labelHostnameError->setText(
tr( "Your hostname is too short." ) );
m_readyHostname = false;
}
else if ( text.length() > HOSTNAME_MAX_LENGTH )
{
ui->labelHostname->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No,
CalamaresUtils::Original,
ui->labelHostname->size() ) );
ui->labelHostnameError->setText(
tr( "Your hostname is too long." ) );
m_readyHostname = false;
}
else if ( val.validate( text, pos ) == QValidator::Invalid ) else if ( val.validate( text, pos ) == QValidator::Invalid )
{ {
ui->labelHostname->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No, ui->labelHostname->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No,
CalamaresUtils::Original, CalamaresUtils::Original,
ui->labelHostname->size() ) ); ui->labelHostname->size() ) );
--pos;
if ( pos >= 0 && pos < text.size() )
ui->labelHostnameError->setText( ui->labelHostnameError->setText(
tr( "Your hostname contains an invalid character '%1'" ) tr( "Your hostname contains invalid characters. Only letters, numbers and dashes are allowed." ) );
.arg( text.at( pos ) ) );
else
ui->labelHostnameError->setText(
tr( "Your hostname contains invalid characters!" ) );
m_readyHostname = false; m_readyHostname = false;
} }

View File

@ -1,6 +1,6 @@
/* === This file is part of Calamares - <http://github.com/calamares> === /* === This file is part of Calamares - <http://github.com/calamares> ===
* *
* Copyright 2014, Teo Mrnjavac <teo@kde.org> * Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
* *
* Portions from the Manjaro Installation Framework * Portions from the Manjaro Installation Framework
* by Roland Singer <roland@manjaro.org> * by Roland Singer <roland@manjaro.org>
@ -61,8 +61,11 @@ signals:
private: private:
Ui::Page_UserSetup* ui; Ui::Page_UserSetup* ui;
const QRegExp m_usernameRx = QRegExp( "^[a-z_][a-z0-9_-]*[$]?$" ); const QRegExp USERNAME_RX = QRegExp( "^[a-z_][a-z0-9_-]*[$]?$" );
const QRegExp m_hostnameRx = QRegExp( "^[a-zA-Z][-a-zA-Z0-9_]*$" ); const QRegExp HOSTNAME_RX = QRegExp( "^[a-zA-Z][-a-zA-Z0-9_]*$" );
const int USERNAME_MAX_LENGTH = 31;
const int HOSTNAME_MIN_LENGTH = 2;
const int HOSTNAME_MAX_LENGTH = 24;
bool m_readyFullName; bool m_readyFullName;
bool m_readyUsername; bool m_readyUsername;