mirror of https://github.com/cutefishos/calamares
[usersq] adding QML module usersq
module builds, installs and runs, connections are not working yet. UserQmlViewstep.cpp/h are from PR https://github.com/calamares/calamares/pull/1356 sections are commented out to make the module build, but help is needed to get those 2 files corrected. config names used in usersq.qml are guessed from users/Config.cpp debug window shows correct entries in GS, and under the module tab, usersq.conf is read as should too. Running shows most config used in users.qml are not registered/wrong, many entries like: qrc:/usersq.qml:228:13: Unable to assign [undefined] to bool It is understood not all needed from the users module has moved to Config.cpp yet, but doing the PR now, since it runs, doesn't crash cala and help is needed to further implement.main
parent
8518a5037d
commit
355a4f9b8d
@ -0,0 +1,45 @@
|
||||
if( NOT WITH_QML )
|
||||
calamares_skip_module( "usersq (QML is not supported in this build)" )
|
||||
return()
|
||||
endif()
|
||||
|
||||
find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core DBus Network )
|
||||
find_package( Crypt REQUIRED )
|
||||
|
||||
# Add optional libraries here
|
||||
set( USER_EXTRA_LIB )
|
||||
set( _users ${CMAKE_CURRENT_SOURCE_DIR}/../users )
|
||||
|
||||
include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ${CMAKE_CURRENT_SOURCE_DIR}/../../libcalamares ${_users} )
|
||||
|
||||
find_package( LibPWQuality )
|
||||
set_package_properties(
|
||||
LibPWQuality PROPERTIES
|
||||
PURPOSE "Extra checks of password quality"
|
||||
)
|
||||
|
||||
if( LibPWQuality_FOUND )
|
||||
list( APPEND USER_EXTRA_LIB ${LibPWQuality_LIBRARIES} )
|
||||
include_directories( ${LibPWQuality_INCLUDE_DIRS} )
|
||||
add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY )
|
||||
endif()
|
||||
|
||||
calamares_add_plugin( usersq
|
||||
TYPE viewmodule
|
||||
EXPORT_MACRO PLUGINDLLEXPORT_PRO
|
||||
SOURCES
|
||||
${_users}/Config.cpp
|
||||
${_users}/CreateUserJob.cpp
|
||||
${_users}/SetPasswordJob.cpp
|
||||
UsersQmlViewStep.cpp
|
||||
${_users}/SetHostNameJob.cpp
|
||||
${_users}/CheckPWQuality.cpp
|
||||
RESOURCES
|
||||
usersq.qrc
|
||||
LINK_PRIVATE_LIBRARIES
|
||||
calamaresui
|
||||
${CRYPT_LIBRARIES}
|
||||
${USER_EXTRA_LIB}
|
||||
Qt5::DBus
|
||||
SHARED_LIB
|
||||
)
|
@ -0,0 +1,199 @@
|
||||
/* === This file is part of Calamares - <https://github.com/calamares> ===
|
||||
*
|
||||
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
|
||||
* Copyright 2017-2018, Adriaan de Groot <groot@kde.org>
|
||||
* Copyright 2017, Gabriel Craciunescu <crazy@frugalware.org>
|
||||
* Copyright 2020, Camilo Higuita <milo.h@aol.com>
|
||||
*
|
||||
* Calamares is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Calamares 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 Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "UsersQmlViewStep.h"
|
||||
|
||||
#include "SetHostNameJob.h"
|
||||
#include "SetPasswordJob.h"
|
||||
|
||||
#include "utils/Logger.h"
|
||||
#include "utils/NamedEnum.h"
|
||||
#include "utils/Variant.h"
|
||||
|
||||
#include "GlobalStorage.h"
|
||||
#include "JobQueue.h"
|
||||
|
||||
CALAMARES_PLUGIN_FACTORY_DEFINITION( UsersQmlViewStepFactory, registerPlugin< UsersQmlViewStep >(); )
|
||||
|
||||
/*static const NamedEnumTable< SetHostNameJob::Action >&
|
||||
hostnameActions()
|
||||
{
|
||||
using Action = SetHostNameJob::Action;
|
||||
|
||||
// *INDENT-OFF*
|
||||
// clang-format off
|
||||
static const NamedEnumTable< Action > names {
|
||||
{ QStringLiteral( "none" ), Action::None },
|
||||
{ QStringLiteral( "etcfile" ), Action::EtcHostname },
|
||||
{ QStringLiteral( "hostnamed" ), Action::SystemdHostname }
|
||||
};
|
||||
// clang-format on
|
||||
// *INDENT-ON*
|
||||
|
||||
return names;
|
||||
}*/
|
||||
|
||||
UsersQmlViewStep::UsersQmlViewStep( QObject* parent )
|
||||
: Calamares::QmlViewStep( parent )
|
||||
, m_config( new Config(this) )
|
||||
{
|
||||
emit nextStatusChanged( true );
|
||||
//connect( m_config, &Config::checkReady, this, &UsersQmlViewStep::nextStatusChanged );
|
||||
}
|
||||
|
||||
QString
|
||||
UsersQmlViewStep::prettyName() const
|
||||
{
|
||||
return tr( "Users" );
|
||||
}
|
||||
|
||||
bool
|
||||
UsersQmlViewStep::isNextEnabled() const
|
||||
{
|
||||
//return m_config->isReady();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
UsersQmlViewStep::isBackEnabled() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
UsersQmlViewStep::isAtBeginning() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
UsersQmlViewStep::isAtEnd() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
QList< Calamares::job_ptr >
|
||||
UsersQmlViewStep::jobs() const
|
||||
{
|
||||
return m_jobs;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UsersQmlViewStep::onActivate()
|
||||
{
|
||||
//m_config->onActivate();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UsersQmlViewStep::onLeave()
|
||||
{
|
||||
m_jobs.clear();
|
||||
|
||||
//m_jobs.append( m_config->createJobs( m_defaultGroups ) );
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UsersQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
||||
{
|
||||
using CalamaresUtils::getBool;
|
||||
|
||||
if ( configurationMap.contains( "defaultGroups" )
|
||||
&& configurationMap.value( "defaultGroups" ).type() == QVariant::List )
|
||||
{
|
||||
m_defaultGroups = configurationMap.value( "defaultGroups" ).toStringList();
|
||||
}
|
||||
else
|
||||
{
|
||||
cWarning() << "Using fallback groups. Please check defaultGroups in users.conf";
|
||||
m_defaultGroups = QStringList { "lp", "video", "network", "storage", "wheel", "audio" };
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "autologinGroup" )
|
||||
&& configurationMap.value( "autologinGroup" ).type() == QVariant::String )
|
||||
{
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert(
|
||||
"autologinGroup", configurationMap.value( "autologinGroup" ).toString() );
|
||||
}
|
||||
|
||||
if ( configurationMap.contains( "sudoersGroup" )
|
||||
&& configurationMap.value( "sudoersGroup" ).type() == QVariant::String )
|
||||
{
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert( "sudoersGroup",
|
||||
configurationMap.value( "sudoersGroup" ).toString() );
|
||||
}
|
||||
|
||||
bool setRootPassword = getBool( configurationMap, "setRootPassword", true );
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert( "setRootPassword", setRootPassword );
|
||||
|
||||
//m_config->writeRootPassword( setRootPassword );
|
||||
//m_config->setAutologinGroup( getBool( configurationMap, "doAutologin", false ) );
|
||||
//m_config->setReusePasswordDefault( getBool( configurationMap, "doReusePassword", false ) );
|
||||
|
||||
if ( configurationMap.contains( "passwordRequirements" )
|
||||
&& configurationMap.value( "passwordRequirements" ).type() == QVariant::Map )
|
||||
{
|
||||
auto pr_checks( configurationMap.value( "passwordRequirements" ).toMap() );
|
||||
|
||||
for ( decltype( pr_checks )::const_iterator i = pr_checks.constBegin(); i != pr_checks.constEnd(); ++i )
|
||||
{
|
||||
//m_config->passwordChecks( i.key(), i.value() );
|
||||
}
|
||||
}
|
||||
|
||||
//m_config->setPasswordCheckboxVisible( getBool( configurationMap, "allowWeakPasswords", false ) );
|
||||
//m_config->setValidatePasswordDefault( !getBool( configurationMap, "allowWeakPasswordsDefault", false ) );
|
||||
|
||||
QString shell( QLatin1String( "/bin/bash" ) ); // as if it's not set at all
|
||||
if ( configurationMap.contains( "userShell" ) )
|
||||
{
|
||||
shell = CalamaresUtils::getString( configurationMap, "userShell" );
|
||||
}
|
||||
// Now it might be explicitly set to empty, which is ok
|
||||
|
||||
Calamares::JobQueue::instance()->globalStorage()->insert( "userShell", shell );
|
||||
|
||||
/*using Action = SetHostNameJob::Action;
|
||||
|
||||
QString hostnameActionString = CalamaresUtils::getString( configurationMap, "setHostname" );
|
||||
if ( hostnameActionString.isEmpty() )
|
||||
{
|
||||
hostnameActionString = QStringLiteral( "EtcFile" );
|
||||
}
|
||||
bool ok = false;
|
||||
auto hostnameAction = hostnameActions().find( hostnameActionString, ok );
|
||||
if ( !ok )
|
||||
{
|
||||
hostnameAction = Action::EtcHostname;
|
||||
}
|
||||
|
||||
Action hostsfileAction = getBool( configurationMap, "writeHostsFile", true ) ? Action::WriteEtcHosts : Action::None;
|
||||
m_actions = hostsfileAction | hostnameAction;*/
|
||||
|
||||
Calamares::QmlViewStep::setConfigurationMap( configurationMap ); // call parent implementation last
|
||||
setContextProperty( "Users", m_config );
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
/* === This file is part of Calamares - <https://github.com/calamares> ===
|
||||
*
|
||||
* Copyright 2014-2015, Teo Mrnjavac <teo@kde.org>
|
||||
* Copyright 2017, Adriaan de Groot <groot@kde.org>
|
||||
* Copyright 2020, Camilo Higuita <milo.h@aol.com>
|
||||
*
|
||||
* Calamares is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Calamares 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 Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef USERSQMLVIEWSTEP_H
|
||||
#define USERSQMLVIEWSTEP_H
|
||||
|
||||
#include <QObject>
|
||||
//#include "SetHostNameJob.h"
|
||||
|
||||
#include <utils/PluginFactory.h>
|
||||
#include <viewpages/QmlViewStep.h>
|
||||
|
||||
#include <DllMacro.h>
|
||||
|
||||
#include <QVariant>
|
||||
#include "Config.h"
|
||||
|
||||
class PLUGINDLLEXPORT UsersQmlViewStep : public Calamares::QmlViewStep
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit UsersQmlViewStep( QObject* parent = nullptr );
|
||||
|
||||
QString prettyName() const override;
|
||||
|
||||
bool isNextEnabled() const override;
|
||||
bool isBackEnabled() const override;
|
||||
|
||||
bool isAtBeginning() const override;
|
||||
bool isAtEnd() const override;
|
||||
|
||||
QList< Calamares::job_ptr > jobs() const override;
|
||||
|
||||
void onActivate() override;
|
||||
void onLeave() override;
|
||||
|
||||
void setConfigurationMap( const QVariantMap& configurationMap ) override;
|
||||
|
||||
QObject * getConfig() override
|
||||
{
|
||||
return m_config;
|
||||
}
|
||||
|
||||
private:
|
||||
Config *m_config;
|
||||
QList< Calamares::job_ptr > m_jobs;
|
||||
|
||||
QStringList m_defaultGroups;
|
||||
//SetHostNameJob::Actions m_actions;
|
||||
};
|
||||
|
||||
CALAMARES_PLUGIN_FACTORY_DECLARATION( UsersQmlViewStepFactory )
|
||||
|
||||
#endif // USERSQMLVIEWSTEP_H
|
@ -0,0 +1,42 @@
|
||||
# For documentation see Users Module users.conf
|
||||
#
|
||||
---
|
||||
# Used as default groups for the created user.
|
||||
# Adjust to your Distribution defaults.
|
||||
defaultGroups:
|
||||
- users
|
||||
- lp
|
||||
- video
|
||||
- network
|
||||
- storage
|
||||
- wheel
|
||||
- audio
|
||||
- lpadmin
|
||||
|
||||
autologinGroup: autologin
|
||||
|
||||
doAutologin: true
|
||||
|
||||
sudoersGroup: wheel
|
||||
|
||||
setRootPassword: true
|
||||
|
||||
doReusePassword: true
|
||||
|
||||
passwordRequirements:
|
||||
nonempty: true
|
||||
minLength: -1 # Password at least this many characters
|
||||
maxLength: -1 # Password at most this many characters
|
||||
libpwquality:
|
||||
- minlen=0
|
||||
- minclass=0
|
||||
|
||||
allowWeakPasswords: false
|
||||
|
||||
allowWeakPasswordsDefault: false
|
||||
|
||||
userShell: /bin/bash
|
||||
|
||||
setHostname: EtcFile
|
||||
|
||||
writeHostsFile: true
|
@ -0,0 +1,336 @@
|
||||
/* === This file is part of Calamares - <https://github.com/calamares> ===
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2020 Anke Boersma <demm@kaosx.us>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
* License-Filename: LICENSE
|
||||
*
|
||||
* Calamares is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Calamares 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 Calamares. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import io.calamares.core 1.0
|
||||
import io.calamares.ui 1.0
|
||||
|
||||
import QtQuick 2.10
|
||||
import QtQuick.Controls 2.10
|
||||
import QtQuick.Layouts 1.3
|
||||
import org.kde.kirigami 2.7 as Kirigami
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtQuick.Window 2.3
|
||||
|
||||
Kirigami.ScrollablePage {
|
||||
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
|
||||
Kirigami.Theme.backgroundColor: "#EFF0F1"
|
||||
Kirigami.Theme.textColor: "#1F1F1F"
|
||||
|
||||
header: Kirigami.Heading {
|
||||
|
||||
Layout.fillWidth: true
|
||||
height: 50
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
color: Kirigami.Theme.textColor
|
||||
font.weight: Font.Medium
|
||||
font.pointSize: 12
|
||||
text: qsTr("Pick your user name and credentials to login and perform admin tasks")
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
|
||||
id: _formLayout
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Column {
|
||||
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Label {
|
||||
|
||||
width: parent.width
|
||||
text: qsTr("What is your name?")
|
||||
}
|
||||
|
||||
TextField {
|
||||
|
||||
id: _userNameField
|
||||
width: parent.width
|
||||
placeholderText: qsTr("Your Full Name")
|
||||
onTextChanged: config.fullNameChanged(text)
|
||||
background: Rectangle {
|
||||
|
||||
color: "#FBFBFB" // Kirigami.Theme.backgroundColor
|
||||
radius: 2
|
||||
opacity: 0.9
|
||||
//border.color: _userNameField.text === "" ? Kirigami.Theme.backgroundColor : ( config.fullNameReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor)
|
||||
border.color: _userNameField.text === "" ? "#FBFBFB" : ( config.fullNameReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Label {
|
||||
|
||||
width: parent.width
|
||||
text: qsTr("What name do you want to use to log in?")
|
||||
}
|
||||
|
||||
TextField {
|
||||
|
||||
id: _userLoginField
|
||||
width: parent.width
|
||||
placeholderText: qsTr("Login Name")
|
||||
//text: config.userName
|
||||
onTextEdited: config.loginNameChanged(text)
|
||||
|
||||
background: Rectangle {
|
||||
|
||||
color: "#FBFBFB" // Kirigami.Theme.backgroundColor
|
||||
opacity: 0.9
|
||||
//border.color: _userLoginField.text === "" ? Kirigami.Theme.backgroundColor : ( config.userNameReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor)
|
||||
border.color: _userLoginField.text === "" ? "#FBFBFB" : ( config.userNameReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor)
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
|
||||
width: parent.width
|
||||
text: qsTr("If more than one person will use this computer, you can create multiple accounts after installation.")
|
||||
font.weight: Font.Thin
|
||||
font.pointSize: 8
|
||||
color: "#6D6D6D"
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Label {
|
||||
|
||||
width: parent.width
|
||||
text: qsTr("What is the name of this computer?")
|
||||
}
|
||||
|
||||
TextField {
|
||||
|
||||
id: _hostName
|
||||
width: parent.width
|
||||
placeholderText: qsTr("Computer Name")
|
||||
text: config.hostName
|
||||
onTextEdited: config.hostNameChanged(text)
|
||||
background: Rectangle {
|
||||
|
||||
color: "#FBFBFB" // Kirigami.Theme.backgroundColor
|
||||
opacity: 0.9
|
||||
//border.color: _hostName.text === "" ? Kirigami.Theme.backgroundColor : ( config.hostNameReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor)
|
||||
border.color: _hostName.text === "" ? "#FBFBFB" : ( config.hostNameReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor)
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
|
||||
width: parent.width
|
||||
text: qsTr("This name will be used if you make the computer visible to others on a network.")
|
||||
font.weight: Font.Thin
|
||||
font.pointSize: 8
|
||||
color: "#6D6D6D"
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Label {
|
||||
|
||||
width: parent.width
|
||||
text: qsTr("Choose a password to keep your account safe.")
|
||||
}
|
||||
|
||||
Row {
|
||||
width: parent.width
|
||||
spacing: 20
|
||||
|
||||
TextField {
|
||||
|
||||
id: _passwordField
|
||||
width: parent.width / 2 - 10
|
||||
placeholderText: qsTr("Password")
|
||||
echoMode: TextInput.Password
|
||||
passwordMaskDelay: 300
|
||||
inputMethodHints: Qt.ImhNoAutoUppercase
|
||||
onTextChanged: config.userPasswordChanged(text, _verificationPasswordField.text)
|
||||
|
||||
background: Rectangle {
|
||||
|
||||
color: "#FBFBFB" // Kirigami.Theme.backgroundColor
|
||||
opacity: 0.9
|
||||
//border.color: _passwordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.passwordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor)
|
||||
border.color: _passwordField.text === "" ? "#FBFBFB" : ( config.passwordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor)
|
||||
}
|
||||
}
|
||||
|
||||
TextField {
|
||||
|
||||
id: _verificationPasswordField
|
||||
width: parent.width / 2 - 10
|
||||
placeholderText: qsTr("Repeat Password")
|
||||
echoMode: TextInput.Password
|
||||
passwordMaskDelay: 300
|
||||
inputMethodHints: Qt.ImhNoAutoUppercase
|
||||
onTextChanged: config.userPasswordSecondaryChanged(_passwordField.text, text)
|
||||
|
||||
background: Rectangle {
|
||||
|
||||
color: "#FBFBFB" //Kirigami.Theme.backgroundColor
|
||||
opacity: 0.9
|
||||
//border.color: _verificationpasswordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.passwordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor)
|
||||
border.color: _verificationpasswordField.text === "" ? "#FBFBFB" : ( config.passwordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
|
||||
width: parent.width
|
||||
text: qsTr("Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals.")
|
||||
font.weight: Font.Thin
|
||||
font.pointSize: 8
|
||||
wrapMode: Text.WordWrap
|
||||
color: "#6D6D6D"
|
||||
}
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
|
||||
visible: config.allowWeakPasswords
|
||||
//visible: false
|
||||
text: qsTr("Validate passwords quality")
|
||||
checked: config.allowWeakPasswordsDefault
|
||||
onToggled: config.allowWeakPasswordsDefault = !config.allowWeakPasswordsDefault
|
||||
}
|
||||
|
||||
Label {
|
||||
|
||||
visible: config.allowWeakPasswords
|
||||
//visible: false
|
||||
width: parent.width
|
||||
text: qsTr("When this box is checked, password-strength checking is done and you will not be able to use a weak password..")
|
||||
font.weight: Font.Thin
|
||||
font.pointSize: 8
|
||||
color: "#6D6D6D"
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
|
||||
text: qsTr("Log in automatically without asking for the password")
|
||||
checked: config.doAutologin
|
||||
onToggled: config.doAutologin = !config.doAutologin
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
|
||||
id: root
|
||||
visible: config.doReusePassword
|
||||
text: qsTr("Reuse user password as root password")
|
||||
checked: config.reuseUserPasswordForRoot
|
||||
//checked: false
|
||||
onToggled: config.reuseUserPasswordForRoot = !config.reuseUserPasswordForRoot
|
||||
}
|
||||
|
||||
Label {
|
||||
|
||||
visible: root.checked
|
||||
width: parent.width
|
||||
text: qsTr("Use the same password for the administrator account.")
|
||||
font.weight: Font.Thin
|
||||
font.pointSize: 8
|
||||
color: "#6D6D6D"
|
||||
}
|
||||
|
||||
Column {
|
||||
|
||||
visible: ! root.checked
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Label {
|
||||
|
||||
width: parent.width
|
||||
text: qsTr("Choose a root password to keep your account safe.")
|
||||
}
|
||||
|
||||
Row {
|
||||
width: parent.width
|
||||
spacing: 20
|
||||
|
||||
TextField {
|
||||
|
||||
id: _rootPasswordField
|
||||
width: parent.width / 2 -10
|
||||
placeholderText: qsTr("Root Password")
|
||||
echoMode: TextInput.Password
|
||||
passwordMaskDelay: 300
|
||||
inputMethodHints: Qt.ImhNoAutoUppercase
|
||||
onTextChanged: config.rootPasswordChanged(text, _verificationRootPasswordField.text)
|
||||
|
||||
background: Rectangle {
|
||||
|
||||
color: "#FBFBFB" // Kirigami.Theme.backgroundColor
|
||||
opacity: 0.9
|
||||
//border.color: _rootPasswordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.rootPasswordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor)
|
||||
border.color: _rootPasswordField.text === "" ? "#FBFBFB" : ( config.rootPasswordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor)
|
||||
}
|
||||
}
|
||||
|
||||
TextField {
|
||||
|
||||
id: _verificationRootPasswordField
|
||||
width: parent.width / 2 -10
|
||||
placeholderText: qsTr("Repeat Root Password")
|
||||
echoMode: TextInput.Password
|
||||
passwordMaskDelay: 300
|
||||
inputMethodHints: Qt.ImhNoAutoUppercase
|
||||
onTextChanged: config.rootPasswordSecondaryChanged(_rootPasswordField.text, text)
|
||||
|
||||
background: Rectangle {
|
||||
|
||||
color: "#FBFBFB" // Kirigami.Theme.backgroundColor
|
||||
opacity: 0.9
|
||||
//border.color: _verificationRootPasswordField.text === "" ? Kirigami.Theme.backgroundColor : ( config.rootPasswordReady ? Kirigami.Theme.backgroundColor : Kirigami.Theme.negativeTextColor)
|
||||
border.color: _verificationRootPasswordField.text === "" ? "#FBFBFB" : ( config.rootPasswordReady ? "#FBFBFB" : Kirigami.Theme.negativeTextColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
|
||||
visible: ! root.checked
|
||||
width: parent.width
|
||||
text: qsTr("Enter the same password twice, so that it can be checked for typing errors.")
|
||||
font.weight: Font.Thin
|
||||
font.pointSize: 8
|
||||
color: "#6D6D6D"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<RCC>
|
||||
<qresource>
|
||||
<file>usersq.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
Loading…
Reference in New Issue