diff options
Diffstat (limited to 'Postman/PostmanOptions.php')
-rw-r--r-- | Postman/PostmanOptions.php | 430 |
1 files changed, 430 insertions, 0 deletions
diff --git a/Postman/PostmanOptions.php b/Postman/PostmanOptions.php new file mode 100644 index 0000000..863ce0d --- /dev/null +++ b/Postman/PostmanOptions.php @@ -0,0 +1,430 @@ +<?php +if (! interface_exists ( "PostmanOptionsInterface" )) { + interface PostmanOptionsInterface { + /** + * I'm stuck with these methods because of Gmail API Extension + */ + public function save(); + public function isNew(); + public function getLogLevel(); + public function getHostname(); + public function getPort(); + public function getMessageSenderEmail(); + public function getMessageSenderName(); + public function getClientId(); + public function getClientSecret(); + public function getTransportType(); + public function getAuthenticationType(); + public function getEncryptionType(); + public function getUsername(); + public function getPassword(); + public function getReplyTo(); + public function getConnectionTimeout(); + public function getReadTimeout(); + public function isSenderNameOverridePrevented(); + public function isAuthTypePassword(); + public function isAuthTypeOAuth2(); + public function isAuthTypeLogin(); + public function isAuthTypePlain(); + public function isAuthTypeCrammd5(); + public function isAuthTypeNone(); + + /** + * + * @deprecated + * + */ + public function getSenderEmail(); + /** + * + * @deprecated + * + */ + public function getSenderName(); + } +} + +if (! class_exists ( "PostmanOptions" )) { + + /** + * http://stackoverflow.com/questions/23880928/use-oauth-refresh-token-to-obtain-new-access-token-google-api + * http://pastebin.com/jA9sBNTk + * + * Make sure these emails are permitted (see http://en.wikipedia.org/wiki/E-mail_address#Internationalization): + */ + class PostmanOptions implements PostmanOptionsInterface { + + // the option database name + const POSTMAN_OPTIONS = 'postman_options'; + + // the options fields + const VERSION = 'version'; + const ENVELOPE_SENDER = 'envelope_sender'; + const MESSAGE_SENDER_EMAIL = 'sender_email'; + const MESSAGE_SENDER_NAME = 'sender_name'; + const REPLY_TO = 'reply_to'; + const FORCED_TO_RECIPIENTS = 'forced_to'; + const FORCED_CC_RECIPIENTS = 'forced_cc'; + const FORCED_BCC_RECIPIENTS = 'forced_bcc'; + const ADDITIONAL_HEADERS = 'headers'; + const TEST_EMAIL = 'test_email'; + const HOSTNAME = 'hostname'; + const PORT = 'port'; + const TRANSPORT_TYPE = 'transport_type'; + const AUTHENTICATION_TYPE = 'auth_type'; + const AUTHENTICATION_TYPE_NONE = 'none'; + const AUTHENTICATION_TYPE_PLAIN = 'plain'; + const AUTHENTICATION_TYPE_LOGIN = 'login'; + const AUTHENTICATION_TYPE_CRAMMD5 = 'crammd5'; + const AUTHENTICATION_TYPE_OAUTH2 = 'oauth2'; + const SECURITY_TYPE = 'enc_type'; + const SECURITY_TYPE_NONE = 'none'; + const SECURITY_TYPE_SMTPS = 'ssl'; + const SECURITY_TYPE_STARTTLS = 'tls'; + const CLIENT_ID = 'oauth_client_id'; + const CLIENT_SECRET = 'oauth_client_secret'; + const BASIC_AUTH_USERNAME = 'basic_auth_username'; + const BASIC_AUTH_PASSWORD = 'basic_auth_password'; + const MANDRILL_API_KEY = 'mandrill_api_key'; + const SENDGRID_API_KEY = 'sendgrid_api_key'; + const PREVENT_MESSAGE_SENDER_NAME_OVERRIDE = 'prevent_sender_name_override'; + const PREVENT_MESSAGE_SENDER_EMAIL_OVERRIDE = 'prevent_sender_email_override'; + const CONNECTION_TIMEOUT = 'connection_timeout'; + const READ_TIMEOUT = 'read_timeout'; + const LOG_LEVEL = 'log_level'; + const RUN_MODE = 'run_mode'; + const RUN_MODE_PRODUCTION = 'production'; + const RUN_MODE_LOG_ONLY = 'log_only'; + const RUN_MODE_IGNORE = 'ignore'; + const MAIL_LOG_ENABLED_OPTION = 'mail_log_enabled'; + const MAIL_LOG_ENABLED_OPTION_YES = 'true'; + const MAIL_LOG_ENABLED_OPTION_NO = 'false'; + const MAIL_LOG_MAX_ENTRIES = 'mail_log_max_entries'; + const STEALTH_MODE = 'stealth_mode'; + const TRANSCRIPT_SIZE = 'transcript_size'; + const TEMPORARY_DIRECTORY = 'tmp_dir'; + const DISABLE_EMAIL_VALIDAITON = 'disable_email_validation'; + + // defaults + const DEFAULT_TRANSCRIPT_SIZE = 128; + const DEFAULT_STEALTH_MODE = false; + const DEFAULT_RUN_MODE = self::RUN_MODE_PRODUCTION; + const DEFAULT_MAIL_LOG_ENABLED = self::MAIL_LOG_ENABLED_OPTION_YES; + const DEFAULT_MAIL_LOG_ENTRIES = 250; + const DEFAULT_LOG_LEVEL = PostmanLogger::ERROR_INT; + const DEFAULT_TRANSPORT_TYPE = 'smtp'; // must match what's in PostmanSmtpModuleTransport + const DEFAULT_TCP_READ_TIMEOUT = 60; + const DEFAULT_TCP_CONNECTION_TIMEOUT = 10; + const DEFAULT_PLUGIN_MESSAGE_SENDER_NAME_ENFORCED = false; + const DEFAULT_PLUGIN_MESSAGE_SENDER_EMAIL_ENFORCED = false; + const DEFAULT_TEMP_DIRECTORY = '/tmp'; + + // options data + private $options; + + // singleton instance + public static function getInstance() { + static $inst = null; + if ($inst === null) { + $inst = new PostmanOptions (); + } + return $inst; + } + + /** + * private constructor + */ + private function __construct() { + $this->load (); + } + // + public function save() { + update_option ( PostmanOptions::POSTMAN_OPTIONS, $this->options ); + } + public function reload() { + $this->load (); + } + private function load() { + $this->options = get_option ( PostmanOptions::POSTMAN_OPTIONS ); + } + public function isNew() { + return ! isset ( $this->options [PostmanOptions::TRANSPORT_TYPE] ); + } + public function isMailLoggingEnabled() { + $allowed = $this->isMailLoggingAllowed (); + $enabled = $this->getMailLoggingEnabled () == self::MAIL_LOG_ENABLED_OPTION_YES; + return $allowed && $enabled; + } + public function getTempDirectory() { + if (isset ( $this->options [self::TEMPORARY_DIRECTORY] )) + return $this->options [self::TEMPORARY_DIRECTORY]; + else + return self::DEFAULT_TEMP_DIRECTORY; + } + public function isMailLoggingAllowed() { + return true; + } + public function isStealthModeEnabled() { + if (isset ( $this->options [PostmanOptions::STEALTH_MODE] )) + return $this->options [PostmanOptions::STEALTH_MODE]; + else + return self::DEFAULT_STEALTH_MODE; + } + public function getMailLoggingEnabled() { + if (isset ( $this->options [PostmanOptions::MAIL_LOG_ENABLED_OPTION] )) + return $this->options [PostmanOptions::MAIL_LOG_ENABLED_OPTION]; + else + return self::DEFAULT_MAIL_LOG_ENABLED; + } + public function getRunMode() { + if (isset ( $this->options [self::RUN_MODE] )) + return $this->options [self::RUN_MODE]; + else + return self::DEFAULT_RUN_MODE; + } + public function getMailLoggingMaxEntries() { + if (isset ( $this->options [PostmanOptions::MAIL_LOG_MAX_ENTRIES] )) + return $this->options [PostmanOptions::MAIL_LOG_MAX_ENTRIES]; + else + return self::DEFAULT_MAIL_LOG_ENTRIES; + } + public function getTranscriptSize() { + if (isset ( $this->options [PostmanOptions::TRANSCRIPT_SIZE] )) + return $this->options [PostmanOptions::TRANSCRIPT_SIZE]; + else + return self::DEFAULT_TRANSCRIPT_SIZE; + } + public function getLogLevel() { + if (isset ( $this->options [PostmanOptions::LOG_LEVEL] )) + return $this->options [PostmanOptions::LOG_LEVEL]; + else + return self::DEFAULT_LOG_LEVEL; + } + public function getForcedToRecipients() { + if (isset ( $this->options [self::FORCED_TO_RECIPIENTS] )) + return $this->options [self::FORCED_TO_RECIPIENTS]; + } + public function getForcedCcRecipients() { + if (isset ( $this->options [self::FORCED_CC_RECIPIENTS] )) + return $this->options [self::FORCED_CC_RECIPIENTS]; + } + public function getForcedBccRecipients() { + if (isset ( $this->options [self::FORCED_BCC_RECIPIENTS] )) + return $this->options [self::FORCED_BCC_RECIPIENTS]; + } + public function getAdditionalHeaders() { + if (isset ( $this->options [self::ADDITIONAL_HEADERS] )) + return $this->options [self::ADDITIONAL_HEADERS]; + } + // + public function getHostname() { + if (isset ( $this->options [PostmanOptions::HOSTNAME] )) + return $this->options [PostmanOptions::HOSTNAME]; + } + public function getPort() { + if (isset ( $this->options [PostmanOptions::PORT] )) + return $this->options [PostmanOptions::PORT]; + } + public function getEnvelopeSender() { + if (isset ( $this->options [PostmanOptions::ENVELOPE_SENDER] )) + return $this->options [PostmanOptions::ENVELOPE_SENDER]; + } + public function getMessageSenderEmail() { + if (isset ( $this->options [PostmanOptions::MESSAGE_SENDER_EMAIL] )) + return $this->options [PostmanOptions::MESSAGE_SENDER_EMAIL]; + } + public function getMessageSenderName() { + if (isset ( $this->options [PostmanOptions::MESSAGE_SENDER_NAME] )) + return $this->options [PostmanOptions::MESSAGE_SENDER_NAME]; + } + public function getClientId() { + if (isset ( $this->options [PostmanOptions::CLIENT_ID] )) + return $this->options [PostmanOptions::CLIENT_ID]; + } + public function getClientSecret() { + if (isset ( $this->options [PostmanOptions::CLIENT_SECRET] )) + return $this->options [PostmanOptions::CLIENT_SECRET]; + } + public function getTransportType() { + if (isset ( $this->options [PostmanOptions::TRANSPORT_TYPE] )) + return $this->options [PostmanOptions::TRANSPORT_TYPE]; + } + public function getAuthenticationType() { + if (isset ( $this->options [PostmanOptions::AUTHENTICATION_TYPE] )) + return $this->options [PostmanOptions::AUTHENTICATION_TYPE]; + } + public function getEncryptionType() { + if (isset ( $this->options [PostmanOptions::SECURITY_TYPE] )) + return $this->options [PostmanOptions::SECURITY_TYPE]; + } + public function getUsername() { + if (isset ( $this->options [PostmanOptions::BASIC_AUTH_USERNAME] )) + return $this->options [PostmanOptions::BASIC_AUTH_USERNAME]; + } + public function getPassword() { + if (isset ( $this->options [PostmanOptions::BASIC_AUTH_PASSWORD] )) + return base64_decode ( $this->options [PostmanOptions::BASIC_AUTH_PASSWORD] ); + } + public function getMandrillApiKey() { + if (isset ( $this->options [PostmanOptions::MANDRILL_API_KEY] )) + return base64_decode ( $this->options [PostmanOptions::MANDRILL_API_KEY] ); + } + public function getSendGridApiKey() { + if (isset ( $this->options [PostmanOptions::SENDGRID_API_KEY] )) + return base64_decode ( $this->options [PostmanOptions::SENDGRID_API_KEY] ); + } + public function getReplyTo() { + if (isset ( $this->options [PostmanOptions::REPLY_TO] )) + return $this->options [PostmanOptions::REPLY_TO]; + } + public function getConnectionTimeout() { + if (! empty ( $this->options [self::CONNECTION_TIMEOUT] )) + return $this->options [self::CONNECTION_TIMEOUT]; + else + return self::DEFAULT_TCP_CONNECTION_TIMEOUT; + } + public function getReadTimeout() { + if (! empty ( $this->options [self::READ_TIMEOUT] )) + return $this->options [self::READ_TIMEOUT]; + else + return self::DEFAULT_TCP_READ_TIMEOUT; + } + public function isPluginSenderNameEnforced() { + if ($this->isNew ()) + return self::DEFAULT_PLUGIN_MESSAGE_SENDER_NAME_ENFORCED; + if (isset ( $this->options [PostmanOptions::PREVENT_MESSAGE_SENDER_NAME_OVERRIDE] )) + return $this->options [PostmanOptions::PREVENT_MESSAGE_SENDER_NAME_OVERRIDE]; + } + public function isEmailValidationDisabled() { + if (isset ( $this->options [PostmanOptions::DISABLE_EMAIL_VALIDAITON] )) + return $this->options [PostmanOptions::DISABLE_EMAIL_VALIDAITON]; + } + /** + * (non-PHPdoc) + * + * @see PostmanOptions::isSenderNameOverridePrevented() + * @deprecated by isPluginSenderNameEnforced + */ + public function isSenderNameOverridePrevented() { + return $this->isPluginSenderEmailEnforced (); + } + public function isPluginSenderEmailEnforced() { + if ($this->isNew ()) + return self::DEFAULT_PLUGIN_MESSAGE_SENDER_EMAIL_ENFORCED; + if (isset ( $this->options [PostmanOptions::PREVENT_MESSAGE_SENDER_EMAIL_OVERRIDE] )) + return $this->options [PostmanOptions::PREVENT_MESSAGE_SENDER_EMAIL_OVERRIDE]; + } + /** + * + * @deprecated by isPluginSenderEmailEnforced + */ + public function isSenderEmailOverridePrevented() { + return $this->isPluginSenderEmailEnforced (); + } + private function setSenderEmail($senderEmail) { + $this->options [PostmanOptions::MESSAGE_SENDER_EMAIL] = $senderEmail; + } + public function setMessageSenderEmailIfEmpty($senderEmail) { + if (empty ( $this->options [PostmanOptions::MESSAGE_SENDER_EMAIL] )) { + $this->setSenderEmail ( $senderEmail ); + } + } + private function setSenderName($senderName) { + $this->options [PostmanOptions::MESSAGE_SENDER_NAME] = $senderName; + } + public function setMessageSenderNameIfEmpty($senderName) { + if (empty ( $this->options [PostmanOptions::MESSAGE_SENDER_NAME] )) { + $this->setSenderName ( $senderName ); + } + } + public function isAuthTypePassword() { + return $this->isAuthTypeLogin () || $this->isAuthTypeCrammd5 () || $this->isAuthTypePlain (); + } + public function isAuthTypeOAuth2() { + return PostmanOptions::AUTHENTICATION_TYPE_OAUTH2 == $this->getAuthenticationType (); + } + public function isAuthTypeLogin() { + return PostmanOptions::AUTHENTICATION_TYPE_LOGIN == $this->getAuthenticationType (); + } + public function isAuthTypePlain() { + return PostmanOptions::AUTHENTICATION_TYPE_PLAIN == $this->getAuthenticationType (); + } + public function isAuthTypeCrammd5() { + return PostmanOptions::AUTHENTICATION_TYPE_CRAMMD5 == $this->getAuthenticationType (); + } + public function isAuthTypeNone() { + return PostmanOptions::AUTHENTICATION_TYPE_NONE == $this->getAuthenticationType (); + } + /** + * + * @deprecated Required by the Postman Gmail Extension + * + * @see PostmanOptionsInterface::getSenderEmail() + */ + public function getSenderEmail() { + return $this->getMessageSenderEmail (); + } + /** + * + * @deprecated Required by the Postman Gmail Extension + * + * @see PostmanOptionsInterface::getSenderEmail() + */ + public function getSenderName() { + return $this->getMessageNameEmail (); + } + + /** + * + * @return string + */ + public function export() { + if (PostmanPreRequisitesCheck::checkZlibEncode ()) { + $data = $this->options; + $data ['version'] = PostmanState::getInstance ()->getVersion (); + foreach ( PostmanTransportRegistry::getInstance ()->getTransports () as $transport ) { + $data = $transport->prepareOptionsForExport ( $data ); + } + $data = base64_encode ( gzcompress ( json_encode ( $data ), 9 ) ); + return $data; + } + } + + /** + * + * @param unknown $data + */ + public function import($data) { + if (PostmanPreRequisitesCheck::checkZlibEncode ()) { + $logger = new PostmanLogger ( get_class ( $this ) ); + $logger->debug ( 'Importing Settings' ); + $base64 = $data; + $logger->trace ( $base64 ); + $gz = base64_decode ( $base64 ); + $logger->trace ( $gz ); + $json = @gzuncompress ( $gz ); + $logger->trace ( $json ); + if (! empty ( $json )) { + $data = json_decode ( $json, true ); + $logger->trace ( $data ); + { + // overwrite the current version with the version from the imported options + // this way database upgrading can occur + $postmanState = get_option ( 'postman_state' ); + $postmanState ['version'] = $data ['version']; + $logger->trace ( sprintf ( 'Setting Postman version to %s', $postmanState ['version'] ) ); + assert ( $postmanState ['version'] == $data ['version'] ); + update_option ( 'postman_state', $postmanState ); + } + $this->options = $data; + $logger->info ( 'Imported data' ); + $this->save (); + return true; + } else { + $logger->error ( 'Could not import data - data error' ); + return false; + } + } + } + } +}
\ No newline at end of file |