mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-04 04:42:05 -04:00
fix(lock): Restore system PAM fallback, faillock support, and auth feedback
- Re-add loginConfigWatcher so installs can still fall through to /etc/pam.d instead of the bundled PAM assets - Add login-faillock bundled PAM asset at runtime. Use it as the bundled fallback when dankshell config is absent - Fix invalid bare property writes (u2fPending, u2fState, unlockInProgress, state) in Pam.qml - Improve lockscreen auth feedback
This commit is contained in:
@@ -39,6 +39,38 @@ Item {
|
||||
lockerReadyArmed = true;
|
||||
unlocking = false;
|
||||
pamState = "";
|
||||
if (pam)
|
||||
pam.lockMessage = "";
|
||||
}
|
||||
|
||||
function currentAuthFeedbackText() {
|
||||
if (!pam)
|
||||
return "";
|
||||
if (pam.u2fState === "insert" && !pam.u2fPending)
|
||||
return I18n.tr("Insert your security key...");
|
||||
if (pam.u2fState === "waiting" && !pam.u2fPending)
|
||||
return I18n.tr("Touch your security key...");
|
||||
if (pam.lockMessage && pam.lockMessage.length > 0)
|
||||
return pam.lockMessage;
|
||||
if (pam.fprintState === "error") {
|
||||
const detail = (pam.fprint.message || "").trim();
|
||||
return detail.length > 0 ? I18n.tr("Fingerprint error: %1").arg(detail) : I18n.tr("Fingerprint error");
|
||||
}
|
||||
if (pam.fprintState === "max")
|
||||
return I18n.tr("Maximum fingerprint attempts reached. Please use password.");
|
||||
if (pam.fprintState === "fail")
|
||||
return I18n.tr("Fingerprint not recognized (%1/%2). Please try again or use password.").arg(pam.fprint.tries).arg(SettingsData.maxFprintTries);
|
||||
if (root.pamState === "error")
|
||||
return I18n.tr("Authentication error - try again");
|
||||
if (root.pamState === "max")
|
||||
return I18n.tr("Too many attempts - locked out");
|
||||
if (root.pamState === "fail")
|
||||
return I18n.tr("Incorrect password - try again");
|
||||
return "";
|
||||
}
|
||||
|
||||
function authFeedbackIsHint() {
|
||||
return pam && (pam.u2fState === "waiting" || pam.u2fState === "insert") && !pam.u2fPending;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
@@ -1045,30 +1077,18 @@ Item {
|
||||
}
|
||||
|
||||
StyledText {
|
||||
id: authFeedbackText
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: 20
|
||||
text: {
|
||||
if (pam.u2fState === "insert" && !pam.u2fPending) {
|
||||
return "Insert your security key...";
|
||||
}
|
||||
if (pam.u2fState === "waiting" && !pam.u2fPending) {
|
||||
return "Touch your security key...";
|
||||
}
|
||||
if (root.pamState === "error") {
|
||||
return "Authentication error - try again";
|
||||
}
|
||||
if (root.pamState === "max") {
|
||||
return "Too many attempts - locked out";
|
||||
}
|
||||
if (root.pamState === "fail") {
|
||||
return "Incorrect password - try again";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
color: (pam.u2fState === "waiting" || pam.u2fState === "insert") ? Theme.outline : Theme.error
|
||||
Layout.preferredHeight: text.length > 0 ? Math.min(implicitHeight, Math.ceil(Theme.fontSizeSmall * 4.5)) : 0
|
||||
text: root.currentAuthFeedbackText()
|
||||
color: root.authFeedbackIsHint() ? Theme.outline : Theme.error
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
opacity: (root.pamState !== "" || ((pam.u2fState === "waiting" || pam.u2fState === "insert") && !pam.u2fPending)) ? 1 : 0
|
||||
wrapMode: Text.WordWrap
|
||||
maximumLineCount: 3
|
||||
elide: Text.ElideRight
|
||||
opacity: text.length > 0 ? 1 : 0
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation {
|
||||
|
||||
Reference in New Issue
Block a user