annotate 3rdparty/vmime/examples/example6_authenticator.hpp @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
ferencd@0 1
ferencd@0 2
ferencd@0 3 #if VMIME_HAVE_SASL_SUPPORT
ferencd@0 4
ferencd@0 5 // SASL authentication handler
ferencd@0 6 class interactiveAuthenticator : public vmime::security::sasl::defaultSASLAuthenticator
ferencd@0 7 {
ferencd@0 8 const std::vector <vmime::shared_ptr <vmime::security::sasl::SASLMechanism> > getAcceptableMechanisms
ferencd@0 9 (const std::vector <vmime::shared_ptr <vmime::security::sasl::SASLMechanism> >& available,
ferencd@0 10 vmime::shared_ptr <vmime::security::sasl::SASLMechanism> suggested) const
ferencd@0 11 {
ferencd@0 12 std::cout << std::endl << "Available SASL mechanisms:" << std::endl;
ferencd@0 13
ferencd@0 14 for (unsigned int i = 0 ; i < available.size() ; ++i)
ferencd@0 15 {
ferencd@0 16 std::cout << " " << available[i]->getName();
ferencd@0 17
ferencd@0 18 if (suggested && available[i]->getName() == suggested->getName())
ferencd@0 19 std::cout << "(suggested)";
ferencd@0 20 }
ferencd@0 21
ferencd@0 22 std::cout << std::endl << std::endl;
ferencd@0 23
ferencd@0 24 return defaultSASLAuthenticator::getAcceptableMechanisms(available, suggested);
ferencd@0 25 }
ferencd@0 26
ferencd@0 27 void setSASLMechanism(vmime::shared_ptr <vmime::security::sasl::SASLMechanism> mech)
ferencd@0 28 {
ferencd@0 29 std::cout << "Trying '" << mech->getName() << "' authentication mechanism" << std::endl;
ferencd@0 30
ferencd@0 31 defaultSASLAuthenticator::setSASLMechanism(mech);
ferencd@0 32 }
ferencd@0 33
ferencd@0 34 const vmime::string getUsername() const
ferencd@0 35 {
ferencd@0 36 if (m_username.empty())
ferencd@0 37 m_username = getUserInput("Username");
ferencd@0 38
ferencd@0 39 return m_username;
ferencd@0 40 }
ferencd@0 41
ferencd@0 42 const vmime::string getPassword() const
ferencd@0 43 {
ferencd@0 44 if (m_password.empty())
ferencd@0 45 m_password = getUserInput("Password");
ferencd@0 46
ferencd@0 47 return m_password;
ferencd@0 48 }
ferencd@0 49
ferencd@0 50 static const vmime::string getUserInput(const std::string& prompt)
ferencd@0 51 {
ferencd@0 52 std::cout << prompt << ": ";
ferencd@0 53 std::cout.flush();
ferencd@0 54
ferencd@0 55 vmime::string res;
ferencd@0 56 std::getline(std::cin, res);
ferencd@0 57
ferencd@0 58 return res;
ferencd@0 59 }
ferencd@0 60
ferencd@0 61 private:
ferencd@0 62
ferencd@0 63 mutable vmime::string m_username;
ferencd@0 64 mutable vmime::string m_password;
ferencd@0 65 };
ferencd@0 66
ferencd@0 67 #else // !VMIME_HAVE_SASL_SUPPORT
ferencd@0 68
ferencd@0 69 // Simple authentication handler
ferencd@0 70 class interactiveAuthenticator : public vmime::security::defaultAuthenticator
ferencd@0 71 {
ferencd@0 72 const vmime::string getUsername() const
ferencd@0 73 {
ferencd@0 74 if (m_username.empty())
ferencd@0 75 m_username = getUserInput("Username");
ferencd@0 76
ferencd@0 77 return m_username;
ferencd@0 78 }
ferencd@0 79
ferencd@0 80 const vmime::string getPassword() const
ferencd@0 81 {
ferencd@0 82 if (m_password.empty())
ferencd@0 83 m_password = getUserInput("Password");
ferencd@0 84
ferencd@0 85 return m_password;
ferencd@0 86 }
ferencd@0 87
ferencd@0 88 static const vmime::string getUserInput(const std::string& prompt)
ferencd@0 89 {
ferencd@0 90 std::cout << prompt << ": ";
ferencd@0 91 std::cout.flush();
ferencd@0 92
ferencd@0 93 vmime::string res;
ferencd@0 94 std::getline(std::cin, res);
ferencd@0 95
ferencd@0 96 return res;
ferencd@0 97 }
ferencd@0 98
ferencd@0 99 private:
ferencd@0 100
ferencd@0 101 mutable vmime::string m_username;
ferencd@0 102 mutable vmime::string m_password;
ferencd@0 103 };
ferencd@0 104
ferencd@0 105 #endif // VMIME_HAVE_SASL_SUPPORT
ferencd@0 106