#pragma once
#include <drogon/exports.h>
#include <drogon/drogon_callbacks.h>
#include <drogon/plugins/Plugin.h>
#include <regex>
#include <memory>
namespace drogon
{
namespace plugin
{
class DROGON_EXPORT SecureSSLRedirector
    : public drogon::Plugin<SecureSSLRedirector>,
      public std::enable_shared_from_this<SecureSSLRedirector>
{
  public:
    SecureSSLRedirector()
    {
    }
    void initAndStart(const Json::Value &config) override;
    void shutdown() override;
  private:
    bool redirectingAdvice(const HttpRequestPtr &,
                           std::string &,
                           std::string &) const;
    bool redirectToSSL(const HttpRequestPtr &,
                       std::string &,
                       std::string &) const;
    std::regex exemptRegex_;
    bool regexFlag_{false};
    std::string secureHost_;
};
}  
}  