Your IP : 216.73.216.95


Current Path : /var/test/www/foundation/wp-content/plugins/postman-smtp/Postman/
Upload File :
Current File : /var/test/www/foundation/wp-content/plugins/postman-smtp/Postman/PostmanOptions.php

<?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;
				}
			}
		}
	}
}