/*
* Copyright (C) 2013 Canonical, Ltd.
*
* This program 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; version 3.
*
* This program 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 this program. If not, see .
*
* Author: Michael Terry
*/
#include "Greeter.h"
#include
class GreeterPrivate
{
public:
explicit GreeterPrivate(Greeter *parent);
QLightDM::Greeter *m_greeter;
bool wasPrompted;
bool promptless;
protected:
Greeter * const q_ptr;
private:
Q_DECLARE_PUBLIC(Greeter)
};
GreeterPrivate::GreeterPrivate(Greeter* parent)
: m_greeter(new QLightDM::Greeter(parent)),
wasPrompted(false),
promptless(false),
q_ptr(parent)
{
}
Greeter::Greeter(QObject* parent)
: QObject(parent),
d_ptr(new GreeterPrivate(this))
{
Q_D(Greeter);
connect(d->m_greeter, SIGNAL(showMessage(QString, QLightDM::Greeter::MessageType)),
this, SLOT(showMessageFilter(QString, QLightDM::Greeter::MessageType)));
connect(d->m_greeter, SIGNAL(showPrompt(QString, QLightDM::Greeter::PromptType)),
this, SLOT(showPromptFilter(QString, QLightDM::Greeter::PromptType)));
connect(d->m_greeter, SIGNAL(authenticationComplete()),
this, SLOT(authenticationCompleteFilter()));
d->m_greeter->connectSync();
}
bool Greeter::isAuthenticated() const
{
Q_D(const Greeter);
return d->m_greeter->isAuthenticated();
}
QString Greeter::authenticationUser() const
{
Q_D(const Greeter);
return d->m_greeter->authenticationUser();
}
bool Greeter::promptless() const
{
Q_D(const Greeter);
return d->promptless;
}
void Greeter::authenticate(const QString &username)
{
Q_D(Greeter);
d->wasPrompted = false;
if (d->promptless) {
d->promptless = false;
Q_EMIT promptlessChanged();
}
d->m_greeter->authenticate(username);
Q_EMIT authenticationUserChanged(username);
}
void Greeter::respond(const QString &response)
{
Q_D(Greeter);
d->m_greeter->respond(response);
}
bool Greeter::startSessionSync(const QString &session)
{
Q_D(Greeter);
return d->m_greeter->startSessionSync(session);
}
void Greeter::showPromptFilter(const QString &text, QLightDM::Greeter::PromptType type)
{
Q_D(Greeter);
d->wasPrompted = true;
// Strip prompt of any colons at the end
QString trimmedText = text.trimmed();
if (trimmedText.endsWith(":") || trimmedText.endsWith(":")) {
trimmedText.chop(1);
}
Q_EMIT showPrompt(trimmedText, type == QLightDM::Greeter::PromptTypeSecret);
}
void Greeter::showMessageFilter(const QString &text, QLightDM::Greeter::MessageType type)
{
Q_EMIT showMessage(text, type == QLightDM::Greeter::MessageTypeError);
}
void Greeter::authenticationCompleteFilter()
{
Q_D(Greeter);
if (!d->wasPrompted) {
d->promptless = true;
Q_EMIT promptlessChanged();
}
Q_EMIT authenticationComplete();
}