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

9.2-releasereleng/10.0releng/10.0.1releng/10.0.2releng/10.0.3
Last change on this file since 82bcb91 was 3dcfe4e, checked in by Kris Moore <kris@…>, 14 months ago

Update pcdm to setup remote VNC properly

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