pion
5.0.6
|
00001 // --------------------------------------------------------------------- 00002 // pion: a Boost C++ framework for building lightweight HTTP interfaces 00003 // --------------------------------------------------------------------- 00004 // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) 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_HTTP_COOKIE_AUTH_HEADER__ 00011 #define __PION_HTTP_COOKIE_AUTH_HEADER__ 00012 00013 #include <map> 00014 #include <string> 00015 #include <boost/random.hpp> 00016 #include <pion/config.hpp> 00017 #include <pion/http/auth.hpp> 00018 00019 00020 namespace pion { // begin namespace pion 00021 namespace http { // begin namespace http 00022 00023 00028 class PION_API cookie_auth : 00029 public http::auth 00030 { 00031 public: 00032 00044 cookie_auth(user_manager_ptr userManager, 00045 const std::string& login="/login", 00046 const std::string& logout="/logout", 00047 const std::string& redirect=""); 00048 00050 virtual ~cookie_auth() {} 00051 00069 virtual bool handle_request(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); 00070 00084 virtual void set_option(const std::string& name, const std::string& value); 00085 00086 00087 protected: 00088 00097 bool process_login(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); 00098 00105 void handle_unauthorized(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn); 00106 00113 void handle_redirection(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, 00114 const std::string &redirection_url, const std::string &new_cookie="", bool delete_cookie=false); 00115 00122 void handle_ok(http::request_ptr& http_request_ptr, tcp::connection_ptr& tcp_conn, 00123 const std::string &new_cookie="", bool delete_cookie=false); 00124 00128 void expire_cache(const boost::posix_time::ptime &time_now); 00129 00130 00131 private: 00132 00134 static const unsigned int CACHE_EXPIRATION; 00135 00137 static const unsigned int RANDOM_COOKIE_BYTES; 00138 00140 static const std::string AUTH_COOKIE_NAME; 00141 00143 std::string m_login; 00144 00146 std::string m_logout; 00147 00149 std::string m_redirect; 00150 00152 boost::mt19937 m_random_gen; 00153 00155 boost::uniform_int<> m_random_range; 00156 00158 boost::variate_generator<boost::mt19937&, boost::uniform_int<> > m_random_die; 00159 00161 boost::posix_time::ptime m_cache_cleanup_time; 00162 00164 user_cache_type m_user_cache; 00165 00167 mutable boost::mutex m_cache_mutex; 00168 }; 00169 00170 00171 } // end namespace http 00172 } // end namespace pion 00173 00174 #endif