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

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

Make sure that pc-dmconf can actually find the configuration file before starting up, and copy it from the default conf file if it does not exist.

  • Property mode set to 100644
File size: 8.8 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 autoLogUser = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "AUTO_LOGIN_USER");
82    for (int  i=0; i<mvUsers.size(); i++)
83    {
84        ui->UsersList->addItem(mvUsers[i]);
85        if ( autoLogUser == mvUsers[i] )
86          ui->UsersList->setCurrentIndex(i);
87    }
88
89    QString autoLog = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "ENABLE_AUTO_LOGIN");
90    if ( autoLog == "TRUE" ) {
91      ui->AutoLoginEnabledCB->setChecked(true);
92      ui->UsersList->setEnabled(true);
93    } else {
94      ui->AutoLoginEnabledCB->setChecked(false);
95      ui->UsersList->setEnabled(false);
96    }
97
98    ui->EnableVNC->setChecked(false);
99    QString vnc = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "ALLOW_REMOTE_LOGIN");
100    if ( vnc == "TRUE" )
101      ui->EnableVNC->setChecked(true);
102
103    ui->checkShowPW->setChecked(false);
104    QString showpw = pcbsd::Utils::getValFromSHFile(DM_CONFIG_FILE, "ENABLE_VIEW_PASSWORD_BUTTON");
105    if ( showpw == "TRUE" )
106      ui->checkShowPW->setChecked(true);
107
108    ui->SaveButton->setEnabled(false);
109}
110
111///////////////////////////////////////////////////////////////////////////////
112void MainWindow::on_UsersList_currentIndexChanged(int item) {
113    Q_UNUSED(item);
114    ui->SaveButton->setEnabled(true);
115}
116
117///////////////////////////////////////////////////////////////////////////////
118void MainWindow::getUsers()
119{
120    /*
121        here is modifyed code from pc-usermanager
122    */
123    mvUsers.clear();
124    QFile userFile("/etc/passwd");
125    if ( userFile.open(QIODevice::ReadOnly) ) {
126        QTextStream stream(&userFile);
127        stream.setCodec("UTF-8");
128        QString line;
129
130        while ( !stream.atEnd() ) {
131            line = stream.readLine();
132
133            if ((line.trimmed().indexOf("#") != 0) && (! line.isEmpty())) { //Make sure it isn't a comment or blank
134                QString username = line.section(":",0,0);
135                QString homedir = line.section(":",5,5);
136
137                // Ignore PEFS encrypted users
138                if ( QFile::exists(homedir + "/.pefs.db") )
139                  continue;
140
141                int uid = line.section(":",2,2).toInt();
142                if ((uid>1000)&&(uid<65534))
143                    mvUsers.push_back(username);
144            }//if gout user
145        }//for all lines
146    }//if can open file
147}
148
149///////////////////////////////////////////////////////////////////////////////
150void MainWindow::on_SaveButton_clicked()
151{
152    bool ok;
153    system("touch " + DM_CONFIG_FILE.toLatin1());
154    if ( ui->AutoLoginEnabledCB->isChecked() ) {
155       // First ask for password
156       QString pw = QInputDialog::getText(this, tr("Password Request"),
157                        tr("Please enter the login password for this user"), 
158                        QLineEdit::Password, "", &ok);
159       if ( ! ok )
160          return;
161     
162       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_AUTO_LOGIN", "ENABLE_AUTO_LOGIN=TRUE", -1);
163       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_USER", "AUTO_LOGIN_USER=" + ui->UsersList->currentText(), -1);
164       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_PASSWORD", "AUTO_LOGIN_PASSWORD=" + pw, -1);
165    } else {
166       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_AUTO_LOGIN", "ENABLE_AUTO_LOGIN=FALSE", -1);
167       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_USER", "", -1);
168       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "AUTO_LOGIN_PASSWORD", "", -1);
169    }
170
171    if ( ui->EnableVNC->isChecked() ) {
172       // First ask for password
173       QString pw = QInputDialog::getText(this, tr("Password Request"),
174                        tr("Please enter the remote login password"), 
175                        QLineEdit::Password, "", &ok);
176       if ( ! ok )
177          return;
178
179       QFile file("/usr/local/etc/vncpass");
180       if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
181          return;
182
183       QTextStream out(&file);
184       out << pw;
185       file.close();
186       system("chmod 600 /usr/local/etc/vncpass");
187
188       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ALLOW_REMOTE_LOGIN", "ALLOW_REMOTE_LOGIN=TRUE", -1);
189    } else {
190       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ALLOW_REMOTE_LOGIN", "ALLOW_REMOTE_LOGIN=FALSE", -1);
191       system("rm /usr/local/etc/vncpass 2>/dev/null");
192    }
193
194    if ( ui->checkShowPW->isChecked() )
195       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_VIEW_PASSWORD_BUTTON", "ENABLE_VIEW_PASSWORD_BUTTON=TRUE", -1);
196    else
197       pcbsd::Utils::setConfFileValue(DM_CONFIG_FILE, "ENABLE_VIEW_PASSWORD_BUTTON", "ENABLE_VIEW_PASSWORD_BUTTON=FALSE", -1);
198
199    // Lastly make sure we set perms
200    system("chmod 600 " + DM_CONFIG_FILE.toLatin1());
201    ui->SaveButton->setEnabled(false);
202}
203
204///////////////////////////////////////////////////////////////////////////////
205void MainWindow::on_AutoLoginEnabledCB_clicked(bool checked)
206{
207    ui->UsersList->setEnabled(checked);
208    ui->SaveButton->setEnabled(true);
209}
210
211///////////////////////////////////////////////////////////////////////////////
212void MainWindow::on_EnableVNC_clicked(bool checked)
213{
214  Q_UNUSED(checked);
215  ui->SaveButton->setEnabled(true);
216}
217
218///////////////////////////////////////////////////////////////////////////////
219void MainWindow::on_checkShowPW_clicked(bool checked)
220{
221  Q_UNUSED(checked);
222  ui->SaveButton->setEnabled(true);
223}
224
225///////////////////////////////////////////////////////////////////////////////
226void MainWindow::slotSingleInstance()
227{
228   this->hide();
229   this->showNormal();
230   this->activateWindow();
231   this->raise();
232}
Note: See TracBrowser for help on using the repository browser.