104
UserPromptView::UserPromptView(session::Manager::Ptr const& session_manager)
105
: AbstractUserPromptView(session_manager)
106
, session_manager_(session_manager)
108
UserPromptView::UserPromptView(session::Manager::Ptr const& session_manager,
109
UserAuthenticator::Ptr const& user_authenticator)
110
: AbstractUserPromptView(session_manager, user_authenticator)
107
111
, username_(nullptr)
108
112
, msg_layout_(nullptr)
109
113
, prompt_layout_(nullptr)
110
114
, button_layout_(nullptr)
111
115
, prompted_(false)
112
116
, unacknowledged_messages_(false)
114
user_authenticator_.echo_on_requested.connect([this](std::string const& message, PromiseAuthCodePtr const& promise){
119
user_authenticator_->start_failed.connect(sigc::track_obj([this](){
120
HandleAuthenticationStartFailure();
123
user_authenticator_->echo_on_requested.connect(sigc::track_obj([this](std::string const& message, PromiseAuthCodePtr const& promise){
115
124
prompted_ = true;
116
125
unacknowledged_messages_ = false;
117
126
AddPrompt(message, /* visible */ true, promise);
120
user_authenticator_.echo_off_requested.connect([this](std::string const& message, PromiseAuthCodePtr const& promise){
129
user_authenticator_->echo_off_requested.connect(sigc::track_obj([this](std::string const& message, PromiseAuthCodePtr const& promise){
121
130
prompted_ = true;
122
131
unacknowledged_messages_ = false;
123
132
AddPrompt(message, /* visible */ false, promise);
126
user_authenticator_.message_requested.connect([this](std::string const& message){
135
user_authenticator_->message_requested.connect(sigc::track_obj([this](std::string const& message){
127
136
unacknowledged_messages_ = true;
128
137
AddMessage(message, nux::color::White);
131
user_authenticator_.error_requested.connect([this](std::string const& message){
140
user_authenticator_->error_requested.connect(sigc::track_obj([this](std::string const& message){
132
141
unacknowledged_messages_ = true;
133
142
AddMessage(message, nux::color::Red);
136
user_authenticator_.clear_prompts.connect([this](){
145
user_authenticator_->clear_prompts.connect(sigc::track_obj([this](){
140
149
scale.changed.connect(sigc::hide(sigc::mem_fun(this, &UserPromptView::UpdateSize)));
469
478
prompted_ = false;
470
479
unacknowledged_messages_ = false;
472
user_authenticator_.AuthenticateStart(session_manager_->UserName(),
473
sigc::mem_fun(this, &UserPromptView::AuthenticationCb));
481
if(!user_authenticator_->AuthenticateStart(session_manager_->UserName(),
482
sigc::mem_fun(this, &UserPromptView::AuthenticationCb)))
484
HandleAuthenticationStartFailure();
476
488
void UserPromptView::DoUnlock()
478
490
session_manager_->unlock_requested.emit();
493
void UserPromptView::HandleAuthenticationStartFailure()
497
if (num_retry_auth_ <= 5)
499
LOG_WARNING(logger) << "Failed to start the authentication process. Retrying for " << num_retry_auth_ << " time.";
500
source_manager_.AddTimeout(100, [this] {
501
StartAuthentication();
509
AddMessage(_("Authentication failure"), nux::color::Red);
510
AddButton(_("Switch to greeter…"), [this] {
511
session_manager_->SwitchToGreeter();
513
GetLayout()->AddLayout(button_layout_);