pion-net  4.0.9
net/include/pion/net/HTTPBasicAuth.hpp
00001 // ------------------------------------------------------------------
00002 // pion-net: a C++ framework for building lightweight HTTP interfaces
00003 // ------------------------------------------------------------------
00004 // Copyright (C) 2007-2008 Atomic Labs, Inc.  (http://www.atomiclabs.com)
00005 //
00006 // Distributed under the Boost Software License, Version 1.0.
00007 // See http://www.boost.org/LICENSE_1_0.txt
00008 //
00009 
00010 #ifndef __PION_HTTPBASICAUTH_HEADER__
00011 #define __PION_HTTPBASICAUTH_HEADER__
00012 
00013 #include <map>
00014 #include <string>
00015 #include <pion/PionConfig.hpp>
00016 #include <pion/net/HTTPAuth.hpp>
00017 #include <pion/PionDateTime.hpp>  // order important , otherwise compiling error under win32
00018 
00019 
00020 namespace pion {    // begin namespace pion
00021 namespace net {     // begin namespace net (Pion Network Library)
00022 
00027 class PION_NET_API HTTPBasicAuth :
00028     public HTTPAuth
00029 {
00030 public:
00031     
00033     HTTPBasicAuth(PionUserManagerPtr userManager, const std::string& realm="PION:NET");
00034     
00036     virtual ~HTTPBasicAuth() {}
00037     
00050     virtual bool handleRequest(HTTPRequestPtr& request, TCPConnectionPtr& tcp_conn);
00051     
00060     virtual void setOption(const std::string& name, const std::string& value);
00061 
00062     
00063 protected:
00064 
00071     void handleUnauthorized(HTTPRequestPtr& http_request, TCPConnectionPtr& tcp_conn);
00072     
00078     static bool parseAuthorization(std::string const &authorization, std::string &credentials);
00079     
00083     static bool parseCredentials(std::string const &credentials, std::string &username, std::string &password);
00084 
00085     
00086 private:
00087     
00089     typedef std::map<std::string,std::pair<PionDateTime,PionUserPtr> >  PionUserCache;
00090     
00092     static const unsigned int   CACHE_EXPIRATION;
00093 
00094 
00096     std::string                 m_realm; 
00097 
00099     PionDateTime                m_cache_cleanup_time;
00100         
00102     PionUserCache               m_user_cache;
00103     
00105     mutable boost::mutex        m_cache_mutex;
00106 };
00107 
00108     
00109 }   // end namespace net
00110 }   // end namespace pion
00111 
00112 #endif