2017-04-03 Fred Gleason <fredg@paravelsystems.com>

* Added a 'USERS.LOCAL_AUTH' field to the database.
	* Added a 'USERS.PAM_SERVICE' field to the database.
	* Added an index on 'STATIONS.IPV4_ADDRESS' to the database.
	* Incremented the database version to 262.
	* Added 'RDUser::localAuthentication()',
	'RDUser::setLocalAuthentication()', 'RDUser::pamService()' and
	'RDUser::setPamService()' methods in 'lib/rduser.cpp' and
	'lib/rduser.h'.
	* Added 'PAM Service' and 'Authenticate This User Locally' controls
	to the Edit User dialog in 'rdadmin/edit_user.cpp' and
	'rdadmin/edit_user.h'.
	* Added a PAM service configuration in 'conf/rivendell.pam'.
This commit is contained in:
Fred Gleason
2017-04-03 18:15:07 -04:00
parent 9cfcfcb5be
commit 275c08b156
21 changed files with 283 additions and 49 deletions

View File

@@ -105,15 +105,49 @@ EditUser::EditUser(const QString &user,QWidget *parent)
user_description_label->setFont(font);
user_description_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
//
// Local Authentication
//
user_localauth_check=new QCheckBox(this);
user_localauth_check->setGeometry(20,75,15,15);
connect(user_localauth_check,SIGNAL(toggled(bool)),
this,SLOT(localAuthToggledData(bool)));
user_localauth_label=new QLabel(user_localauth_check,
tr("Authenticate This User Locally"),this);
user_localauth_label->setGeometry(40,75,180,19);
user_localauth_label->setFont(font);
user_localauth_label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix);
//
// PAM Service
//
user_pamservice_edit=new QLineEdit(this);
user_pamservice_edit->setGeometry(120,97,150,19);
user_pamservice_edit->setMaxLength(32);
user_pamservice_label=
new QLabel(user_pamservice_edit,tr("PAM Service")+":",this);
user_pamservice_label->setGeometry(10,97,105,19);
user_pamservice_label->setFont(font);
user_pamservice_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
//
// Change Password Button
//
user_password_button=new QPushButton(this);
user_password_button->setGeometry(sizeHint().width()-90,75,80,50);
user_password_button->setFont(font);
user_password_button->setText(tr("Change\n&Password"));
connect(user_password_button,SIGNAL(clicked()),this,SLOT(passwordData()));
//
// User Phone
//
user_phone_edit=new QLineEdit(this);
user_phone_edit->setGeometry(120,75,120,19);
user_phone_edit->setGeometry(120,119,120,19);
user_phone_edit->setMaxLength(20);
user_phone_edit->setValidator(validator);
QLabel *user_phone_label=new QLabel(user_phone_edit,tr("&Phone:"),this);
user_phone_label->setGeometry(10,75,105,19);
user_phone_label->setGeometry(10,119,105,19);
user_phone_label->setFont(font);
user_phone_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
@@ -121,12 +155,12 @@ EditUser::EditUser(const QString &user,QWidget *parent)
// WebAPI Authorization Timeout
//
user_webapi_auth_spin=new QSpinBox(this);
user_webapi_auth_spin->setGeometry(120,97,80,19);
user_webapi_auth_spin->setGeometry(120,141,80,19);
user_webapi_auth_spin->setRange(0,86400);
user_webapi_auth_spin->setSpecialValueText(tr("Disabled"));
QLabel *user_webapi_auth_label=
new QLabel(user_webapi_auth_spin,tr("WebAPI Timeout:"),this);
user_webapi_auth_label->setGeometry(10,97,105,19);
user_webapi_auth_label->setGeometry(10,141,105,19);
user_webapi_auth_label->setFont(font);
user_webapi_auth_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix);
@@ -134,26 +168,17 @@ EditUser::EditUser(const QString &user,QWidget *parent)
// Enable Web Login
//
user_web_box=new QCheckBox(this);
user_web_box->setGeometry(20,118,15,15);
user_web_box->setGeometry(20,162,15,15);
user_web_label=new QLabel(user_web_box,tr("Allow Web Logins"),this);
user_web_label->setGeometry(40,118,180,19);
user_web_label->setGeometry(40,162,180,19);
user_web_label->setFont(font);
user_web_label->setAlignment(AlignLeft|AlignVCenter|ShowPrefix);
//
// Change Password Button
//
QPushButton *password_button=new QPushButton(this);
password_button->setGeometry(sizeHint().width()-90,75,80,50);
password_button->setFont(font);
password_button->setText(tr("Change\n&Password"));
connect(password_button,SIGNAL(clicked()),this,SLOT(passwordData()));
//
// Administrative Group Priviledges
//
user_admin_group=new QButtonGroup(tr("Administrative Rights"),this);
user_admin_group->setGeometry(10,147,355,45);
user_admin_group->setGeometry(10,191,355,45);
user_admin_group->setFont(font);
user_admin_config_button=new QCheckBox(user_admin_group);
@@ -172,7 +197,7 @@ EditUser::EditUser(const QString &user,QWidget *parent)
// Production Group Priviledges
//
user_prod_group=new QButtonGroup(tr("Production Rights"),this);
user_prod_group->setGeometry(10,202,355,85);
user_prod_group->setGeometry(10,246,355,85);
user_prod_group->setFont(font);
user_create_carts_button=new QCheckBox(user_prod_group);
@@ -229,7 +254,7 @@ EditUser::EditUser(const QString &user,QWidget *parent)
// Traffic Group Priviledges
//
user_traffic_group=new QButtonGroup(tr("Traffic Rights"),this);
user_traffic_group->setGeometry(10,297,355,66);
user_traffic_group->setGeometry(10,341,355,66);
user_traffic_group->setFont(font);
user_create_log_button=new QCheckBox(user_traffic_group);
@@ -270,7 +295,7 @@ EditUser::EditUser(const QString &user,QWidget *parent)
// OnAir Group Priviledges
//
user_onair_group=new QButtonGroup(tr("OnAir Rights"),this);
user_onair_group->setGeometry(10,373,355,85);
user_onair_group->setGeometry(10,417,355,85);
user_onair_group->setFont(font);
user_playout_log_button=new QCheckBox(user_onair_group);
@@ -320,7 +345,7 @@ EditUser::EditUser(const QString &user,QWidget *parent)
// Podcast Group Priviledges
//
user_podcast_group=new QButtonGroup(tr("Podcasting Rights"),this);
user_podcast_group->setGeometry(10,468,355,66);
user_podcast_group->setGeometry(10,512,355,66);
user_podcast_group->setFont(font);
user_add_podcast_button=new QCheckBox(user_podcast_group);
@@ -353,7 +378,7 @@ EditUser::EditUser(const QString &user,QWidget *parent)
// Group Permissions Button
//
user_assign_perms_button=new QPushButton(this);
user_assign_perms_button->setGeometry(10,538,sizeHint().width()/2-20,50);
user_assign_perms_button->setGeometry(10,582,sizeHint().width()/2-20,50);
user_assign_perms_button->setFont(font);
user_assign_perms_button->setText(tr("Assign Group\nPermissions"));
connect(user_assign_perms_button,SIGNAL(clicked()),this,SLOT(groupsData()));
@@ -363,7 +388,7 @@ EditUser::EditUser(const QString &user,QWidget *parent)
//
user_assign_feeds_button=new QPushButton(this);
user_assign_feeds_button->
setGeometry(sizeHint().width()/2+10,538,sizeHint().width()/2-20,50);
setGeometry(sizeHint().width()/2+10,582,sizeHint().width()/2-20,50);
user_assign_feeds_button->setFont(font);
user_assign_feeds_button->setText(tr("Assign Podcast Feed\nPermissions"));
connect(user_assign_feeds_button,SIGNAL(clicked()),this,SLOT(feedsData()));
@@ -396,6 +421,9 @@ EditUser::EditUser(const QString &user,QWidget *parent)
user_full_name_edit->setText(user_user->fullName());
user_description_edit->setText(user_user->description());
user_phone_edit->setText(user_user->phone());
user_localauth_check->setChecked(user_user->localAuthentication());
user_pamservice_edit->setText(user_user->pamService());
localAuthToggledData(user_localauth_check->isChecked());
user_webapi_auth_spin->setValue(user_user->webapiAuthTimeout());
user_web_box->setChecked(user_user->enableWeb());
if(user_user->adminConfig()) {
@@ -451,7 +479,7 @@ EditUser::~EditUser()
QSize EditUser::sizeHint() const
{
return QSize(375,658);
return QSize(375,702);
}
@@ -461,6 +489,14 @@ QSizePolicy EditUser::sizePolicy() const
}
void EditUser::localAuthToggledData(bool state)
{
user_password_button->setEnabled(state);
user_pamservice_label->setDisabled(state);
user_pamservice_edit->setDisabled(state);
}
void EditUser::passwordData()
{
QString password;
@@ -539,6 +575,8 @@ void EditUser::okData()
user_user->setFullName(user_full_name_edit->text());
user_user->setDescription(user_description_edit->text());
user_user->setPhone(user_phone_edit->text());
user_user->setLocalAuthentication(user_localauth_check->isChecked());
user_user->setPamService(user_pamservice_edit->text());
user_user->setWebapiAuthTimeout(user_webapi_auth_spin->value());
user_user->setEnableWeb(user_web_box->isChecked());
user_user->setAdminConfig(user_admin_config_button->isChecked());