From 8ad507e37981e5706b48760a94543d4e27f5413f Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 17 Feb 2015 20:20:20 +0100 Subject: [PATCH] Improve input validation in UsersPage. CAL-190 #close --- src/modules/users/UsersPage.cpp | 64 +++++++++++++++++++++------------ src/modules/users/UsersPage.h | 9 +++-- 2 files changed, 47 insertions(+), 26 deletions(-) diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 062f1d28b..6df4b46de 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -1,6 +1,6 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * Copyright 2014-2015, Teo Mrnjavac * * Portions from the Manjaro Installation Framework * by Roland Singer @@ -177,7 +177,7 @@ UsersPage::fillSuggestions() if ( !cleanParts.value( i ).isEmpty() ) usernameSuggestion.append( cleanParts.value( i ).at( 0 ) ); } - if ( m_usernameRx.indexIn( usernameSuggestion ) != -1 ) + if ( USERNAME_RX.indexIn( usernameSuggestion ) != -1 ) { ui->textBoxUsername->setText( usernameSuggestion ); validateUsernameText( usernameSuggestion ); @@ -191,7 +191,7 @@ UsersPage::fillSuggestions() if ( !cleanParts.isEmpty() && !cleanParts.first().isEmpty() ) { QString hostnameSuggestion = QString( "%1-pc" ).arg( cleanParts.first() ); - if ( m_hostnameRx.indexIn( hostnameSuggestion ) != -1 ) + if ( HOSTNAME_RX.indexIn( hostnameSuggestion ) != -1 ) { ui->textBoxHostname->setText( hostnameSuggestion ); validateHostnameText( hostnameSuggestion ); @@ -214,7 +214,7 @@ void UsersPage::validateUsernameText( const QString& textRef ) { QString text( textRef ); - QRegExp rx( m_usernameRx ); + QRegExp rx( USERNAME_RX ); QRegExpValidator val( rx ); int pos = -1; @@ -224,20 +224,23 @@ UsersPage::validateUsernameText( const QString& textRef ) ui->labelUsername->clear(); m_readyUsername = false; } - else if ( val.validate( text, pos ) == QValidator::Invalid ) + else if ( text.length() > USERNAME_MAX_LENGTH ) { ui->labelUsername->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No, CalamaresUtils::Original, ui->labelUsername->size() ) ); - --pos; + ui->labelUsernameError->setText( + tr( "Your username is too long." ) ); - if ( pos >= 0 && pos < text.size() ) - ui->labelUsernameError->setText( - tr( "Your username contains an invalid character '%1'" ) - .arg( text.at( pos ) ) ); - else - ui->labelUsernameError->setText( - tr( "Your username contains invalid characters!" ) ); + m_readyUsername = false; + } + else if ( val.validate( text, pos ) == QValidator::Invalid ) + { + ui->labelUsername->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No, + CalamaresUtils::Original, + ui->labelUsername->size() ) ); + ui->labelUsernameError->setText( + tr( "Your username contains invalid characters. Only lowercase letters and numbers are allowed." ) ); m_readyUsername = false; } @@ -265,7 +268,7 @@ void UsersPage::validateHostnameText( const QString& textRef ) { QString text = textRef; - QRegExp rx( m_hostnameRx ); + QRegExp rx( HOSTNAME_RX ); QRegExpValidator val( rx ); int pos = -1; @@ -275,20 +278,35 @@ UsersPage::validateHostnameText( const QString& textRef ) ui->labelHostname->clear(); 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 ) { ui->labelHostname->setPixmap( CalamaresUtils::defaultPixmap( CalamaresUtils::No, CalamaresUtils::Original, ui->labelHostname->size() ) ); - --pos; - - if ( pos >= 0 && pos < text.size() ) - ui->labelHostnameError->setText( - tr( "Your hostname contains an invalid character '%1'" ) - .arg( text.at( pos ) ) ); - else - ui->labelHostnameError->setText( - tr( "Your hostname contains invalid characters!" ) ); + ui->labelHostnameError->setText( + tr( "Your hostname contains invalid characters. Only letters, numbers and dashes are allowed." ) ); m_readyHostname = false; } diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index 8fd893388..92781e0b8 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -1,6 +1,6 @@ /* === This file is part of Calamares - === * - * Copyright 2014, Teo Mrnjavac + * Copyright 2014-2015, Teo Mrnjavac * * Portions from the Manjaro Installation Framework * by Roland Singer @@ -61,8 +61,11 @@ signals: private: Ui::Page_UserSetup* ui; - const QRegExp m_usernameRx = QRegExp( "^[a-z_][a-z0-9_-]*[$]?$" ); - const QRegExp m_hostnameRx = QRegExp( "^[a-zA-Z][-a-zA-Z0-9_]*$" ); + const QRegExp USERNAME_RX = QRegExp( "^[a-z_][a-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_readyUsername;