Navigation Menu

Skip to content

Commit

Permalink
[devicelock] Allow backends to provide a reason for a lockout. Contri…
Browse files Browse the repository at this point in the history
…butes to JB#40797
  • Loading branch information
adenexter committed Mar 29, 2018
1 parent 573c5c9 commit e40cbfc
Show file tree
Hide file tree
Showing 10 changed files with 29 additions and 23 deletions.
2 changes: 1 addition & 1 deletion src/nemo-devicelock/host/cli/cliauthenticator.cpp
Expand Up @@ -65,7 +65,7 @@ Authenticator::Methods CliAuthenticator::availableMethods() const
}


HostAuthenticationInput::Availability CliAuthenticator::availability() const
HostAuthenticationInput::Availability CliAuthenticator::availability(QVariantMap *) const
{
if (m_watcher->securityCodeSet()) {
const int maximum = maximumAttempts();
Expand Down
2 changes: 1 addition & 1 deletion src/nemo-devicelock/host/cli/cliauthenticator.h
Expand Up @@ -51,7 +51,7 @@ class CliAuthenticator : public HostAuthenticator
~CliAuthenticator();

Authenticator::Methods availableMethods() const override;
Availability availability() const override;
Availability availability(QVariantMap *feedbackData) const override;

int checkCode(const QString &code) override;
int setCode(const QString &oldCode, const QString &newCode) override;
Expand Down
2 changes: 1 addition & 1 deletion src/nemo-devicelock/host/cli/clidevicelock.cpp
Expand Up @@ -54,7 +54,7 @@ CliDeviceLock::~CliDeviceLock()
{
}

HostAuthenticationInput::Availability CliDeviceLock::availability() const
HostAuthenticationInput::Availability CliDeviceLock::availability(QVariantMap *) const
{
if (m_watcher->securityCodeSet()) {
const int maximum = maximumAttempts();
Expand Down
2 changes: 1 addition & 1 deletion src/nemo-devicelock/host/cli/clidevicelock.h
Expand Up @@ -49,7 +49,7 @@ class CliDeviceLock : public MceDeviceLock
CliDeviceLock(QObject *parent = nullptr);
~CliDeviceLock();

Availability availability() const override;
Availability availability(QVariantMap *data) const override;

int checkCode(const QString &code) override;
int setCode(const QString &oldCode, const QString &newCode) override;
Expand Down
14 changes: 8 additions & 6 deletions src/nemo-devicelock/host/hostauthenticationinput.cpp
Expand Up @@ -371,29 +371,31 @@ void HostAuthenticationInput::feedback(

void HostAuthenticationInput::lockedOut()
{
lockedOut(availability(), &HostAuthenticationInput::abortAuthentication);
QVariantMap data;
lockedOut(availability(&data), &HostAuthenticationInput::abortAuthentication, data);
}

void HostAuthenticationInput::lockedOut(
Availability availability,
void (HostAuthenticationInput::*errorFunction)(AuthenticationInput::Error error))
void (HostAuthenticationInput::*errorFunction)(AuthenticationInput::Error error),
const QVariantMap &data)
{
switch (availability) {
case CodeEntryLockedRecoverable:
(this->*errorFunction)(AuthenticationInput::MaximumAttemptsExceeded);
feedback(AuthenticationInput::TemporarilyLocked, -1);
feedback(AuthenticationInput::TemporarilyLocked, data);
break;
case CodeEntryLockedPermanent:
(this->*errorFunction)(AuthenticationInput::MaximumAttemptsExceeded);
feedback(AuthenticationInput::PermanentlyLocked, -1);
feedback(AuthenticationInput::PermanentlyLocked, data);
break;
case ManagerLockedRecoverable:
(this->*errorFunction)(AuthenticationInput::LockedByManager);
feedback(AuthenticationInput::ContactSupport, -1);
feedback(AuthenticationInput::ContactSupport, data);
break;
case ManagerLockedPermanent:
(this->*errorFunction)(AuthenticationInput::LockedByManager);
feedback(AuthenticationInput::PermanentlyLocked, -1);
feedback(AuthenticationInput::PermanentlyLocked, data);
break;
default:
// Locked out but availability doesn't reflect this. This shouldn't be reachable
Expand Down
5 changes: 3 additions & 2 deletions src/nemo-devicelock/host/hostauthenticationinput.h
Expand Up @@ -96,7 +96,7 @@ class HostAuthenticationInput : public HostObject
QObject *parent = nullptr);
virtual ~HostAuthenticationInput();

virtual Availability availability() const = 0;
virtual Availability availability(QVariantMap *feedbackData = nullptr) const = 0;
virtual int checkCode(const QString &code) = 0;
virtual int setCode(const QString &oldCode, const QString &newCode) = 0;

Expand Down Expand Up @@ -164,7 +164,8 @@ class HostAuthenticationInput : public HostObject
void lockedOut();
void lockedOut(
Availability availability,
void (HostAuthenticationInput::*errorFunction)(AuthenticationInput::Error error));
void (HostAuthenticationInput::*errorFunction)(AuthenticationInput::Error error),
const QVariantMap &data);

private:
friend class HostAuthenticationInputAdaptor;
Expand Down
11 changes: 6 additions & 5 deletions src/nemo-devicelock/host/hostauthenticator.cpp
Expand Up @@ -145,7 +145,8 @@ void HostAuthenticator::authenticate(
m_state = Authenticating;
m_challengeCode = challengeCode;

const auto availability = this->availability();
QVariantMap feedbackData;
const auto availability = this->availability(&feedbackData);
switch (availability) {
case AuthenticationNotRequired:
if (methods & Authenticator::Confirmation) {
Expand Down Expand Up @@ -176,7 +177,7 @@ void HostAuthenticator::authenticate(
case ManagerLockedRecoverable:
case ManagerLockedPermanent:
m_challengeCode.clear();
lockedOut(availability, &HostAuthenticationInput::authenticationUnavailable);
lockedOut(availability, &HostAuthenticationInput::authenticationUnavailable, feedbackData);
break;
}
}
Expand All @@ -197,11 +198,11 @@ void HostAuthenticator::requestPermission(
QStringLiteral("authenticatingPid"),
QVariant::fromValue(connectionPid(QDBusContext::connection()))).toUInt();

const QVariantMap data = {
QVariantMap data = {
{ QStringLiteral("message"), message }
};

const auto availability = this->availability();
const auto availability = this->availability(&data);
switch (availability) {
case AuthenticationNotRequired:
qCDebug(daemon, "Authentication requested. Requesting simple confirmation.");
Expand All @@ -225,7 +226,7 @@ void HostAuthenticator::requestPermission(
case CodeEntryLockedPermanent:
case ManagerLockedRecoverable:
case ManagerLockedPermanent:
lockedOut();
lockedOut(availability, &HostAuthenticationInput::authenticationUnavailable, data);
break;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/nemo-devicelock/host/hostauthenticator.h
Expand Up @@ -114,7 +114,7 @@ class HostAuthenticator : public HostAuthenticationInput
virtual bool clearCode(const QString &code) = 0;

// AuthenticationInput
Availability availability() const override = 0;
Availability availability(QVariantMap *feedbackData = nullptr) const override = 0;
int checkCode(const QString &code) override = 0;
int setCode(const QString &oldCode, const QString &newCode) override = 0;

Expand Down
10 changes: 6 additions & 4 deletions src/nemo-devicelock/host/hostdevicelock.cpp
Expand Up @@ -112,7 +112,8 @@ void HostDeviceLock::unlock()

m_state = Authenticating;

switch (const auto availability = this->availability()) {
QVariantMap data;
switch (const auto availability = this->availability(&data)) {
case AuthenticationNotRequired:
m_state = Idle;
setLocked(false);
Expand All @@ -134,7 +135,7 @@ void HostDeviceLock::unlock()
case ManagerLockedRecoverable:
case ManagerLockedPermanent:
m_state = AuthenticationError;
lockedOut(availability, &HostAuthenticationInput::authenticationUnavailable);
lockedOut(availability, &HostAuthenticationInput::authenticationUnavailable, data);
break;
}

Expand Down Expand Up @@ -419,7 +420,8 @@ void HostDeviceLock::lockedChanged()

void HostDeviceLock::availabilityChanged()
{
const auto availability = this->availability();
QVariantMap data;
const auto availability = this->availability(&data);

propertyChanged(
QStringLiteral("org.nemomobile.devicelock.DeviceLock"),
Expand Down Expand Up @@ -484,7 +486,7 @@ void HostDeviceLock::availabilityChanged()
case EnteringNewSecurityCode:
case RepeatingNewSecurityCode:
case AuthenticationError:
lockedOut(availability, &HostAuthenticationInput::abortAuthentication);
lockedOut(availability, &HostAuthenticationInput::abortAuthentication, data);
break;
default:
break;
Expand Down
2 changes: 1 addition & 1 deletion src/nemo-devicelock/host/hostdevicelock.h
Expand Up @@ -85,7 +85,7 @@ class HostDeviceLock : public HostAuthenticationInput
void requestSecurityCode() override;
void cancel() override;

Availability availability() const override = 0;
Availability availability(QVariantMap *feedbackData = nullptr) const override = 0;
int checkCode(const QString &code) override = 0;
int setCode(const QString &oldCode, const QString &newCode) override = 0;

Expand Down

0 comments on commit e40cbfc

Please sign in to comment.