source: src-qt4/pc-dmconf/mainwindow.cpp @ 7c53dd2

releng/10.0.1releng/10.0.2releng/10.0.3releng/10.1
Last change on this file since 7c53dd2 was 7c53dd2, checked in by Ken Moore <ken@…>, 9 months ago

Update the pc-dmconf to reflect the ability to add an auto-login delay timer now

  • Property mode set to 100644
File size: 9.4 KB
Line 
1/**************************************************************************
2*   Copyright (C) 2012 by Yuri Momotyuk                                   *
3*   yurkis@gmail.com                                                      *
4*   Copyright (C) 2013 by Kris Moore                                      *
5*   kris@pcbsd.org                                                        *
6*                                                                         *
7*   Permission is hereby granted, free of charge, to any person obtaining *
8*   a copy of this software and associated documentation files (the       *
9*   "Software"), to deal in the Software without restriction, including   *
10*   without limitation the rights to use, copy, modify, merge, publish,   *
11*   distribute, sublicense, and/or sell copies of the Software, and to    *
12*   permit persons to whom the Software is furnished to do so, subject to *
13*   the following conditions:                                             *
14*                                                                         *
15*   The above copyright notice and this permission notice shall be        *
16*   included in all copies or substantial portions of the Software.       *
17*                                                                         *
18*   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       *
19*   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    *
20*   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*
21*   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR     *
22*   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
23*   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
24*   OTHER DEALINGS IN THE SOFTWARE.                                       *
25***************************************************************************/
26
27#include "mainwindow.h"
28#include "ui_mainwindow.h"
29#include "pcbsd-utils.h"
30
31#include <QInputDialog>
32#include <QMessageBox>
33#include <QTextStream>
34
35#define DM_CONFIG_FILE QString("/usr/local/etc/pcdm.conf")
36
37///////////////////////////////////////////////////////////////////////////////
38inline bool toBoolean(QString Str, bool Default=false)
39{
40    if (Str.trimmed().toLower() == "true")
41        return true;
42    if (Str.trimmed().toLower() == "false")
43        return false;
44    return Default;
45}
46
47///////////////////////////////////////////////////////////////////////////////
48inline QString fromBoolean(bool flag)
49{
50    return (flag)?QString("true"):QString("false");
51}
52
53///////////////////////////////////////////////////////////////////////////////
54MainWindow::MainWindow(QWidget *parent) :
55    QMainWindow(parent),
56    ui(new Ui::MainWindow)
57{
58    ui->setupUi(this);
59    initUI();
60}
61
62///////////////////////////////////////////////////////////////////////////////
63MainWindow::~MainWindow()
64{
65    delete ui;
66}
67
68///////////////////////////////////////////////////////////////////////////////
69void MainWindow::initUI()
70{
71    //Make sure the conf file exists
72    if(!QFile::exists(DM_CONFIG_FILE)){
73      qDebug() << "Copying over the default configuration file:" << DM_CONFIG_FILE;
74      if( !QFile::copy(DM_CONFIG_FILE+".dist", DM_CONFIG_FILE) ){
75        QMessageBox::warning(this,tr("Missing Config File"), QString(tr("The PCDM configuration file could not be found: %1")).arg(DM_CONFIG_FILE)+"\n\n"+tr("This application will now close"));
76        exit(1);
77      }
78    }
79    getUsers();
80    ui->UsersList->clear();
81    QString autoLogDelay = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "AUTO_LOGIN_DELAY");
82    if(!autoLogDelay.isEmpty()){
83      ui->spin_autoLogDelay->setValue(autoLogDelay.toInt());
84    }
85   
86    QString autoLogUser = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "AUTO_LOGIN_USER");
87    for (int  i=0; i<mvUsers.size(); i++)
88    {
89        ui->UsersList->addItem(mvUsers[i]);
90        if ( autoLogUser == mvUsers[i] )
91          ui->UsersList->setCurrentIndex(i);
92    }
93
94    QString autoLog = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "ENABLE_AUTO_LOGIN");
95    if ( autoLog == "TRUE" ) {
96      ui->AutoLoginEnabledCB->setChecked(true);
97      ui->UsersList->setEnabled(true);
98    } else {
99      ui->AutoLoginEnabledCB->setChecked(false);
100      ui->UsersList->setEnabled(false);
101    }
102
103    ui->EnableVNC->setChecked(false);
104    QString vnc = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "ALLOW_REMOTE_LOGIN");
105    if ( vnc == "TRUE" )
106      ui->EnableVNC->setChecked(true);
107
108    ui->checkShowPW->setChecked(false);
109    QString showpw = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "ENABLE_VIEW_PASSWORD_BUTTON");
110    if ( showpw == "TRUE" )
111      ui->checkShowPW->setChecked(true);
112
113    ui->SaveButton->setEnabled(false);
114}
115
116///////////////////////////////////////////////////////////////////////////////
117void MainWindow::on_UsersList_currentIndexChanged(int item) {
118    Q_UNUSED(item);
119    ui->SaveButton->setEnabled(true);
120}
121
122///////////////////////////////////////////////////////////////////////////////
123void MainWindow::getUsers()
124{
125    /*
126        here is modifyed code from pc-usermanager
127    */
128    mvUsers.clear();
129    QFile userFile("/etc/passwd");
130    if ( userFile.open(QIODevice::ReadOnly) ) {
131        QTextStream stream(&userFile);
132        stream.setCodec("UTF-8");
133        QString line;
134
135        while ( !stream.atEnd() ) {
136            line = stream.readLine();
137
138            if ((line.trimmed().indexOf("#") != 0) && (! line.isEmpty())) { //Make sure it isn't a comment or blank
139                QString username = line.section(":",0,0);
140                QString homedir = line.section(":",5,5);
141
142                // Ignore PEFS encrypted users
143                if ( QFile::exists(homedir + "/.pefs.db") )
144                  continue;
145
146                int uid = line.section(":",2,2).toInt();
147                if ((uid>1000)&&(uid<65534))
148                    mvUsers.push_back(username);
149            }//if gout user
150        }//for all lines
151    }//if can open file
152}
153
154///////////////////////////////////////////////////////////////////////////////
155void MainWindow::on_SaveButton_clicked()
156{
157    bool ok;
158    system("touch " + DM_CONFIG_FILE.toLatin1());
159    if ( ui->AutoLoginEnabledCB->isChecked() && !ui->UsersList->currentText().isEmpty() ) {
160       // First ask for password
161       QString pw = QInputDialog::getText(this, tr("Password Request"),
162                        tr("Please enter the login password for this user"), 
163                        QLineEdit::Password, "", &ok);
164       if ( ! ok )
165          return;
166     
167       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_AUTO_LOGIN", "ENABLE_AUTO_LOGIN=TRUE", -1);
168       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_USER", "AUTO_LOGIN_USER=" + ui->UsersList->currentText(), -1);
169       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_PASSWORD", "AUTO_LOGIN_PASSWORD=" + pw, -1);
170       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_DELAY","AUTO_LOGIN_DELAY="+QString::number(ui->spin_autoLogDelay->value()), -1);
171    } else {
172       ui->AutoLoginEnabledCB->setChecked(false); //make sure this is not checked to reflect file contents
173       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_AUTO_LOGIN", "ENABLE_AUTO_LOGIN=FALSE", -1);
174       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_USER", "", -1);
175       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_PASSWORD", "", -1);
176       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_DELAY","", -1);
177    }
178
179    if ( ui->EnableVNC->isChecked() ) {
180       // First ask for password
181       QString pw = QInputDialog::getText(this, tr("Password Request"),
182                        tr("Please enter the remote login password"), 
183                        QLineEdit::Password, "", &ok);
184       if ( ! ok )
185          return;
186
187       QFile file("/usr/local/etc/vncpass");
188       if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
189          return;
190
191       QTextStream out(&file);
192       out << pw;
193       file.close();
194       system("chmod 600 /usr/local/etc/vncpass");
195
196       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ALLOW_REMOTE_LOGIN", "ALLOW_REMOTE_LOGIN=TRUE", -1);
197    } else {
198       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ALLOW_REMOTE_LOGIN", "ALLOW_REMOTE_LOGIN=FALSE", -1);
199       system("rm /usr/local/etc/vncpass 2>/dev/null");
200    }
201
202    if ( ui->checkShowPW->isChecked() )
203       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_VIEW_PASSWORD_BUTTON", "ENABLE_VIEW_PASSWORD_BUTTON=TRUE", -1);
204    else
205       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_VIEW_PASSWORD_BUTTON", "ENABLE_VIEW_PASSWORD_BUTTON=FALSE", -1);
206
207    // Lastly make sure we set perms
208    system("chmod 600 " + DM_CONFIG_FILE.toLatin1());
209    ui->SaveButton->setEnabled(false);
210}
211
212///////////////////////////////////////////////////////////////////////////////
213void MainWindow::on_AutoLoginEnabledCB_clicked(bool checked)
214{
215    ui->UsersList->setEnabled(checked);
216    ui->SaveButton->setEnabled(true);
217}
218
219///////////////////////////////////////////////////////////////////////////////
220void MainWindow::on_EnableVNC_clicked(bool checked)
221{
222  Q_UNUSED(checked);
223  ui->SaveButton->setEnabled(true);
224}
225
226///////////////////////////////////////////////////////////////////////////////
227void MainWindow::on_checkShowPW_clicked(bool checked)
228{
229  Q_UNUSED(checked);
230  ui->SaveButton->setEnabled(true);
231}
232
233///////////////////////////////////////////////////////////////////////////////
234void MainWindow::slotSingleInstance()
235{
236   this->hide();
237   this->showNormal();
238   this->activateWindow();
239   this->raise();
240}
Note: See TracBrowser for help on using the repository browser.