ferencd@0: ferencd@0: ferencd@0: #if VMIME_HAVE_SASL_SUPPORT ferencd@0: ferencd@0: // SASL authentication handler ferencd@0: class interactiveAuthenticator : public vmime::security::sasl::defaultSASLAuthenticator ferencd@0: { ferencd@0: const std::vector > getAcceptableMechanisms ferencd@0: (const std::vector >& available, ferencd@0: vmime::shared_ptr suggested) const ferencd@0: { ferencd@0: std::cout << std::endl << "Available SASL mechanisms:" << std::endl; ferencd@0: ferencd@0: for (unsigned int i = 0 ; i < available.size() ; ++i) ferencd@0: { ferencd@0: std::cout << " " << available[i]->getName(); ferencd@0: ferencd@0: if (suggested && available[i]->getName() == suggested->getName()) ferencd@0: std::cout << "(suggested)"; ferencd@0: } ferencd@0: ferencd@0: std::cout << std::endl << std::endl; ferencd@0: ferencd@0: return defaultSASLAuthenticator::getAcceptableMechanisms(available, suggested); ferencd@0: } ferencd@0: ferencd@0: void setSASLMechanism(vmime::shared_ptr mech) ferencd@0: { ferencd@0: std::cout << "Trying '" << mech->getName() << "' authentication mechanism" << std::endl; ferencd@0: ferencd@0: defaultSASLAuthenticator::setSASLMechanism(mech); ferencd@0: } ferencd@0: ferencd@0: const vmime::string getUsername() const ferencd@0: { ferencd@0: if (m_username.empty()) ferencd@0: m_username = getUserInput("Username"); ferencd@0: ferencd@0: return m_username; ferencd@0: } ferencd@0: ferencd@0: const vmime::string getPassword() const ferencd@0: { ferencd@0: if (m_password.empty()) ferencd@0: m_password = getUserInput("Password"); ferencd@0: ferencd@0: return m_password; ferencd@0: } ferencd@0: ferencd@0: static const vmime::string getUserInput(const std::string& prompt) ferencd@0: { ferencd@0: std::cout << prompt << ": "; ferencd@0: std::cout.flush(); ferencd@0: ferencd@0: vmime::string res; ferencd@0: std::getline(std::cin, res); ferencd@0: ferencd@0: return res; ferencd@0: } ferencd@0: ferencd@0: private: ferencd@0: ferencd@0: mutable vmime::string m_username; ferencd@0: mutable vmime::string m_password; ferencd@0: }; ferencd@0: ferencd@0: #else // !VMIME_HAVE_SASL_SUPPORT ferencd@0: ferencd@0: // Simple authentication handler ferencd@0: class interactiveAuthenticator : public vmime::security::defaultAuthenticator ferencd@0: { ferencd@0: const vmime::string getUsername() const ferencd@0: { ferencd@0: if (m_username.empty()) ferencd@0: m_username = getUserInput("Username"); ferencd@0: ferencd@0: return m_username; ferencd@0: } ferencd@0: ferencd@0: const vmime::string getPassword() const ferencd@0: { ferencd@0: if (m_password.empty()) ferencd@0: m_password = getUserInput("Password"); ferencd@0: ferencd@0: return m_password; ferencd@0: } ferencd@0: ferencd@0: static const vmime::string getUserInput(const std::string& prompt) ferencd@0: { ferencd@0: std::cout << prompt << ": "; ferencd@0: std::cout.flush(); ferencd@0: ferencd@0: vmime::string res; ferencd@0: std::getline(std::cin, res); ferencd@0: ferencd@0: return res; ferencd@0: } ferencd@0: ferencd@0: private: ferencd@0: ferencd@0: mutable vmime::string m_username; ferencd@0: mutable vmime::string m_password; ferencd@0: }; ferencd@0: ferencd@0: #endif // VMIME_HAVE_SASL_SUPPORT ferencd@0: