mirror of
https://github.com/hyprwm/hyprlock.git
synced 2024-11-17 07:15:57 +01:00
883fbdfe01
* auth: implement a full pam conversation * input-field: fixup failedAttempts and color change Credits to @bvr-yr * pam: set default module to hyprland * input-field: backup previous asset * auth: restart auth in onPasswordCheckTimer * auth: immediately switch to waiting when input was submitted * auth: remove redundant waitingForPamAuth * auth: add inputRequested and reschedule submitInput * auth: clear password buffer and handle submitInput before input is requested * Revert "input-field: backup previous asset" This reverts commit 89702945be6af4aa43f54688ad34a4ccba994a3e. Without the backup we avoid rendering the prompt placeholder for one frame when the failText is not available. Looks better this way. * auth: fallback to su if pam_module not in /etc/pam.d rare occasion where a path check even works on nix * auth: rename inputSubmitted and resubmit callback * auth: detach failText from the conversation * fix rebase mistake * auth: make sure prompt and failText are not reset when restarting auth needed for labels * auth: force update timers when the prompt changes * auth: remove unused stuff
54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <mutex>
|
|
#include <condition_variable>
|
|
|
|
class CAuth {
|
|
public:
|
|
struct SPamConversationState {
|
|
std::string input = "";
|
|
std::string prompt = "";
|
|
std::string failText = "";
|
|
|
|
std::mutex inputMutex;
|
|
std::condition_variable inputSubmittedCondition;
|
|
|
|
bool waitingForPamAuth = false;
|
|
bool inputRequested = false;
|
|
|
|
bool success = false;
|
|
};
|
|
|
|
CAuth();
|
|
|
|
void start();
|
|
bool auth();
|
|
bool didAuthSucceed();
|
|
|
|
void waitForInput();
|
|
void submitInput(std::string input);
|
|
|
|
std::optional<std::string> getLastFailText();
|
|
std::optional<std::string> getLastPrompt();
|
|
|
|
bool checkWaiting();
|
|
|
|
void terminate();
|
|
|
|
// Should only be set via the main thread
|
|
bool m_bDisplayFailText = false;
|
|
|
|
private:
|
|
SPamConversationState m_sConversationState;
|
|
|
|
bool m_bBlockInput = true;
|
|
|
|
std::string m_sPamModule;
|
|
|
|
void resetConversation();
|
|
};
|
|
|
|
inline std::unique_ptr<CAuth> g_pAuth;
|